如何在以下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);
答案 0 :(得分:1)
使用Json.Net。尝试使用dyanamic
dynamic stuff = JsonConvert.DeserializeObject(YOUR-JSON_STRING);
string name = stuff.peoples.123.full_name_ac;
有关详细信息,请参阅此链接:Deserialize JSON into C# dynamic object?
模型总是会根据“id”进行更改。
如果您的模型始终更改,那么您创建了一个包含 id 和字符串的模型。 String 对象是json字段字符串。这样您就可以检查Id和它的模型字段。所以你可以用json比较那些字段。
"field" :
{
"id" : 123
"fields" :
{
"fname":"string",
"full_name_ac":"string"
}
}
创建类似于上面的json并在json中包含此json。反序列化主json时,可以比较字段。我从上面的事情你会得到一些基本的想法。
如果您的模型是动态的,那么只有一个选项,即您拥有 创建一个类似上面的json,其中包含字段。这样你就可以 将这些字段与您的实际json值进行比较。
答案 1 :(得分:1)
也许您可以使用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);
答案 2 :(得分:1)
我建议你看看使用JSONPath(s) and use 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>();
答案 3 :(得分:0)
获取反序列化对象所需标记的值(在您的情况下,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;
答案 4 :(得分:0)
// Id is dynamic , so parse and get first element
string dynamicName = (string)JObject.Parse(data)["peoples"].Children().First().Children().First()["full_name_ac"];
答案 5 :(得分:0)
以下行可帮助您获取 full_name_ac
的值var full_name_ac = obj.SelectToken("peoples.123.full_name_ac").ToString();