2012-02-09 13 views
0

各オブジェクトが別のタイプのオブジェクトのプロパティを持つオブジェクトのリストを(JSON形式で)シリアル化したいと思います。上記のコメントのようネストされたクラスのシリアル化

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. 

    } 
} 

、直列化が正常に動作しますが、直列化復元が正常にアドレスをデシリアライズしません:

[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 
    { 

    } 
} 

これは私がシリアライズとデシリアライズてる方法です:これは私がこれまで持っているものです。 値が(期待通りですが)Foo(私にはセッターがないことがわかりますが何らかの理由でセッターを置けない場合はどうしますか?

私はここで何が欠けていますか?

答えて

2

私はJSonを使用しませんが、XMLシリアル化のように機能する場合は、Fooにセッターがないということが関係しています。コンストラクタを使用してFooを設定するカスタムシリアル化クラスを作成する必要があります。他の人は、より詳細な情報を提供することができます。

+0

あなたは正しいですが、Fooのセッターが働いています。しかし、セッターの不在の場合にそれを動作させる他の方法があるかどうか疑問に思っています。 – ashokgelal

関連する問題