如何在以下JSON中获取"full_name_ac":-
{
"rows": 10,
"os": "0",
"page": "1",
"total": "1",
"peoples": {
**"123":** {
"url": "http://google.com",
**"id": "123",**
"fname": "Rob",
"lname": "Tom",
"full_name_ac": "Rob Tom"
}
}
}
我无法创建模型,因为模型总是会根据"id"进行更改。
我正在尝试类似的方法,但不确定如何获得full_name_ac 的值
JObject obj = JObject.Parse(data);
我建议您考虑使用JSONPath并使用SelectTokens
:
JObject obj = JObject.Parse(data);
var names = obj.SelectTokens("$.peoples.*.full_name_ac");
var allNamesAsCsv = String.Join(",", names.Values<string>());
当然,如果你总是知道总会有一个,你可以使用SelectToken
:
var onlyMatchObject = obj.SelectToken("$.peoples.*.full_name_ac");
var onlyMatch = first.Value<string>();
使用Json.Net。尝试使用dyanamic
dynamic stuff = JsonConvert.DeserializeObject(YOUR-JSON_STRING);
string name = stuff.peoples.123.full_name_ac;
请参阅此链接了解更多信息:将JSON反序列化为C#动态对象?
模型总是会根据"id"进行更改。
如果您的模型总是更改,那么您必须创建一个包含id和string的模型String对象是字段的json字符串。这样你就可以检查Id和它的模型字段。因此您可以将这些字段与json进行比较。
"field" :
{
"id" : 123
"fields" :
{
"fname":"string",
"full_name_ac":"string"
}
}
创建类似上面的json,并将这个json包含在json中。当您反序列化主json时,您可以比较字段。我想从上面你会得到一些基本的想法。
如果你的模型是动态的,那么只有一个选项,即你有创建一个类似上面的json,其中包含字段。这样你就可以将这些字段与实际的json值进行比较。
也许您可以使用Regex
和一些基本的文本解析来识别"full_name_ac"属性,并减去该值,类似于:
// just an example, untested
string jsonText = "{...}";
int startIndex = jsonText.indexOf(@"""full_name_ac"":");
int stopIndex = jsonText.indexOf(startIndex, "}");
string value = jsonText.substring(startIndex, stopIndex);
获取反序列化对象所需令牌的值(在您的例子中,obj.peoples的第一个令牌为"123",第一个令牌"123"是具有所需属性的对象),并从中获取所需属性,即full_name_ac。
dynamic obj = JObject.Parse(jsonText);
var value = obj.peoples;
var tokenPeople = ((Newtonsoft.Json.Linq.JContainer)obj.peoples).First.First;
string peopleJson =tokenPeople.ToString();
dynamic people = JObject.Parse(peopleJson);
string full_name_ac = people.full_name_ac;
下面一行将帮助您获得full_name_ac的值
var full_name_ac = obj.SelectToken("peoples.123.full_name_ac").ToString();
使用JObject.Parse(jsonString)AND获取First元素
// Id is dynamic , so parse and get first element
string dynamicName = (string)JObject.Parse(data)["peoples"].Children().First().Children().First()["full_name_ac"];