更改列表序列化为 XML 的方式
Change the way how list is serialized into XML
所以,我有一个 class 对象列表,如下所示:
public int SourceId { get; set; }
public int TargetId { get; set; }
public List<ExtraParameter> ExtraParameters { get; }
然后序列化成XML文件时,输出是这样的:
<Connection>
<SourceId>0</SourceId>
<TargetId>1</TargetId>
<ExtraParameters>
<ExtraParameter>
<Input>0</Input>
<Output>1</Output>
<Enabled>true</Enabled>
</ExtraParameter>
<ExtraParameter>
<Input>1</Input>
<Output>0</Output>
<Enabled>true</Enabled>
</ExtraParameter>
</ExtraParameters>
</Connection>
但我需要使用 C# 的 XmlSerializer 将此元素数组 (ExtraParameter) 序列化为以下形式:
<Connection>
<SourceId>0</SourceId>
<TargetId>1</TargetId>
<ExtraParameter>
<Input>0</Input>
<Output>1</Output>
<Enabled>true</Enabled>
</ExtraParameter>
<ExtraParameter>
<Input>1</Input>
<Output>0</Output>
<Enabled>true</Enabled>
</ExtraParameter>
</Connection>
换句话说,我能否以某种方式仅列出该 ExtraParameters 列表中的项目,而无需在此层次结构中包含该列表?所以看起来 ExtraParameters 中的对象确实只是列在 TargetID 节点的末尾。
编辑:是的,我知道,这有点破坏了结构,但是这个 xml 文件随后被下一个程序正确反序列化,我无法控制它。
您可以通过将 XmlElement
属性添加到相关的 属性 来实现。每 the docs:
If you apply the XmlElementAttribute
to a field or property that returns an array, the items in the array are encoded as a sequence of XML elements.
[XmlElement("ExtraParameter")]
public List<ExtraParameter> ExtraParameters { get; }
您还可以更改 属性 名称,而不是为属性添加 ElementName
的值。
有关工作演示,请参阅 this fiddle。
所以,我有一个 class 对象列表,如下所示:
public int SourceId { get; set; }
public int TargetId { get; set; }
public List<ExtraParameter> ExtraParameters { get; }
然后序列化成XML文件时,输出是这样的:
<Connection>
<SourceId>0</SourceId>
<TargetId>1</TargetId>
<ExtraParameters>
<ExtraParameter>
<Input>0</Input>
<Output>1</Output>
<Enabled>true</Enabled>
</ExtraParameter>
<ExtraParameter>
<Input>1</Input>
<Output>0</Output>
<Enabled>true</Enabled>
</ExtraParameter>
</ExtraParameters>
</Connection>
但我需要使用 C# 的 XmlSerializer 将此元素数组 (ExtraParameter) 序列化为以下形式:
<Connection>
<SourceId>0</SourceId>
<TargetId>1</TargetId>
<ExtraParameter>
<Input>0</Input>
<Output>1</Output>
<Enabled>true</Enabled>
</ExtraParameter>
<ExtraParameter>
<Input>1</Input>
<Output>0</Output>
<Enabled>true</Enabled>
</ExtraParameter>
</Connection>
换句话说,我能否以某种方式仅列出该 ExtraParameters 列表中的项目,而无需在此层次结构中包含该列表?所以看起来 ExtraParameters 中的对象确实只是列在 TargetID 节点的末尾。
编辑:是的,我知道,这有点破坏了结构,但是这个 xml 文件随后被下一个程序正确反序列化,我无法控制它。
您可以通过将 XmlElement
属性添加到相关的 属性 来实现。每 the docs:
If you apply the
XmlElementAttribute
to a field or property that returns an array, the items in the array are encoded as a sequence of XML elements.
[XmlElement("ExtraParameter")]
public List<ExtraParameter> ExtraParameters { get; }
您还可以更改 属性 名称,而不是为属性添加 ElementName
的值。
有关工作演示,请参阅 this fiddle。