我必须使用.net或newtonsoft json提取json-string的一部分。
JSON:
var json = "{\"method\":\"subtract\",\"parameters\":{\"minuend\":\"SOME_CUSTOM_JSON_OBJECT_DIFFERENT_FOR_EACH_METHOD\",\"subtrahend\":23}}";
C#Class:
class MyJson{
public string method { get; set; }
//public string parameters {get; set;}
public object parameters {get; set;}
}
问题1:如果我定义类型"对象"的属性,newtonsoft将如何处理这个? (文档比msdn更糟糕,所以我正在寻找你已经尝试过的人的输入。)
static void Main(string[] args)
{
var json = "{\"method\":\"subtract\",\"parameters\":{\"minuend\":42,\"subtrahend\":23}}";
var data = JsonConvert.DeserializeObject<MyJson>(j);
// what internal representaion of data.parameters?
// How is it actually converted from json-string to an C# object (JObject/JsonObject).
}
完美的情况: &#34;参数&#34;是一个字符串并调用
ExtractMyJson(jsonString)
给了我json参数字符串。
基本上我需要newtonsoft版本的
string ExtractMyJson(jsonString){
var p1 = jsonString.Split(",");
// .. varios string transformations
return pParams;
}
注意:请不要参考&#34;动态&#34;关键字或问为什么没有字符串转换,这是非常具体的问题。
答案 0 :(得分:0)
如果您知道您的参数是唯一的,您可以执行以下操作:
class MyJson
{
public string method { get; set; }
public Dictionary<string,object> parameters { get; set; }
}
................
string json = "{\"method\":\"subtract\",\"parameters\":{\"minuend\":{\"img\": 3, \"real\": 4},\"subtrahend\":23}}";
var data = JsonConvert.DeserializeObject<MyJson>(json);
如果你让它作为对象将接收类型Newtonsoft.Json.Linq.JObject。
答案 1 :(得分:0)
井对象的处理方式与处理父对象的方式相同。它将从图的基础开始。所以如果你有类似的东西:
Person
{
Address Address {get;set;}
}
Json将开始反序列化地址,然后添加Person对象。 如果要限制图形深度的大小,可以使用如下设置:
JsonConvert.DeserializeObject<List<IList<IList<string>>>>(json, new JsonSerializerSettings
{
MaxDepth = 2
});
有关JsonSerializer的更多配置,请选中JsonSerializerSettings
如果你的字段是一个对象,那么该对象将具有它所拥有的每个属性的KeyValuePair,基于当你转换该字段时你可以访问该类型。(行为与为对象分配类型相同)在C#)。
更新:所以如果你使用JsonObject或类型提问,那么JObject就是以通用格式构造json格式的中间方式。但是使用Type deserializatin意味着你可以忽略你不感兴趣的属性。映射到带有类型的json更有意义,因为它创建了一个新对象并且解散了旧的JObject。
答案 2 :(得分:0)
您尝试过JTOKEN
吗?
这是一种相当简单的解决方案,可以部分读取post中所述的基本或嵌套JSON。
对于嵌套的JSON
{
"key1": {
"key11": "value11",
"key12": "value12"
}
"key2": "value2"
}
它看起来像这样
JToken token = JToken.Parse(json);
var value12 = token.SelectToken("key1.key12");
获取键"key12
的元素。
我认为这可以很好地解决您的问题。