【问题标题】:Marking DataContract Correctly for Deserialization using WCF使用 WCF 正确标记 DataContract 以进行反序列化
【发布时间】:2012-09-10 09:35:26
【问题描述】:

我在下面有这个对象,我正在尝试正确标记它以便从 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 但对其他所有内容都有效。正确标记此内容的任何帮助都会有很大帮助。

【问题讨论】:

  • 还有一个序列化器可以完成这种工作。它也是 WCF 默认的序列化器。但是现在我找不到那个类名。
  • WCF默认对数据合约使用DataContract序列化器,不需要手动序列化和反序列化
  • 请发布ChildrenProps 类型定义。
  • 抱歉 Denis 只是命名不正确,它总是以错误的名称出现在上面,请查看上方。
  • @Vignesh Natraj 对不起,你是什么意思?如何将 XML 放入对象中?

标签: c# xml wcf xml-parsing


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多