在序列化期间为属性的数据类型提供别名

本文关键字:数据类型 别名 属性 序列化 | 更新日期: 2023-09-27 18:31:20

我有一个类,我需要在 C# 中使用 XMLserializer 进行序列化

[DataContract]
Public class X
{
[Datamember]
Public List<string> CodeList {get;set;}
}

但是由于代码列表的数据类型是字符串,我得到的低于 xml

<CodeList>
<string>asd</string>
<string>cvb</string>
</CodeList>
但是我想以字符串显示为代码的

格式显示 xml,即我想给字符串一个代码的别名。

<CodeList>
<Code>asd</Code>
<Code>cvb</Code>
</CodeList>

在序列化期间为属性的数据类型提供别名

您提到使用XMLSerializer但您使用的是DataContractSerializer的属性。如果您坚持使用XMLSerializer它非常简单。

class Program
{
    static void Main(string[] args)
    {
        X x = new X();
        x.CodeList = new List<string>() {"test", "test1"};
        var xml = new XmlSerializer(typeof (X));
        TextWriter writer = new StreamWriter("test.xml");
        xml.Serialize(writer,x);
        writer.Close();
    }
}
public class X
{
    [XmlArrayItem("Code")]
    public List<string> CodeList { get; set; } 
}

您注意到我不需要除[XmlArrayItem]以外的任何属性。这是因为XmlSerializer将继续序列化所有公共属性。如果这是一个问题,您可以使用 [System.Xml.Serialization.XmlIgnoreAttribute] ,它将在序列化时忽略属性。

这是我从上面的代码中获得的输出:

<?xml version="1.0" encoding="utf-8"?>
<X xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CodeList>
    <Code>test</Code>
    <Code>test1</Code>
  </CodeList>
</X>