[英]Marking DataContract Correctly for Deserialization using WCF
我在下面有这个对象,我试图将其正确标记为从xml反序列化。 它正在使用WCF。
[DataContract(Name="Task")]
public partial class Task
{
[DataMember]
public string prop1
{ get; set; }
[DataMember]
public ChildrenProps ChildProp1{ get; set; }
}
[DataContract]
public partial class ChildrenProps
{
[DataMember]
public ConfigurationSettings Prop1
{ get; set; }
[DataMember]
public ConfigurationSettings Prop2
{ get; set; }
}
[DataContract]
public partial class ConfigurationSettings
{
[DataMember]
public string Value
{ get; set; }
}
这是XML。
<Task>
<prop1>aaaaa</prop1>
<ChildProp1>
<Prop1>bbbbbb</Prop1>
<Prop2>cccccc</Prop2>
</ChildProp1>
</Task>
我正在使用这种方法进行反序列化
public T Deserialization<T>()
{
var reader = new StringReader(configuration);
var serializer = new XmlSerializer(typeof(T));
var instance = (T)serializer.Deserialize(reader);
return instance;
}
它不适用于Child元素,并在对象中返回null,但对其他所有元素都起作用。 正确标记此标记的任何帮助将是很大的帮助。
根据您提供的类信息,您的序列化XML不正确,这是序列化XML
<?xml version="1.0" encoding="utf-8"?>
<Task xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<prop1>HelloWorld</prop1>
<ChildProp1>
<Prop1>
<Value>propr1</Value>
</Prop1>
<Prop2>
<Value>propr2</Value>
</Prop2>
</ChildProp1>
</Task>
这就是序列化对象的方式
Task taskObj = new Task();
taskObj.prop1 = "HelloWorld";
taskObj.ChildProp1 = new ChildrenProps();
taskObj.ChildProp1.Prop1 = new ConfigurationSettings(){ Value = "propr1"};
taskObj.ChildProp1.Prop2 = new ConfigurationSettings() { Value = "propr2" };
XmlSerializer.Serialize(textWriter, taskObj);
您可以使用此XML反序列化和测试您的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.