C# 为什么DataContractSerializer生成名为“的节点”;z:任何类型的;?
在使用DataContractSerializer时,我得到了许多我并不真正想要使用的名称空间的额外属性。我在一个不同的项目中生成了一个类似的数据结构,没有任何额外的标记,因此我知道这是可能的C# 为什么DataContractSerializer生成名为“的节点”;z:任何类型的;?,c#,.net,wcf,datacontractserializer,C#,.net,Wcf,Datacontractserializer,在使用DataContractSerializer时,我得到了许多我并不真正想要使用的名称空间的额外属性。我在一个不同的项目中生成了一个类似的数据结构,没有任何额外的标记,因此我知道这是可能的 为什么DataContractSerializer会生成一个名为“z:anytype”的节点?如果您正在序列化对象的某个集合(数组、列表、字典等)-anytype实际上意味着任何类型都可以存在(尽管您有一个属性指定值的实际类型)。在下面的例子中,它表明 public class StackOverflow
为什么DataContractSerializer会生成一个名为“z:anytype”的节点?如果您正在序列化
对象的某个集合(数组、列表、字典等)
-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()));
}
}
公共类堆栈溢出\u 6780831
{
[数据合同(Name=“订单”)]
公共阶级秩序
{
[数据成员(顺序=1)]
公共int Id;
[数据成员(顺序=2)]
公开名单;
}
公共静态无效测试()
{
MemoryStream ms=新的MemoryStream();
订单=新订单
{
Id=1,
列表=新列表
{
1,“一些字符串”,日期时间。现在
},
};
DataContractSerializer dcs=新的DataContractSerializer(类型(订单));
XmlWriter w=XmlWriter.Create(ms,新的XmlWriter设置
{
缩进=真,
缩进字符=”,
OmitXmlDeclaration=true
});
dcs.WriteObject(w,订单);
w、 冲洗();
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray());
}
}
如果要序列化对象的某个集合(数组、列表、字典等)
,则会出现这种情况-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()));
}
}
公共类堆栈溢出\u 6780831
{
[数据合同(Name=“订单”)]
公共阶级秩序
{
[数据成员(顺序=1)]
公共int Id;
[数据成员(顺序=2)]
公开名单;
}
公共静态无效测试()
{
MemoryStream ms=新的MemoryStream();
订单=新订单
{
Id=1,
列表=新列表
{
1,“一些字符串”,日期时间。现在
},
};
DataContractSerializer dcs=新的DataContractSerializer(类型(订单));
XmlWriter w=XmlWriter.Create(ms,新的XmlWriter设置
{
缩进=真,
缩进字符=”,
OmitXmlDeclaration=true
});
dcs.WriteObject(w,订单);
w、 冲洗();
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray());
}
}
我的问题是我将接口作为类型传递给我的DataContractSerializer
很容易错过,因为我的界面名为IInvestment
如果出现此问题,请检查传递给DataContractSerializer构造函数的类型 我的问题是,我将接口作为类型传递给我的DataContractSerializer 很容易错过,因为我的界面名为IInvestment 如果出现此问题,请检查传递给DataContractSerializer构造函数的类型