如何在XML反序列化中为它的子组件设置数组列表?
本文关键字:组件 设置 数组 列表 XML 反序列化 | 更新日期: 2023-09-27 18:15:48
我的XML:
<Plan>
<Id>default</Id>
<Layout>default</Layout>
<Zones>
<Zone>
<Id>123</Id>
</Zone>
<Zone>
<Id>456</Id>
</Zone>
<Zone>
<Id>789</Id>
</Zone>
</Plan>
下面是我的c#类系统来尝试反序列化这些代码:
[DataContract(Namespace = "")]
public class Plan
{
[DataMember]
public string Id { get; set; }
[DataMember]
public List<Zone> Zones { get; set; }
}
[DataContract]
public class Zone
{
[DataMember]
public string Id { get; set; }
}
现在当我反序列化时,它将反序列化Plan -> Id而不是Plan -> Zones。我需要在我的c#类代码中做些什么来让它接受这些数据?
除非我读错了(我没有做太多WCF,但这实际上是一个XML问题),否则反序列化到Zone数组而不是List应该会有所帮助。
如果愿意,可以将数组转换为List。
[DataContract(Namespace = "")]
public class Plan
{
[DataMember]
public string Id { get; set; }
[DataMember]
public Zone[] Zones { get; set; }
[XmlIgnore]
//assumes .NET 3.5+ for LINQ method, otherwise return new List<Zone>(Zones);
public List<Zone> ZoneList { get { return Zones.ToList(); } }
}
[DataContract]
public class Zone
{
[DataMember]
public string Id { get; set; }
}
作为一个侧面的观点,你的问题标题指的是ArrayList
,而不是List<T>
,这是一个不同的,尽管相似的东西。
试了试,终于成功了:
[DataContract(Namespace = "")]
public class Plan
{
[DataMember(Order = 0)]
public string Id { get; set; }
[DataMember(Order = 1)]
public List<Zone> Zones { get; set; }
public Plan()
{
this.Id = string.Empty;
this.Zones = new List<Zone>();
}
}
[DataContract(Namespace = "")]
public class Zone
{
[DataMember(Order = 0)]
public string Id { get; set; }
public Zone()
{
this.Id = string.Empty;
}
}
最终使其工作的更改是添加(Namespace = ")到Zone DataContract