JSON.net使用命名空间序列化

时间:2014-06-11 17:04:24

标签: c# json json.net

如果我的json看起来像这样:(手写,这可能有错误)

{
    "http://devserver.somesite.com/someendpoint/1/2/3$metadata#Something.Start": [
        {
            "Title": "start",
            "Endpoint": "https://devserver.somesite.com/someendpoint/1/2/3/start"
        }
    ],
    "http://devserver.somesite.com/someendpoint/1/2/3$metadata#Something.Stop": [
        {
            "Title": "stop",
            "Endpoint": "https:// devserver.somesite.com/someendpoint/1/2/3/stop"
        }
    ]
}

是否有任何简单的内置方式(JSON.net)让它了解这里有一个命名空间?或者有没有办法通过属性设置基于变量或模式的JsonProperty?

我无法将URL作为业务对象的一部分,因为这会从环境变为环境。

我知道我可以创建一个自定义的json转换器,但在走这条路线之前,我想看看是否有更多的开箱即用处理这个问题。另一个选择是通过xml获取数据并手动处理。

1 个答案:

答案 0 :(得分:0)

假设您将此作为从Web调用收到的字符串,您可以在JSON.NET中执行以下操作。

var json = "your string here";
var obj = JObject.Parse(json);

foreach(var ns in obj.Properties) {
    var arr = (JArray)ns.Value;

    foreach(var obj2 in arr) {
        // do you logic here to get the properties
    }
}

James Newton-King为您提供的另一个选择可以做到这一点,这似乎有点清洁:

var list = JsonConvert.DeserializeObject<Dictionary<string, List<MyClass>>>(json);