为什么DataContractSerializer生成一个名称为:"z:anytype"的节点?
本文关键字:quot anytype 节点 DataContractSerializer 一个 为什么 | 更新日期: 2023-09-27 18:02:57
在使用DataContractSerializer时,我得到了许多我不想使用的名称空间的额外属性。我在一个不同的项目中生成了一个类似的数据结构,没有额外的标记,所以我知道这是可能的。
为什么DataContractSerializer生成一个名为:"z:anytype"的节点?
我的问题是我将一个接口作为类型传递给我的DataContractSerializer。
很容易被忽略,因为我的接口被命名为IInvestment。
如果遇到这个问题,请检查传递给DataContractSerializer构造函数的类型。
如果您正在序列化object
的某些集合(数组、列表、字典等),那么您就需要这样做- anyType实际上意味着任何类型都可以在那里(尽管您有一个属性指定值的实际类型)。在下面的例子中,它显示了。
public class StackOverflow_6780831
{
[DataContract(Name = "Order")]
public class Order
{
[DataMember(Order = 1)]
public int Id;
[DataMember(Order = 2)]
public List<object> List;
}
public static void Test()
{
MemoryStream ms = new MemoryStream();
Order order = new Order
{
Id = 1,
List = new List<object>
{
1, "some string", DateTime.Now
},
};
DataContractSerializer dcs = new DataContractSerializer(typeof(Order));
XmlWriter w = XmlWriter.Create(ms, new XmlWriterSettings
{
Indent = true,
IndentChars = " ",
OmitXmlDeclaration = true
});
dcs.WriteObject(w, order);
w.Flush();
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
}
}