2014-06-11 56 views
-1

如果我有JSON,看起来是这样的:(写这手,所以它可能有错误)JSON.net序列化名称空间

{ 
    "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获取数据并手动处理。

+0

我不认为这是有效的JSON格式...其中做这些HTTP“命名空间“来自? – icelava

+0

对不起,这甚至不是有效的JSON。 JSON不会将该名称空间识别为属性。在提出问题之前,请先参阅http://jsonlint.com/以验证JSON。 – Bil

回答

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 
    } 
} 

另一种选择,詹姆斯牛顿 - 国王只要你能做到这一点,这似乎干净了一点:

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