我使用內置的XML反序列化(不是因爲它是我的選擇,而是遺留代碼)將xml反序列化爲強類型對象。使用C#中的內置xml反序列化從外部API反序列化xml時的重複值
注:我有過XML無法控制,它是一個外部API
的問題是一個XML節點已經擴展到包括同名的子節點,它打破了系列化。
例如,XML如下:
<people>
<person>
<id>1234</id>
<person>
<name>This is my name</name>
<person>
</person>
</people>
隨着下列對象
[XmlType("person")]
public class Person {
[XmlElement("id")]
public int Id { get; set; }
[XmlElement("person")]
public PersonTitle Title{ get; set; }
}
[XmlType("person")]
pulic class PersonTitle
{
[XmlElement("name")]
public string Name { get; set; }
}
這被調用(T)xmlserializer.Deserialize(流)時引發錯誤由於即使xml有效,重複的名稱也是如此。就我個人而言,當手動反序列化更容易維護時(特別是當它永遠不會被序列化爲.net時),我不會在複製對象中的xml佈局時自動反序列化它。
但是,我想知道是否有辦法解決這個問題,即使這意味着將子對象展開。
我知道這是不行的,但作爲例子:
[XmlType("person")]
public class Person {
[XmlElement("id")]
public int Id { get; set; }
[XmlElement("person/name")]
public string Title{ get; set; }
}
任何幫助表示讚賞。
好的,所以真的沒有辦法繞過反序列化器堅持要將子元素唯一地命名爲父元素嗎? – Gats 2011-05-04 03:43:05
不是以我的經驗,但我已被證明錯誤! – 2011-05-04 03:49:07
雖然我懷疑它是可能的,但可以將名稱屬性和適當歸因的NestedPerson屬性添加到person類,並使所有屬性在語義上可選。這可能會誘使XmlSerializer創建一個具有所有其他屬性的外部人員實例,而另一個人員實例則只使用名稱屬性集合的NestedPerson屬性。但是這看起來更像是一種黑客而不是XSLT預處理器。 – 2011-05-04 03:53:09