首页 > 解决方案 > 从 C# 中的 Json 字符串访问字典

问题描述

我有一个 JSON 字符串作为来自服务器的响应,其中包含像字典这样的键值对。一些键也可以有字典作为它们的值。我必须根据内部字典中的某些键访问值。我如何访问它们并存储在字符串中?

像这样的东西: -

string JsonData = "{\"status\":\"BAD_REQUEST\",\"code\":400,\"errorsCount\":1,\"errors\":[{\"desciption\":\"Field cannot be blank\"}]}";

string toBeAccessedValue = Field cannot be blank;

任何帮助,将不胜感激。

标签: c#.net

解决方案


您可以使用[JsonExtensionData]将 json 反序列化为类对象。

public class RootObject
{
    [JsonExtensionData]
    public Dictionary<string, JToken> data { get; set; }
}

你可以使用上面的类

RootObject ro = JsonConvert.DeserializeObject<RootObject>(JsonData);

var errors = ro.data["errors"].ToObject<JObject[]>();

string description = errors.FirstOrDefault().Property("desciption").Value?.ToString();

Console.WriteLine("description: " + description);

Console.ReadLine();

选择:

您可以使用下面的类结构来帮助您反序列化您的 json 并检索您想要的任何值。

public class Error
{
    public string desciption { get; set; }
}

public class RootObject
{
    public string status { get; set; }
    public int code { get; set; }
    public int errorsCount { get; set; }
    public List<Error> errors { get; set; }
}

你可以使用上面的类结构来取消你的json,比如

RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(JsonData);

string description = rootObject.errors.FirstOrDefault()?.desciption;

Console.WriteLine("description: " + description);

Console.ReadLine();

编辑:

如果你想用JavaScriptSerializerthen 反序列化你的 json。

JavaScriptSerializer serializer = new JavaScriptSerializer();

RootObject rootObject = serializer.Deserialize<RootObject>(JsonData);

string description = rootObject.errors.FirstOrDefault()?.desciption;

Console.WriteLine("description: " + description);

Console.ReadLine();

输出:

在此处输入图像描述


推荐阅读