我正在嘗試使用 DataContractSerializer 反序列化以下 XML。<?xml version="1.0" encoding="utf-8"?><order> <header> <cust>1</cust> <bill>2</bill> <ship>3</ship> <nbr>123456</nbr> </header> <details> <detail> <nbr>123456</nbr> <part>1227</part> <qty>2</qty> </detail> </details></order>我在反序列化子<detail></detail>段時遇到了困難,這始終是null. 我的班級結(jié)構(gòu)如下:[DataContract(Name = "order", Namespace ="")]public class Order{ [DataMember(Name = "header", Order = 0)] public Head head { get; set; } [DataMember(Name = "details", Order = 1)] public Details details { get; set; } public Order() { }}[DataContract(Name = "header", Namespace ="")]public class Head{ [DataMember(Name = "cust", Order = 0)] public string customerNbr { get; set; } [DataMember(Name = "bill", Order = 1)] public string billNbr { get; set; } [DataMember(Name = "ship", Order = 2)] public string shipmentNbr { get; set; } [DataMember(Name = "nbr", Order = 3)] public string orderNbr { get; set; } public Head() { }}[DataContract(Name = "details")]public class Details{ [DataMember(Name = "detail", Order = 0)] public List<Detail> DetailList { get; set; } public Details() { this.DetailList = new List<Detail>(); }}[DataContract(Name = "detail")]public class Detail{ [DataMember(Name = "nbr", Order = 0)] public string orderNbr { get; set; } [DataMember(Name = "part", Order = 1)] public string partNbr { get; set; } [DataMember(Name = "qty", Order = 2)] public decimal orderQty { get; set; } public Detail() { }}在我的主程序中,我正在閱讀 XML 文檔并使用以下內(nèi)容對其進行反序列化:XDocument readDoc = XDocument.Load(fileName);Order createOrder = null;DataContractSerializer ser = new DataContractSerializer(typeof(Order));createOrder = (Order)ser.ReadObject(readDoc.CreateReader());我該怎么做才能使詳細信息段正確反序列化?
1 回答

慕哥9229398
TA貢獻1877條經(jīng)驗 獲得超6個贊
問題是您的數(shù)據(jù)協(xié)定類與實際 xml 結(jié)構(gòu)所需的不同。
您可以通過對模型進行小幅修改來解決此問題。
設(shè)置Detail類的命名空間以匹配其他類中的命名空間,即:空白值。
[DataContract(Name = "detail", Namespace = "")]
public class Detail
{
//same stuff here...
}
使您的 Details 類成為數(shù)據(jù)協(xié)定的集合。
[CollectionDataContract(Name = "details", Namespace = "")]
public class Details : Collection<Detail> { }
您可以查看此以獲取有關(guān)集合和數(shù)據(jù)協(xié)定序列化的更多詳細信息。
希望這可以幫助!
- 1 回答
- 0 關(guān)注
- 206 瀏覽
添加回答
舉報
0/150
提交
取消