2013-07-09 42 views
1

我想投使用的Atom feed有Datacontract類的XML和我沒有反序列化Atom提要....如何使用DataContracts

我的代碼是以下之一:

Content.ReadAsAsync<ArticleDTOs>() 

     [Serializable] 
[DataContract(Namespace = "urn:schemas-something:some", Name = "document")] 
    public class ArticleDTOs 
    { 

     [DataMember(Name = "entry")] 
     public entry entry { get; set; } 

     } 

    [Serializable] 
    [DataContract(Namespace ="http://www.w3.org/2005/Atom")] 
    public class entry 
    { 
    [DataMember(Name = "id")] 
     public string id { get; set; } 

    } 
} 

我覺得這個問題與

DataContract中的命名空間聲明有關。我應該如何設置命名空間來正確讀取XML命名空間?

這是我要反序列化

<?xml version="1.0" encoding="utf-8"?> 

<document id="m.fy7c2fsvzxtv" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="urn:schemas-something:some"> 

<atom:entry><atom:id>m.fy7c2fsvzxtv</atom:id><atom:title>test title</atom:title><atom:published>2013-07-08T17:21:06.4035574+01:00</atom:published><atom:updated>2013-07-08T17:21:06.4050577+01:00</atom:updated><subheadline>test sub headline</subheadline><standfirst>desc</standfirst><keywords>keywords</keywords> 

<atom:content>body with Encoding </atom:content></atom:entry></document> 
+0

'atom:id'也在Atom命名空間中。你需要在你的課堂上指定這個嗎?你有特定的錯誤嗎? – Joe

+0

沒有拋出任何異常,但具有不同名稱空間的屬性設置爲null,更改它的工作空間......據我所知,DataContractSerializer不支持多個名稱空間...我決定使用XmlSerializer最差的性能,但更多靈活性和更廣泛的語法支持... – Stelio

回答

0

我沒有足夠的信譽發表評論,或我,否則我會要求澄清在註釋的XML ...

由於根據您必須反序列化的示例XML,雙引號(")會在版本,編碼和id屬性中轉義。如圖所示,這不是有效的XML。

XML是您自己程序的輸出嗎?如果是這樣,找出它在轉義字符的位置,並在寫入輸出時防止它們這樣做。

如果這是你有,那麼我建議刪除所有的反斜線轉義雙引號工作文件:

// We have to escape the backslash and the quote both, with a backslash 
xmlString.Replace("\\\#","\#"); 

或許可以解決問題了嗎?

最後,您只提到您的代碼是'失敗',並且未能提供任何形式的異常或錯誤消息...請提供更多詳細信息,說明如果上述解決方案不適用於您的代碼失敗您。

+0

嗨,亞當,這個問題是不相關的XML,「\」來自複製和粘貼...當我說它不能deserealize,這意味着它不能來映射ArticleDTO類中的入口對象....我做了很多實驗,似乎這個問題與名稱空間有關.... – Stelio