将 JSON 单个字符串反序列化为数组

2023-12-22

我正在尝试反序列化我的 json 数据,但是我的类未正确设置,我无权更改 json 响应,因此我需要编写一个函数来正确处理 json。

这是数据

{
  "blabla": {
    "-Score": "1",
    "-Ref": "50",
    "foo": {
      "-colour": "Yellow",
      "-ref": "y50"
    }
  }
}

然而有时数据会

    {
  "blabla": {
    "-Score": "1",
    "-Ref": "50",
    "foo": [
      {
        "-colour": "Yellow",
        "-ref": "y50"
      },
      {
        "-colour": "Green",
        "-ref": "g50"
      },
      {
        "-colour": "Red",
        "-ref": "r50"
      }
    ]
  }
}

该类适用于第一个数据

public class blabla
{
    public Foo Foo {get; set;}
}

这个类适用于第二个数据

public class blabla
{
    public Foo[] Foo {get; set;}
}

但我怎样才能让班级为两者工作呢?


以下是基本类:

public class Test
{
    public Blabla blabla { get; set; }
}

public class Blabla
{
    public string _score { get; set; }
    public string _ref { get; set; }

    [JsonConverter(typeof(FooConverter))]
    public Foo[] foo { get; set; }
}

public class Foo
{
    public string _colour { get; set; }
    public string _ref { get; set; }
}

设置类型为foo to be Foo[]不管数据是什么,并添加[JsonConverter(typeof(FooConverter))]使用自定义转换器。

这是自定义转换器:

public class FooConverter : JsonConverter
{
    // Declared as abstract in JsonConverter so must be overridden
    public override bool CanConvert(Type objectType) { return true; }

    // Declared as abstract in JsonConverter so must be overridden
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JToken token = JToken.Load(reader);

        return token.Type == JToken.Array ? token.ToObject<Foo[]>() : new Foo[] { token.ToObject<Foo>() };
    }
}

In the ReadJson方法中我们将数据加载到令牌中,并检查数据是数组还是普通对象。如果它已经是一个数组,我们只需将数组对象返回为Foo[]如果它是一个普通对象,我们返回一个new Foo[]包含我们的普通对象。

这是一个测试用例:

string json1 = @"{
                  ""blabla"": 
                    {
                      ""_score"": ""1"",
                      ""_ref"": ""50"",
                      ""foo"": 
                        {
                          ""_colour"": ""Yellow"",
                          ""_ref"": ""y50""
                        }
                    }
                }";

string json2 = @"{
                 ""blabla"": 
                    {
                      ""_score"": ""1"",
                      ""_ref"": ""50"",
                      ""foo"": 
                        [
                          {
                            ""_colour"": ""Yellow"",
                            ""_ref"": ""y50""
                          },
                          {
                            ""_colour"": ""Green"",
                            ""_ref"": ""g50""
                          },
                          {
                            ""_colour"": ""Red"",
                            ""_ref"": ""r50""
                          }
                        ]
                    }
                }";

Test test1 = JsonConvert.DeserializeObject<Test>(json1);
Test test2 = JsonConvert.DeserializeObject<Test>(json2);

您将始终拥有一个数组,但第一个测试用例中将有 1 个元素,第二个测试用例中将有 3 个元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 JSON 单个字符串反序列化为数组 的相关文章

  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 在运行时设置 DataGridView 上的 DataFormatString?

    是否可以在运行时设置 ASP NET DataGridView 中的列或单元格的 DataFormatString 属性 这应该有效 BoundField priceField grid Columns 0 as BoundField pr
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 为什么重载方法在 ref 仅符合 CLS 方面有所不同

    公共语言规范对方法重载非常严格 仅允许根据其参数的数量和类型来重载方法 如果是泛型方法 则根据其泛型参数的数量进行重载 根据 csc 为什么此代码符合 CLS 无 CS3006 警告 using System assembly CLSCom
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面

