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

时间:2015-08-06 13:14:12

标签: c# json.net

我正在尝试获取Json的特定部分,但无法弄清楚如何。

我的json看起来像:

[
    {
        "ResourceId":"1",
        "ResourceText":"Hello",
        "LanguageId":"1"
    },
    {
        "ResourceId":"2",
        "ResourceText":"World",
        "LanguageId":"1"
    }
    .
    .
    .
]

所以例如我想要这个部分(根据pResourceId参数改变,所以我每次都想改变)

    {
        "ResourceId":"1",
        "ResourceText":"Hello",
        "LanguageId":"1"
    }

但我无法得到它。到目前为止我尝试了什么:

JObject data = JObject.Parse(jsonStringResources);
return data.Values().Where(x => x.Contains("ResourceId\" : \"" +pResourceId +"\"")  ) as clsResource;

2 个答案:

答案 0 :(得分:2)

我会为你的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反序列化为模型列表。然后,我们得到ResourceIdpResourceId匹配的模型。最后,我们再次序列化模型以获取JSON字符串。

pResourceId == 1时,结果为:

{
  "ResourceId": "1",
  "ResourceText": "Hello",
  "LanguageId": "1"
}

答案 1 :(得分:0)

如果您的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);