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で実行するとクラッシュし、データが返されません。
私はここで何かが分かりませんか?
「それが出て墜落した」 - まさに**何がシリアライザを使用していますか?例えば、DataContractSerializerでは、あなたの 'ISerializable'コードを見ているのか疑問です。良いニュースには、 "親"キーがないので、通常の親/子サイクルであってはなりません。しかし、本物のループがあれば、すべての賭けはオフです。 –
.NETには複数の種類のシリアライザが存在し、WCFでは通常は「ISerializable」はまったく使用されません。 –