随机推荐

  • 读取 ruby​​ 中的所有 shell 变量

    Problem 我正在将 shell 脚本作为 ruby 脚本中的子进程运行 运行脚本后我希望有一个选项来检查 shell 的所有环境变量 包括数组变量 到目前为止我已经想出了 set awk F BEGIN v 0 a zA Z a zA
  • Javascript/EcmaScript 3 支持 ISO 8601 日期解析吗?

    您目前如何解析 ISO8601 日期 例如2010 02 23T23 04 48Z在 JavaScript 中 使用下面的代码时 某些浏览器会返回 NaN 包括 Chrome 但 FF3 6 可以工作 你可以在这里尝试一下http www
  • C# Eval() 支持 [重复]

    这个问题在这里已经有答案了 我们需要在运行时评估对象中的值 同时我们有确切成员路径的文本语句 例如 myobject firstMember secondMember 3 text我们考虑使用正则表达式解析这个文本语句 然后使用反射评估文本
  • Scikit-Learn:所有训练示例中都存在标签而不是 x

    我正在尝试使用 SVM 进行多标签分类 我有近 8k 个特征 并且还有长度接近 400 的 y 向量 我已经有二值化的 Y 向量 所以我没有使用MultiLabelBinarizer 但是当我将它与 Y 数据的原始形式一起使用时 它仍然给出
  • R 中的关联度量——Kendall 的 tau-b 和 tau-c

    是否有用于计算 Kendall tau b 和 tau c 及其相关标准误差的 R 软件包 我在 Google 和 Rseek 上的搜索一无所获 但肯定有人已经在 R 中实现了这些 有three 肯德尔 tau 统计数据 tau a tau
  • 将 null 传递给“XslCompiledTransform.Transform”方法

    我正在尝试使用 XSL 转换 XML 文档 我不太熟悉如何在 NET 中转换 XML 所以我使用一些示例代码 XslCompiledTransform xslTransformer new XslCompiledTransform xslT
  • FlatMapMerge、FlatMapConcat 和 FlatMapLatest 之间有什么区别?

    我无法区分这三个运算符之间的确切区别 文档用于 平面地图合并 https kotlin github io kotlinx coroutines kotlinx coroutines core kotlinx coroutines flow
  • 使用OpenCascade,如何快速进行2个形状的碰撞检测?

    使用OpenCascade 如何进行2个形状的碰撞检测 可能有几种方法 一是计算它们的交集 并检查交集结果 另一种方法是计算它们的最小距离 哪种方式更快 或者还有什么更快的方法 多谢 在 brep 数据结构上计算最小距离是一项相当昂贵的操作
  • jQuery Mobile 从弹出窗口中打开弹出窗口

    我正在使用 jQuery 移动1 9 1 min在 PhoneGap 上 我有一个列表 其中单击的每个项目都会打开一个操作弹出窗口 function showActions index selectedIndex index actionP
  • 获取 Foxpro 中目录中的文件列表

    如何在 FoxPro 中以编程方式获取目录中的文件列表 ADIR 使用任何通配符基于目录创建一个数组 local array MyFiles 1 5 nFilesFound ADIR MyFiles C Somepath dbf for i
  • Rails 2.3 的 EOL(生命周期终止)是什么?

    Rails 2 3 的 EOL 日期是哪一天 2 3 于 2013 年 6 月 25 日终止 同年 Rails 4 0 0 发布 据报道 只有 最后一个主要版本系列 才会收到补丁迈克尔 科齐亚斯基 https groups google c
  • Python在循环外获取变量

    我有一个 python 代码 我需要在 for 循环和 if 语句之外获取它的值并进一步使用该变量 My code with open text r as f for line in f readlines if hi in line a
  • 将 SQLAlchemy ORM 与 sql core 表达式中的对象连接起来?

    我必须使用 SQLalchemy Core 表达式来获取对象 因为 ORM 无法执行 更新和返回 ORM中的更新没有returning from sqlalchemy import update class User ORMBase pur
  • 在 OpenGL 引擎中组织 GLSL 着色器

    哪个更好 To 拥有一个包含大量制服的着色器程序指定 要使用的灯光或要执行的映射 例如 我需要一个网格进行视差映射 另一个网格进行视差 镜面映射 我会为延迟传输创建一个制服的缓存列表 并且如果需要的话 只需为每个下一个网格更改几个制服 To
  • java中的matchTemplate与openCV

    我有这样的代码 Mat img Highgui imread inFile Mat templ Highgui imread templateFile int result cols img cols templ cols 1 int re
  • 如果表中的值满足条件,Vba 宏将从表中复制行

    我正在尝试制作一个宏 遍历一张桌子 查看该表的 B 列中的值是否具有特定值 如果有 则将该行复制到另一个工作表中的范围 结果类似于过滤表 但我想避免隐藏任何行 我对 vba 有点陌生 真的不知道从哪里开始 非常感谢任何帮助 这正是您使用高级
  • 从 genymotion 访问 homestead 主机

    我如何从genymotion模拟器访问homestead 我将这一行添加到模拟器中hosts文件 但不起作用 192 168 10 10 myapp app 以下是我在 Windows 10 上的操作方法 检查宅基地是否有效 我的宅基地在该
  • [NSMutableDictionary setValue: value forKey: key] 是否保留 NSString key?

    添加项目时NSMutableDictionary使用setValue forKey 方法 我想这可以推广到任何NSObject 字典是否保留第二个参数 即NSString 例如 NSAutoreleasePool pool NSAutore
  • Gradle:将 jar 依赖项包含到 Ear/libs 中

    我正在使用 Gradle 创建耳朵 但我很难弄清楚如何正确地将依赖项包含在 lib 文件夹中 我知道我可以使用 earlib project group name version 在那里包含罐子 这些 jar 的编译依赖项也将添加到 Ear
  • 将 JSON 单个字符串反序列化为数组

    我正在尝试反序列化我的 json 数据 但是我的类未正确设置 我无权更改 json 响应 因此我需要编写一个函数来正确处理 json 这是数据 blabla Score 1 Ref 50 foo colour Yellow ref y50