这是我的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);
非常感谢任何帮助。
感谢。
答案 0 :(得分: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中的文章: