我必须反序列化从提供程序
收到的以下XMLcreateDirectoryAtURL:url withIntermediateDirectories:YES
要做我自己使用DataContractSerializer,我已经定义了以下类来反序列化它
<desc>
<l_error>
<error>Error 1</error>
<error>Error 2</error>
</l_error>
</desc>
并且通用方法会反序列化
[CollectionDataContract(Name = "desc", Namespace = "")]
public class DescriptionError : List<Error>
{
}
[DataContract(Name = "l_error", Namespace = "")]
public class Error
{
[DataMember(Name = "error")]
public string Description { get; set; }
}
问题是当我反序列化上面的XML时,返回的DescriptionError对象只包含一个元素,第一个&#34;错误1&#34; ,XML中的第二个错误项不在DescriptionError中。我无法弄清楚我做错了什么。
感谢。
答案 0 :(得分:1)
通常,解决此问题的最佳方法是以相反的方式工作 - 创建对象并对其进行序列化以查看您将获得的XML。
如果您查看自己拥有的内容,就会发现一些内容似乎意味着包含多个desc
子项的单个l_error
元素包含一个error
。显然这与你的XML不匹配。
这是您想要的更多内容 - 包含desc
元素的单个l_error
元素,其中包含多个error
字符串元素。
[DataContract(Name = "desc", Namespace = "")]
public class Desc
{
[DataMember(Name = "l_error")]
public LError LError { get; set; }
}
[CollectionDataContract(ItemName = "error", Namespace = "")]
public class LError : List<string>
{
}
答案 1 :(得分:-1)
您的对象类应该看起来像您可以使用http://xmltocsharp.azurewebsites.net/从XML获取c#类
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace MyNamespace
{
[XmlRoot(ElementName="l_error")]
public class L_error {
[XmlElement(ElementName="error")]
public List<string> Error { get; set; }
}
[XmlRoot(ElementName="desc")]
public class Desc {
[XmlElement(ElementName="l_error")]
public L_error L_error { get; set; }
}
}
您的错误public string Description { get; set; }
应该看起来像public List<string> Description { get; set; }