DataContractSerializer反序列化列表不起作用

时间:2015-12-18 09:28:31

标签: c# xml deserialization

我必须反序列化从提供程序

收到的以下XML
createDirectoryAtURL: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中。我无法弄清楚我做错了什么。

感谢。

2 个答案:

答案 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; }