如何获取内部元素而不是根元素的属性?
[XmlRoot("Root")]
public class Test
{
string type=null;
int value=0;
public string Type
{
get { return type; }
set { type=value; }
}
[XmlAttribute]
public int Value
{
get { return type; }
set { type=value; }
}
}
将导致
<Root Value="">
<Type>
</Type>
</Root>
但我想要
<Root >
<Type Value="">
</Type>
</Root>
请帮帮我。提前谢谢。
答案 0 :(得分:2)
XmlSerializer
旨在成为对象模型和xml之间的自然映射;那么,答案是将您的DTO与您的xml结构相同。在这种情况下,通过将Test
包装在第二个对象中:
public class Root {
public Test Type {get;set;}
}
替代方案是实施IXmlSerializable
,但这是努力,容易出错。为序列化目的而要求单独的对象表示并不罕见 - 不应假设您的“常规”业务/数据对象必然直接适用于序列化。
答案 1 :(得分:1)
XmlSerializer不是超级可自定义的。最接近实现这一点(不依赖于自定义序列化)是一个包装类:
[XmlRoot("Root")]
public class Test
{
public TypeData Type { get; set; }
// ...
}
class TypeData
{
public string Data { get; set; }
[XmlAttribute]
public int Value { get; set; }
}
在这种情况下,你最终会得到:
<Root>
<Type Value="">
<Data>...</Data>
</Type>
</Root>
答案 2 :(得分:0)
[XmlRoot("Root")]
public class Test
{
TypeClass type=null;
[XmlElement("Type")]
public TypeClass Type
{
get{return type;}
set{type=value;}
}
}
[XmlRoot("Type")]
public class TypeClass
{
int _value=0;
[XMlAttribute]
public int Value
{
get{return _value;}
set{_value=value;}
}
}
试试这个