2 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
您的示例中有幾個問題:
該模型與 xml 不匹配
每個 Animal 元素都會覆蓋 xsi 命名空間
序列化不支持布爾值
請在下面找到有關(guān)問題的更多詳細(xì)信息:
1.模型與xml不匹配
當(dāng)您指定XmlArrayItem?XmlSerializer
時,將使用類型名稱作為元素名稱,或者您可以通過顯式提供ElementName來更改它。如果您使用注釋數(shù)組屬性,XmlArrayItem
您將得到以下輸出:
Console.WriteLine(SerializeXml(new OuterClass { Animals = new Animal[] { new Cat(), new Dog() } }));
<OuterClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://myschema.com/">
? <Animals>
? ? <Cat>
? ? ? <Height>0</Height>
? ? ? <Weight>0</Weight>
? ? ? <Paws>0</Paws>
? ? ? <Meow>false</Meow>
? ? </Cat>
? ? <Dog>
? ? ? <Height>0</Height>
? ? ? <Weight>0</Weight>
? ? ? <Paws>0</Paws>
? ? ? <Woof>false</Woof>
? ? </Dog>
? </Animals>
</OuterClass>
如果不注釋,您將獲得 xsi:type 屬性定義的類型的輸出:
<OuterClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://myschema.com/">
? <Animals>
? ? <Animal xsi:type="Cat">
? ? ? <Height>0</Height>
? ? ? <Weight>0</Weight>
? ? ? <Paws>0</Paws>
? ? ? <Meow>false</Meow>
? ? </Animal>
? ? <Animal xsi:type="Dog">
? ? ? <Height>0</Height>
? ? ? <Weight>0</Weight>
? ? ? <Paws>0</Paws>
? ? ? <Woof>false</Woof>
? ? </Animal>
? </Animals>
</OuterClass>
XmlInclude
在這種情況下,您必須向基類添加屬性。
2. 每個 Animal 元素都會覆蓋 xsi 命名空間
http://www.w3.org/2001/XMLSchema-instance是W3C中定義的特殊命名空間,可幫助序列化程序了解 XML 元素中的類型。在您的輸入 xml 中,每個 Animal 元素都會使用自定義的http://myschema.com/覆蓋此名稱空間,因此當(dāng)序列化程序遇到它時xsi:type="Cat"
,它不知道它的含義。維基百科是了解 XML 命名空間的一個很好的起點:https://en.wikipedia.org/wiki/XML_namespace
3. XML 中的布爾值
W3C 將布爾數(shù)據(jù)類型定義為“true”、“false”、“0”和“1”,因此如果您使用值“?True?”反序列化布爾值,則會出現(xiàn)異常。您可能會在網(wǎng)上找到解決方法,但我認(rèn)為您的輸入 XML 格式錯誤,您需要將 XML 中的布爾值小寫。

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
您需要正確創(chuàng)建類:
OuterClass outerClass = new OuterClass()
{
Animals = new Animal[] {
new Dog() { Name = "Watson", Height = 10, Weight = 10, Paws = 4},
new Cat() { Name = "Hermy", Height = 10, Weight = 10, Paws = 4}
}
};
- 2 回答
- 0 關(guān)注
- 197 瀏覽
添加回答
舉報