C# 获取json对象中具有特定值的特定部分
我试图获取Json的一个特定部分,但不知道如何获取 我的json看起来像:C# 获取json对象中具有特定值的特定部分,c#,json.net,C#,Json.net,我试图获取Json的一个特定部分,但不知道如何获取 我的json看起来像: [ { "ResourceId":"1", "ResourceText":"Hello", "LanguageId":"1" }, { "ResourceId":"2", "ResourceText":"World", "LanguageId":"1" } . . . ]
[
{
"ResourceId":"1",
"ResourceText":"Hello",
"LanguageId":"1"
},
{
"ResourceId":"2",
"ResourceText":"World",
"LanguageId":"1"
}
.
.
.
]
例如,我想要这个部件(根据pResourceId参数进行更改,所以每次我都试图得到更改)
但我没能得到它。到目前为止,我尝试的是:
JObject data = JObject.Parse(jsonStringResources);
return data.Values().Where(x => x.Contains("ResourceId\" : \"" +pResourceId +"\"") ) as clsResource;
如果您的json看起来像这样,您可以将其反序列化为以下对象:
public class JsonTestModel
{
public JsonTestModel()
{
}
public int ResourceId { get; set; }
public string ResourceText { get; set; }
public int LanguageId { get; set; }
}
然后你可以像这样搜索它:
List<JsonTestModel> theListWithModels = JsonConvert.DeserializeObject<List<JsonTestModel>>(theJsonString);
var extractedModels = theListWithModels.Where(m => m.ResourceId == pResourceId);
列出ListWithModels=JsonConvert.DeserializeObject(JSonString);
var extractedModels=listwithmodels.Where(m=>m.ResourceId==pResourceId);
我会为您的JSON格式制作一个模型:
class Model
{
public string ResourceId { get; set; }
public string ResourceText { get; set; }
public string LanguageId { get; set; }
}
然后你可以做:
var models = JsonConvert.DeserializeObject<List<Model>>(jsonStringResources);
var matchingModel = models.Where(model => model.ResourceId == pResourceId).ToList().FirstOrDefault();
return JsonConvert.SerializeObject(matchingModel);
如果您的JSON真的是这样结构良好的,那么您有什么理由不想为某个具有
ResourceId
、ResourceText
和LanguageId
属性的类转换为列表
?如果您能提供一个简短但完整的示例来说明问题,这也会有所帮助-您提供的JSON是针对数组的,而不是对象,这使得在测试时很难不弄乱任何东西。@JonSkeet,假设我有大约10万个类似于上面的资源,如果我每次都反序列化它并使用linq获得我想要的,内存消耗会很大吗?如果是这样,我想用这个问题可能得到的答案。如果没有,我可以用你的建议。但是,在这方面我真的找不到任何东西。我怀疑这可能比将其反序列化为一个JArray
/JObject
.hmm要小,谢谢
var models = JsonConvert.DeserializeObject<List<Model>>(jsonStringResources);
var matchingModel = models.Where(model => model.ResourceId == pResourceId).ToList().FirstOrDefault();
return JsonConvert.SerializeObject(matchingModel);
{
"ResourceId": "1",
"ResourceText": "Hello",
"LanguageId": "1"
}