这是我的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; }
}
现在,当我反序列化时,它将反序列化计划 - &gt; Id但不是Plan - &gt;区域。我需要在C#类代码中更改哪些内容才能接受此数据?
答案 0 :(得分:0)
除非我读错了(我没有做太多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>
,这是一个不同的,虽然相似的东西。
答案 1 :(得分:0)
玩了它,终于让它起作用了:
[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 =&#34;&#34;)添加到Zone DataContract