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;
}

Child 要素では機能せず、オブジェクトで 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 に答える