我对在使用DataContractSerializer的基元列表时设置自定义元素名称的最佳方法感兴趣。假设我有以下类,其中包含一个字符串列表作为DataMember。
[DataContract]
public class ClassName
{
[DataMember]
public List<String> FieldName { get; set; }
}
默认情况下,此序列化为以下内容:
<ClassName xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<FieldName xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<a:string>Value 1</a:string>
<a:string>Value 2</a:string>
<a:string>Value 3</a:string>
</FieldName>
</ClassName>
我想让XML尽可能简单地通过XSLT进行转换,所以理想情况下我会将标签重命名为更有用的东西,比如Value。
一种可能的解决方案是创建一个扩展Collection的类,并为CollectionDataMember参数设置ItemName,我发现here。我想知道是否有办法实现相同的目标,而不需要这个额外的类或其他形式的包装类。 XML序列化程序使用XMLArray和XMLArrayItem参数来完成此操作,但DataContractSerializer似乎没有类似的功能。
感谢您的任何提示或想法!
答案 0 :(得分:7)
定义数据协定以表示字符串列表,并将其用作FieldName属性的类型。然后,您可以使用CollectionDataContract属性来自定义XML。
[CollectionDataContract(ItemName="Value")]
public class MyList : List<string> {}
[DataMember]
public MyList FieldName { get; set; }
答案 1 :(得分:0)
您的选择有限。 DataContractSerializer并非旨在生成漂亮的XML。 WCF使用它本质上不是人眼友好的。因此,您可以做的最多是通过使用字符串属性定义自定义类型来最小化命名空间使用和命名元素。