Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套类序列化_C#_.net_Json_Serialization_Deserialization - Fatal编程技术网

C# 嵌套类序列化

C# 嵌套类序列化,c#,.net,json,serialization,deserialization,C#,.net,Json,Serialization,Deserialization,我想序列化(JSON格式)一个对象列表,其中每个对象都有另一种类型对象的属性。到目前为止,我得到的是: [DataContract] public class Person{ [DataMember] public string Name { get; set; } [DataMember] public Address FullAddress { get; set; } } [DataContract] public class Address { priva

我想序列化(JSON格式)一个对象列表,其中每个对象都有另一种类型对象的属性。到目前为止,我得到的是:

[DataContract]
public class Person{

   [DataMember]
   public string Name { get; set; }
   [DataMember]
   public Address FullAddress { get; set; }
}

[DataContract]
public class Address {
   private readonly byte[] _foo;
   private ulong _value;

   public byte[] Foo { get { return (byte[]) _foo.Clone(); }}

   public ulong Value { get { return _value; } set { return _value; }}

   public Address(byte [] bytes){
      _foo = new byte[bytes.Length];
      Array.Copy(bytes, _foo, bytes.Length);

      foreach(byte b in _foo){
        _value |= b; // I do some bit manipulation here and modify the _value
      }

   }

   public MacAddress() // added this otherwise I get an exception
   {

   }
}
这就是我序列化和反序列化的方式:

public class MyJson{

    public MyJson(){
      var list = new List<Person>{ /* added a bunch of person here */ };
      var serializer = new JavaScriptSerializer();
      string json = serializer.Serialize(list);
      // serialization works fine


      var desList = serializer.Deserialize<IList<Person>>(json);

      // the deserialization doesn't properly deserialize Address property.

   }
}
公共类MyJson{
公共MyJson(){
var list=新列表{/*在这里添加了一堆人*/};
var serializer=新的JavaScriptSerializer();
string json=serializer.Serialize(列表);
//序列化效果很好
var desList=serializer.Deserialize(json);
//反序列化未正确反序列化Address属性。
}
}
如上所述,序列化工作正常,但反序列化不能正确地反序列化地址。我为Value属性(如预期)获取了一个数字,但没有为Foo获取数字(我知道它缺少一个setter,但如果由于某种原因,我无法放置setter怎么办?)


这里我遗漏了什么?

我不使用JSon,但如果它像XML序列化一样工作,我猜这与
Foo
没有setter这一事实有关。您可能需要创建一个自定义序列化类,该类使用构造函数设置
Foo
。其他人可能会提供更多的细节。

你说得对,为Foo设置一个setter是可行的。但我想知道,在没有二传手的情况下,是否还有其他方法可以让它发挥作用。