利用C#怎么获取动态key的json对象值-创新互联

利用C#怎么获取动态key的json对象值?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

10年积累的成都做网站、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有东港免费网站建设让你可以放心的选择与我们合作。

问题描述

如果直接获取某个json数组中的元素将得到如下的json

{
 "44": {
  "height": 25,
  "appeared": -70000000,
  "length": 44,
  "order": "saurischia",
  "vanished": -70000000,
  "weight": 135000
 }
}

这个json对象如果使用C#类来反序列化,那么实体类的结构如下,实体类的类名需要与json对象key相同的才可以使用json反序列化,这样对程序造成了极大的不便。

public class 44
{
 public int height { get; set; }
 public int appeared { get; set; }
 public int length { get; set; }
 public string order { get; set; }
 public int vanished { get; set; }
 public int weight { get; set; }
}
public class Root
{
 public 44 44 { get; set; }
}

解决方案

以上json对象由于key是动态的无法使用C#反序列化,但是直接取到value就能序列化了,如下。

{
 "height":25,
 "appeared":-70000000,
 "length":44,
 "order":"saurischia",
 "vanished":-70000000,
 "weight":135000
}

以上json对象就可以使用我们常用的格式转换了。

public class Root
{
 public int height { get; set; }
 public int appeared { get; set; }
 public int length { get; set; }
 public string order { get; set; }
 public int vanished { get; set; }
 public int weight { get; set; }
}

实现代码

从动态key的json对象里面拿到value那部分,可以反序列化的字符串,请使用如下的函数,注意引入类库。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Linq;
/// 
/// 本类用于处理动态Key的json对象
/// 
/// 需要处理的json对象
/// json对象的第一个元素的values
public static string GetJsonValue(string strJson)
{
 string strResult;
 JObject jo = JObject.Parse(strJson);
 string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();
 if (values == null)
 {
  strResult = "";
 }
 else
 {
  strResult = values[0];
 }
 return strResult;
}

补充:C# 获取JSON字符串中指定KEY的值

背景

从Markdown系统API接口获取到JSON格式数据,JSON字符串是不规范的或者说是很难以获取doc_id字段(位于树的叶子节点,但是却不知道有多少个枝干节点),这时想到了采用正则表达式获取指定KEY的值,于是产生了这篇文章。

适用场景

不想要解析整个JSON字符串,只想获取其中某个KEY的值

JSON字符串对应的对象比较难以构造,只需要获取其中某几个KEY的值

JSON字符串不规范,只需要获取指定KEY的值(特别是有一些是数组对象,有一些是非数据对象)

代码

/// 
/// 获取JSON字符串中指定KEY的值
/// 
/// 
/// 
/// 
public List GetJsonValue(String jsonString, String key)
{
 String pattern = $"\"{key}\":\"(.*?)\\\"";
 MatchCollection matches = Regex.Matches(jsonString, pattern, RegexOptions.IgnoreCase);
 List lst = new List();
 foreach (Match m in matches)
 {
  lst.Add(m.Groups[1].Value);
 }
 return lst;
}

看完上述内容,你们掌握利用C#怎么获取动态key的json对象值的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


网页名称:利用C#怎么获取动态key的json对象值-创新互联
网站路径:http://azwzsj.com/article/dgciip.html