为什么DataContractSerializer生成一个名为“z:anytype”的节点?

时间:2011-07-21 18:26:48

标签: c# .net wcf datacontractserializer

使用DataContractSerializer时,我得到很多名称空间的额外属性,我真的不想使用它们。我在一个不同的项目中生成了一个类似的数据结构而没有所有额外的标记,所以我知道它可能。

为什么DataContractSerializer生成一个名为“z:anytype”的节点?

2 个答案:

答案 0 :(得分:2)

如果您正在序列化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()));
    }
}

答案 1 :(得分:2)

我的问题是我将一个接口作为类型传递给我的DataContractSerializer。

很容易错过,因为我的界面名为IInvestment。

如果遇到此问题,请检查要传递给DataContractSerializer构造函数的类型。