【发布时间】:2011-07-27 21:03:54
【问题描述】:
我对在 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 似乎没有类似的功能。
感谢任何提示或想法!
【问题讨论】:
-
另一种选择可能是您创建一个名为“Value : String”的类,它继承自 System.String 并在 DataMember 中使用它...
-
@NabheetSandhu
System.String已密封。你不能继承它。
标签: c# wcf xml-serialization datacontractserializer datacontract