0

这是我的 DTO

[XmlTypeAttribute(TypeName="XAttributes")]
public class XAttributes
{
    [XmlArray(ElementName="Attributes")]
    [XmlArrayItem(ElementName="Attribute")]
    public List<Attribute> Attributes { get; set; }    
    public XAttributes()
    {
        Attributes = new List<Attribute>();
    }
}
public class Attribute
{      
    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }

    [XmlElement(ElementName = "Value")]
    public string Value { get; set; }      

    [XmlElement(ElementName = "ValueType")]
    public ValueType ValueType {get; set; }

    [XmlArray(ElementName="Children" )]
    public List<Attribute> Children { get; set; }
}

这是我的反序列化代码

  public static T ToObject<T>(this string XMLData)
    {
        var s = new XmlSerializer(typeof(T));
        object obj=null;
        using (var sr = new StringReader(XMLData))
        {
            obj = s.Deserialize(sr);
        }
        return (T)obj;
    }

这是我调用来反序列化它的代码

string attr = @"<XAttributes><Attributes>                          
                        <Attribute>
                        <Name>Test</Name>
                        <Value>TestVlau</Value>
                        <ValueType>STRING</ValueType>
                        <Children/>
                        </Attribute>
                        <Attribute>
                        <Name>Test1</Name>
                        <Value>TestVlau1</Value>
                        <ValueType>STRING</ValueType>
                        <Children/>
                        </Attribute>
                        </Attributes><XAttributes>";

        var attribute = attr.ToObject<XAttributes>();

我得到错误

There is an error in XML document (14, 55).

在线

 obj = s.Deserialize(sr);

任何帮助是极大的赞赏。

谢谢。

4

1 回答 1

0

很难说这是问题所在,但请尝试以下操作.... 替换

[XmlTypeAttribute(TypeName="XAttributes")]
public class XAttributes 
{
    ....
}

有了这个:

[XmlRoot("XAttributes")]
public class XAttributes 
{
    ....
}

另外,不要忘记在您的 XML 字符串中包含 XML 声明:

string attr = @"<?xml version="1.0" encoding="utf-8"?>
    <XAttributes><Attributes>                          
        <Attribute>
        <Name>Test</Name>
        <Value>TestVlau</Value>
        <ValueType>STRING</ValueType>
        <Children/>
        </Attribute>
        <Attribute>
        <Name>Test1</Name>
        <Value>TestVlau1</Value>
        <ValueType>STRING</ValueType>
        <Children/>
        </Attribute>
        </Attributes><XAttributes>";

PS:我创建了一个通用的 XmlSerializer 可能有用,请看我在 CodeProject 中的文章:

使用泛型的 XML 序列化

于 2013-02-20T23:38:54.543 回答