使用命名空间序列化

本文关键字:序列化 命名空间 | 更新日期: 2023-09-27 18:08:06

如果我的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获取数据并手动处理。

使用命名空间序列化

假设您将此作为您从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);