2012-02-09 77 views
0

我想序列化(以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. 

    } 
} 

如上评论,序列化工作正常,但反序列化不正确反序列化地址。我得到一个财产(如预期),但不是美孚(我知道它缺少一个setter,但如果由于某种原因,我不能把一个setter?)。

我在这里错过了什么?

回答

2

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

+0

你是对的,为Foo设置了一个工具。但我想知道是否有其他方法可以使它在缺少二传手的情况下工作。 – ashokgelal 2012-02-09 04:01:51