【发布时间】:2019-11-15 21:41:22
【问题描述】:
我在 System.Xml.Serialization 中使用XmlSerializer。
我有一个由xsi:type 分隔的列表(或实际上是两个列表)。
<?xml version="1.0" encoding="utf-8"?>
<ButikerOmbud xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Info>
<Meddelande>blah blah</Meddelande>
</Info>
<ButikOmbud xsi:type="StoreAssortmentViewModel">
<Typ>Butik</Typ><Nr>2515</Nr>
</ButikOmbud>
<ButikOmbud xsi:type="StoreAssortmentViewModel">
<Typ>Butik</Typ><Nr>2516</Nr>
</ButikOmbud>
<ButikOmbud xsi:type="AgentAssortmentViewModel">
<Typ>Ombud</Typ><Nr>011703-91A</Nr>
</ButikOmbud>
<ButikOmbud xsi:type="AgentAssortmentViewModel">
<Typ>Ombud</Typ><Nr>011703-92B</Nr>
</ButikOmbud>
</ButikerOmbud>
我创建了一些映射到这个的类:
[XmlRoot(ElementName = "ButikerOmbud")]
public class ButiksCollection
{
[XmlElement(ElementName = "Info")]
public Info Info { get; set; }
[XmlElement(ElementName = "ButikOmbud")]
public List<Butik> Butiker { get; set; }
}
[XmlRoot(ElementName = "ButikOmbud")]
[XmlType(TypeName = "StoreAssortmentViewModel")]
public class Butik
{
[XmlElement(ElementName = "Typ")]
public string Typ { get; set; }
[XmlElement(ElementName = "Nr")]
public int Nr { get; set; }
}
然后我会这样做
(ButiksCollection)(new XmlSerializer(typeof(ButiksCollection)).Deserialize(memoryStream));
如果只有 StoreAssortmentViewModel 存在,这应该可以工作。但是鉴于在同一节点下存在AgentAssortmentViewModel。我不知道我应该如何反序列化这个。我假设ButiksCollection 上应该有另一个集合List<Butik> Agents。
我发现的唯一似乎映射到xsi:type 的属性应用于类,我认为这不是我想要的
我如何安排和分配我的类以便反序列化?
这是 dotnetfiddle 上的所有内容:https://dotnetfiddle.net/vmT4SK
【问题讨论】:
-
xml序列化中的类型是继承类。所以你需要一个 XmlInclude。见(汽车和自行车类):docs.microsoft.com/en-us/dotnet/api/…
标签: c# xml xmlserializer