根据配置条目序列化所有空字段

我正在处理一个 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>
...

我在网站上找到了两种可能的结果:

  1. Add an isnullable entry in the XmlElement definition

     [XmlElement("Im_not",Isnullable = true)]
     public string Imnot { get; set; }
    

因为我需要对所有领域都这样做,这似乎不是一个好主意。最重要的是,我希望序列化是可配置的。

  1. 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);

这存在吗?

提前致谢

iso0921 回答:根据配置条目序列化所有空字段

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/15708.html

大家都在问