繁体   English   中英

使用WCF正确标记DataContract以进行反序列化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM