2

我在下面有这个对象,我正在尝试正确标记它以从 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;
}

它不适用于子元素并在对象中返回 null,但适用于其他所有元素。正确标记此内容的任何帮助将是一个很大的帮助。

4

1 回答 1

0

您的序列化 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 反序列化和测试您的代码。

于 2012-09-10T16:11:03.593 回答