2012-02-15 4 views
0

WCFとC#を使用してWebサービスを作成してAJAXクライアントにデータを表示しようとしています。ISerializable - マップなどの再帰オブジェクト型をシリアル化します

私は私のデータがそう(JSON)のように返したいと思います:

{"Settings":{"LAN":{"IPAddress":"10.0.0.1", "SubnetMask":"255.255.255.0"},"WAN":{"Status":"Up"}}} 

私はそのような単純なJsonMapクラス作成しました:JsonMapクラスがシリアライズされると、理論的には

[Serializable] 
public class JsonMap :ISerializable 
{ 
    Dictionary<string, JsonMap> children { get; set; } 
    public string Value { get; set; } 

    public JsonMap() 
    { 
     this.children = new Dictionary<string, JsonMap>(); 
     this.Value = string.Empty; 
    } 

    public JsonMap this[string key] 
    { 
     get 
     { 
      if (!this.children.ContainsKey(key)) 
       this.children[key] = new JsonMap(); 
      return this.children[key]; 
     } 
     set 
     { 
      this.children[key] = value; 
     } 
    } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     foreach (string key in this.children.Keys) 
      if (this[key].children.Keys.Count == 0) 
       info.AddValue(key, this[key].Value); 
      else 
       info.AddValue(key, this[key]); 
    } 
} 

を子が親であるかどうかをチェックし、そうであればレンダリングするか、子の値をレンダリングする必要があります。

しかし、これをWCFで実行するとクラッシュし、データが返されません。

私はここで何かが分かりませんか?

+2

「それが出て墜落した」 - まさに**何がシリアライザを使用していますか?例えば、DataContractSerializerでは、あなたの 'ISerializable'コードを見ているのか疑問です。良いニュースには、 "親"キーがないので、通常の親/子サイクルであってはなりません。しかし、本物のループがあれば、すべての賭けはオフです。 –

+0

.NETには複数の種類のシリアライザが存在し、WCFでは通常は「ISerializable」はまったく使用されません。 –

答えて

0

これは私がJSONにシリアライズする方法、それはあなたの質問に答えるのdoesntと役に立たないかもしれませんが、念のために..だから助けるかもしれないです:

System.Web.Script.Serialization.JavaScriptSerializer o = new System.Web.Script.Serialization.JavaScriptSerializer(); 

string JsonString = o.Serialize(MyObject); 
関連する問題