ISerializable - 序列化递归对象类型,例如Map

时间:2012-02-15 12:17:38

标签: c# wcf serialization recursion

我正在尝试使用WCF和C#创建一个Web服务,以向AJAX客户端提供一些数据。

我希望我的数据像这样返回(JSON):

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

我已经创建了一个简单的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]);
    }
}

理论上,当JsonMap类被序列化时,它应该检查孩子是否也是父母,如果是,则渲染它们 - 或者渲染孩子的价值。

然而 - 当通过WCF运行它时,它崩溃了,我没有返回数据。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

这是我如何序列化到Json,它没有回答你的问题,可能没用,但可能有帮助......所以以防万一:

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

string JsonString = o.Serialize(MyObject);