我有一个类似于以下结构的类:
[XmlRoot("myclass")]
public class MyClass
{
[XmlElement("subject")]
public string Subject { get; set; }
[XmlElement("object")]
public string Object { get; set; }
}
假设Subject = "Me"
和Object = "You"
,这将序列化为:
<myclass>
<subject>Me</subject>
<object>You</object>
</myclass>
有没有办法序列化到以下XML,最好使用XML序列化属性并避免使用新的自定义类型:
<myclass>
<subject value="Me" />
<object value="You" />
</myclass>
答案 0 :(得分:2)
您可以通过创建使用XmlAttributeAttribute
的类来完成此操作。我添加了T
的隐式转换,以便您可以继续使用简洁的语法,例如new MyClass { Subject = "Me", Object = "You" }
[XmlRoot("myclass")]
public class MyClass
{
[XmlElement("subject")]
public ValueAttribute<string> Subject { get; set; }
[XmlElement("object")]
public ValueAttribute<string> Object { get; set; }
}
public class ValueAttribute<T>
{
[XmlAttribute("value")]
public T Value { get; set; }
public static implicit operator ValueAttribute<T>(T value)
{
return new ValueAttribute<T> { Value = value };
}
}
这会产生类似:
<?xml version="1.0" encoding="utf-16"?>
<myclass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<subject value="Me" />
<object value="You" />
</myclass>