C#xml序列化
我在c#中将对象序列化为xml,我想序列化
public String Marker { get; set; }
成
当字符串标记没有值时。
现在我明白了
for Marker == string.Empty
,没有标记节点为null
。 我怎么能得到这个?
如果Marker
属性为null,则可以轻松地禁止
元素。 只需添加一个ShouldSerializeMarker()
方法:
public bool ShouldSerializeMarker() { return Marker != null; }
它将由XmlSerializer
自动调用,以决定是否在输出中包含该元素。
至于在字符串为空时使用
元素的扩展forms,没有简单的方法(你可以编写自己的XmlWriter
,但这会很痛苦)。 但无论如何它没有意义,因为
和
具有完全相同的含义。
如果要使用结束标记,则必须更改xml结构的实现; 据我所知,这个序列化主题只有在序列化一个“复杂”对象(例如:一个类)而不是一个“简单”对象(例如:一个字符串)时才会生成单独的结束标记。
一个例子是:
[XmlRoot] public class ClassToSerialize { private StringWithOpenAndClosingNodeClass mStringWithOpenAndClosingNode; [XmlElement] public StringWithOpenAndClosingNodeClass Marker { get { return mStringWithOpenAndClosingNode ?? new StringWithOpenAndClosingNodeClass(); } set { mStringWithOpenAndClosingNode = value; } } } [XmlRoot] public class StringWithOpenAndClosingNodeClass { private string mValue; [XmlText] public string Value { get { return mValue ?? string.Empty; } set { mValue = value; } } }
如果将此对象序列化为XML,您将获得:
我希望这有帮助!
您可以使用XMLElementAttribute
的IsNullable
属性来配置XmlSerializer
以为您的null
值生成XML。
但是,没有想出如何为没有价值的元素生成一个开始和结束元素。 你已经拥有完全合法的XML。 那是,
是相同的
你真的需要开关标签吗?