在序列化期间为属性的数据类型提供别名
本文关键字:数据类型 别名 属性 序列化 | 更新日期: 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>