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

时间:2014-11-20 06:24:10

标签: c#

我有一个类需要在C#

中使用XMLserializer进行序列化
[DataContract]
Public class X
{
[Datamember]
Public List<string> CodeList {get;set;}
}

但是由于CodeList的数据类型是字符串,我得到的是xml

<CodeList>
<string>asd</string>
<string>cvb</string>
</CodeList>

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

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

1 个答案:

答案 0 :(得分:0)

您提到使用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>