c# - 从 C# 中的 Json 字符串访问字典
问题描述
我有一个 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
then 反序列化你的 json。
JavaScriptSerializer serializer = new JavaScriptSerializer();
RootObject rootObject = serializer.Deserialize<RootObject>(JsonData);
string description = rootObject.errors.FirstOrDefault()?.desciption;
Console.WriteLine("description: " + description);
Console.ReadLine();
输出:
推荐阅读
- f# - 将嵌套匹配表达式转换为函数
- python - 如何在 Python 2.7 中阻止键盘输入?
- c++ - 用不同的列读取每一行的全部内容
- mysql - 如何修复错误代码 1241:操作数应在 mysql 查询中包含 1 列?
- typescript - 如何使用 typescript 从 azure 函数中的 cosmosdb 进行查询
- javascript - 从 MDX 访问 React 组件状态
- verilog - 始终阻塞的 Verilog 和条件
- java - 在spring boot starter security中使用自定义登录页面成功登录没有进入下一页
- javascript - Javascript:按下时“单击”按钮不起作用?
- transformation - 如何使用单个连接器连接三个异构源