2012-08-14 27 views
0

我需要將我的web應用程序轉換爲電話應用程序。我成功地將請求響應反序列化到我的Web應用程序的通用列表中,但是我還沒有弄清楚如何在電話應用程序中執行此操作。在網絡上,我可以使用DataContractSerializer和XmlDictionaryRead.CreateTextReader和System.Xml.XmlDictionaryReaderQuotas(),但Windows phone上沒有這種方法。我修改了代碼,並得到這樣的解串器來自網絡的響應流失敗

Error in line 1 position 2. Expecting element 'ArrayOfQueueItem' from namespace 'http://schemas.datacontract.org/2004/07/CMSPhoneApp.DataObjects'.. //Encountered 'Element' with name 'QueueItem', namespace ''.

錯誤還有就是deserialzier

try{ 
      using (XmlReader r = XmlReader.Create(new StringReader(content))) 
      { 
       var ser = new DataContractSerializer(typeof(T)); 
       var reader = XmlDictionaryReader.CreateDictionaryReader(r); 
       ser = new DataContractSerializer(typeof(T)); 
       var deserializedItem = (T)ser.ReadObject(reader, true); 
       reader.Close(); 
       return deserializedItem; 
      } 
     } 

我讀的響應流進字符串代碼如下:

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfQueueItem xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/DataObjects"> 
<QueueItem> 
    <callNumber>349551</callNumber> 
    <errorMsg 
    i:nil="true" /> 
    <link>/Call/349551</link> 
    <page>Call</page> 
    <siteCity>Burnaby</siteCity> 
    <status>Open</status> 
    <summary>Mobile Application Research</summary> 
</QueueItem> 
<QueueItem> 
    <callNumber>376209</callNumber> 
    <errorMsg 
    i:nil="true" /> 
    <link>/Call/376209</link> 
    <page>Call</page> 
    <siteCity>Burnaby</siteCity> 
    <status>Open</status> 
    <summary>July 2012 ASD Calls of the Month.</summary> 
    </QueueItem> 
</ArrayOfQueueItem> 

以下是「QueueItem」類:

namespace CMSPhoneApp.DataObjects 
{ 
    //This is Model 
    public class QueueItem 
    { 
    public string callNumber { get; set; } 
    public string summary { get; set; } 
    public string status { get; set; } //queInvoiceAdmin no status 
    public string link { get; set; } 
    public string errorMsg { get; set; } 
    public string page { get; set; } 
    public string siteCity { get; set; } 
    } 
} 

即使我TRID的響應流切成如下,我還是老樣子得到了同樣的錯誤:

<QueueItem> 
<callNumber>349551</callNumber> 
<errorMsg 
    i:nil="true" /> 
<link>/Call/349551</link> 
<page>Call</page> 
<siteCity>Burnaby</siteCity> 
<status>Open</status> 
<summary>Mobile Application Research</summary> 
</QueueItem> 
<QueueItem> 
    <callNumber>376209</callNumber> 
    <errorMsg 
    i:nil="true" /> 
    <link>/Call/376209</link> 
    <page>Call</page> 
    <siteCity>Burnaby</siteCity> 
    <status>Open</status> 
<summary>July 2012 ASD Calls of the Month.</summary> 
</QueueItem> 

會有人指導我還是告訴我的例子或鏈接來解決這個問題。提前致謝。

+0

我生成一個沒有列表的新響應,但我仍然得到了錯誤。它看起來應用程序沒有找到類。錯誤消息:第2行位置錯誤2.期望從名稱空間'http://schemas.datacontract.org/2004/07/CMSPhoneApp.DataObjects'調用'元素'。遇到名爲'Call'的'元素',名稱空間' http://schemas.datacontract.org/2004/07/DataObjects'。我已經使用VS2010 Express for windows Phone創建了新項目「DataObjects項目」,然後將其添加爲參考。請幫助我在幾天內癱瘓。 – user819774 2012-08-15 17:24:41

+0

另一個選擇是創建一個新項目,並將其命名爲「DataObjects」,其中包含VS 2010 Expression for Windows Phone上的所有類。 – user819774 2012-08-23 15:18:24

回答

0

這可能不是一個好的解決方案,但它解決了我的問題。我將'schemas.datacontract.org/2004/07/DataObjects'更改爲'schemas.datacontract.org/2004/07/CMSPhoneApp.DataObjects'。因此它可以找到課程的位置。另外我需要爲反序列化創建ArrayOfQueueItem類。