我正在处理一个 XML 序列化项目。我目前有以下几行代码用于序列化对象 (this
):
XmlSerializer xs = new XmlSerializer(this.GetType());
MemoryStream ms = new MemoryStream();
xs.Serialize(ms,this);
我想在我的配置文件中创建一个条目,以便:
- 在
false
的情况下,只有具有实际值的 XML 标记会被序列化。 - 在
true
的情况下,所有 XML 标签都会被序列化。
所以在 false
的情况下,我得到:
...
<a>I'm filled</a>
<c>me too</c>
...
如果 true
我得到:
...
<a>I'm filled</a>
<Im_not/>
<c>me too</c>
...
或者:
...
<a>I'm filled</a>
<Im_not></Im_not>
<c>me too</c>
...
我在网站上找到了两种可能的结果:
-
Add an
isnullable
entry in theXmlElement
definition:[XmlElement("Im_not",Isnullable = true)] public string Imnot { get; set; }
因为我需要对所有领域都这样做,这似乎不是一个好主意。最重要的是,我希望序列化是可配置的。
-
Use an
ShouldSerialize<field_name>()
method:public bool ShouldSerializeChild2() { return <configuration_value>; }
这已经好多了,但这意味着我需要为每个字段编写这样的方法。
在另一个项目中(关于 JSON 序列化,基于 NewtonSoft 的 JSON.Net 解决方案),有以下内容:
JsonSerializerSettings js = new JsonSerializerSettings();
js.DefaultvalueHandling = DefaultvalueHandling.Populate;
// ^
// |
// +-------------------------------------------+
// |
// +-> this forces empty fields to be populated
tmp = JsonConvert.SerializeObject(root,Formatting.Indented,js);
XML 序列化有类似的东西吗?如果是,我可能会这样做:
XmlSerializer xs = new XmlSerializer(this.GetType());
MemoryStream ms = new MemoryStream();
XMLSerializerSettings XMLs = new XMLSerializerSettings(); // ?
XMLs.DefaultvalueHandling = DefaultvalueHandling.Populate; // ?
xs.Serialize(ms,this);
这存在吗?
提前致谢