C# 获取json对象中具有特定值的特定部分

C# 获取json对象中具有特定值的特定部分,c#,json.net,C#,Json.net,我试图获取Json的一个特定部分,但不知道如何获取 我的json看起来像: [ { "ResourceId":"1", "ResourceText":"Hello", "LanguageId":"1" }, { "ResourceId":"2", "ResourceText":"World", "LanguageId":"1" } . . . ]

我试图获取Json的一个特定部分,但不知道如何获取

我的json看起来像:

[
    {
        "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"
}