繁体   English   中英

从 C# 中的 Json 字符串访问字典

[英]accessing dictionary from a Json string in c#

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

是这样的:-

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

string toBeAccessedValue = Field cannot be blank;

任何帮助,将不胜感激。

您可以使用[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();

编辑:

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

JavaScriptSerializer serializer = new JavaScriptSerializer();

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

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

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

Console.ReadLine();

输出:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM