Json.NET 可以反序列化带有点表示法的扁平化 JSON 字符串吗?

2023-11-24

我有一个扁平化的 JSON:

{
    "CaseName" : "John Doe v. State",
    "CaseDate" : "<some date>",
    "Client.FirstName" : "John",
    "Client.LastName" : "Doe",
    "Client.Email" : "[email protected]"
    etc...
}

我想将其反序列化回该实体:

public class Case()
{
    public string CaseName { get; set; }
    public string CaseDate { get; set; }
    public Client Client { get; set; }
}

where Client.FirstName, Client.LastName, and Client.Email是属性在Client目的。使用 Json.NET,有什么方法可以让它解析点符号并正确反序列化该实体?目前,使用默认设置,它告诉我Client.FirstName不是类型中的属性Case.


是的你可以。你将从中派生出一个类JsonConverter并覆盖CanConvert方法表明您可以转换Client type.

然后,您将覆盖ReadJson and WriteJson读取和写入 JSON 文本字段的方法。

对于像这样的 JSON 文字,您很可能需要创建一个JsonConverter为了Case类型,因为您需要缓存该对象的所有属性Client序列化期间的对象,直到您有足够的信息来实际创建对象Client实例。

然后,您可以调用Add方法上的JsonConverterCollection暴露的实例Converters财产 on the JsonSerializer您用来执行序列化/反序列化的实例。

请注意,如果您需要对可能以这种方式表示的许多不同类执行此操作,那么您可以编写one JsonConverter实现,并让它扫描属性上的属性。如果属性具有属性并公开另一个具有属性的对象,则它将期望读取/写入点符号。

应该注意的是,虽然您使用点符号作为标识符,但这样做的情况很少见。如果可能的话,在构建 JSON 文字的一侧,应该以这种方式进行:

{ 
    CaseName: "John Doe v. State", 
    CaseDate: "<some date>", 
    Client: 
    {
        FirstName: "John", 
        LastName: "Doe", 
        Email: "[email protected]"
    }
} 

但这是假设您可以控制这一目标。如果你不这样做,那么你无能为力。

如果您确实有控制权,那么以这种方式构建 JSON 文字将不需要自定义JsonConverter执行。

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

Json.NET 可以反序列化带有点表示法的扁平化 JSON 字符串吗? 的相关文章

  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • .NET Core 3 [JsonIgnore] 请求单个资源时不起作用

    在我的 net Core 3 0 API 中 JsonIgnore 属性无法正常工作 我在用着System Text Json 而不是旧的Newtonsoft Json 当我使用返回对象列表的资源时 例如 api Object 对象的序列化
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • Spring JSON序列化、Gson反序列化

    我目前在某些内部对象的反序列化方面遇到问题 在春天 我在使用输出之前初始化所有对象 ResponseBody 例如 这是一个响应 id 1 location id 1 extra location data id 2 location 1
  • json.net:指定字典键的转换器

    我有一个 JSON data A 5 B 6 foo foo bar bar 我需要将数据反序列化到一个类中 public Dictionary
  • C# 无法捕获 SerializationException

    我的程序在加载序列化文件的部分遇到问题 如果文件无法反序列化 我希望很好地失败 但由于某种原因 我的程序将中断而不是进入 catch 子句 这是我的代码 using FileStream fs new FileStream openFile
  • 如何告诉 cxf 将包装类型保留在方法中?

    在我的 WSDL 中我有一个操作
  • 用于将具有相同前缀的所有变量的值相加的 SPSS 语法

    我想知道是否有一种方法可以让 SPSS 将具有相同前缀的所有变量相加 例如 我有名为MFQAP 1 MFQAP 2 MFQAP 3等等 有没有办法告诉SPSS将所有以以下开头的变量相加MFQAP 我知道我可以告诉 SPSS 将所有变量相加M
  • to_proc 方法在 Ruby 中意味着什么?

    我正在学习 Rails 并关注这个线程 https stackoverflow com questions 1961030 我被困住了to proc方法 我认为符号只是字符串的替代品 它们就像字符串 但在内存方面更便宜 如果我还缺少任何其他
  • 带数组的双美元变量

    我正在尝试使用双美元语法访问数组的第一项 但它无法按照我想要的方式工作
  • json 网络前导零(禁用基本转换)

    Json Net 无法正确反序列化带有前导零的数字 例如 number 010 被识别为 8 因为0108 基等于8以 10 为基数 如果看JsonTextReader ParseNumber 你可以看到 long value2 text2
  • 如何检查字符串是否具有正确的 html 语法

    我想检查给定的字符串是否具有正确的 html 语法 我不知道哪些 html 元素应该在里面 我唯一知道的一件事是字符串应该是正确的 html 表达式 有人知道如何在 C 中检查它吗 您可以使用 Html 敏捷包 http html agil
  • jquery 隐藏简单的 javascript 错误

    我在 chrome 和 firefox 中使用 jQuery 和 flot 当我编写代码时 我发现执行在一些愚蠢的事情上会默默失败 例如访问不存在的哈希结构等 感觉 jQuery 中有一些 try catch 逻辑 让我看不到任何错误 有没
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • Verilog 中如何使用函数?

    在我的 FPGA Verilog 课程中 我的教授只是回顾了函数 他说在函数中 你可以按程序编写代码 然后 当您想要调用该函数时 您可以在always块中调用它 即 程序性地 也可以使用分配语句来调用它 对我来说 如何使用过程代码编写函数
  • Rails 2.3.14:如何序列化 ActionController::Request 对象?

    我需要编写一些根据 Rails 2 3 14 控制器收到的请求对象类型执行操作的方法 但是 我不想启动整个应用程序 甚至不想启动控制器 我只想拥有这样一个对象的编组副本 以便我可以在 Rails 环境之外使用 不幸的是 ActionCont
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间

随机推荐

  • 如何检查提供的 CSRF 令牌在 Symfony2 中是否无效?

    我创建了一个 Symfony2 表单并将其绑定到请求 在继续处理表单的其余部分之前 我需要明确确保 CSRF 令牌是否有效 无效 form token gt isValid throws OutOfBoundsException消息 Chi
  • 如何解析格式为“Name ”的字符串

    我有一种方法可以接收以下格式之一的联系人 1 电子邮件受保护 2 名称 电子邮件受保护 gt 或 姓名 电子邮件受保护 gt 可以存在空格 如果它是格式 1 我什么也不做 对于 2 我需要解析姓名和电子邮件 我永远不知道我会收到哪种格式的电
  • 无法解析符号 AndroidJUnit4

    我正在尝试为我的应用程序添加登录facebook 但是当我添加执行此操作所需的存储库时 它导致了一个错误 AndroidJUnit4 现在无法解析 示例InstrumentedTest java package com example us
  • Cordova 想要 android-19,我有 android-20

    这里有很多关于运行 cordova add platform android 命令的问题的问题 我已经尝试了每种有目的的解决方案 但没有一个对我有帮助 错误信息 sandbox hello cordova platform add andr
  • CMake 中 CUDA 库的链接

    我正在使用 CMake 3 10 并且在将已编译的库链接到 CMake 中的测试可执行文件时遇到问题 我进行了大量搜索 发现在早期版本中存在一个问题 即无法在结果可执行文件中链接中间库 我无法判断这是否已解决或仍然是一个问题 我的 CMak
  • 重写取消应用方法

    我有一个case来自图书馆课程 我想覆盖unapply method 减少参数数量我需要通过对其进行模式匹配 我这样做 object ws1 a library class case class MyClass a Int b String
  • 我需要 T-SQL 将数据导出到 CSV(带标题)的最佳实践

    我需要做的是使用 T SQL 将数据导出到 CSV 文件 我很困惑有很多方法可以做到这一点 我不知道选择哪一种 请帮我确认以下内容 据我所知大概有3种方法 请您帮我确认一下 使用 Microsoft Jet OLEDB 4 0 如下所示 I
  • GlassFish v3 和 glassfish-maven-plugin (Mac)

    我正在尝试使用 glassfish maven plugin https maven glassfish plugin dev java net 与 GlassFish v3 我在 Mac 上并使用 Eclipse 但我似乎无法部署我的 W
  • Interface Builder(iPhone dev)自定义按钮背景图像不考虑拉伸设置

    我正在尝试使用 Interface Builder 中的背景图像创建自定义按钮 图像具有可拉伸和不可拉伸的部分 以便可以调整其大小 IB 公开了 Stretching 属性以实现此目的 但我输入的任何值都不会影响按钮的显示方式 它始终完全拉
  • Flexbox - 填充剩余空间[重复]

    这个问题在这里已经有答案了 我有一个像这样的基本弹性盒布局 body html height 100 width 100 container width 100 background grey display flex flex direc
  • 使用 CSS 和 Bootstrap 创建自定义复选框

    我使用引导框架进行了以下标记 div class col md 4 div class custom container img class center block img responsive img circle invite con
  • 50% 内联块未彼此相邻显示

    说我有 span class ib half span span class ib half span and ib half display inline block width 50 我希望这两个跨度并排显示 但它们不会 没有边距 内边
  • 当作用域被销毁时,我是否需要“取消监视”作用域变量?

    以下是来自 Angular 的文档 我正在观察属于此范围的几个变量 以构建过滤字符串ng grid 当这个作用域被销毁时 我是否需要通过调用返回值来取消监视它们 scope watch 或者范围的破坏足以解决这个问题吗 如果正在监视的变量不
  • webkit/chrome Web Inspector 资源检查如何工作?

    我总是想知道如何资源检查从事 webkit safari chrome Web Inspector 工作 浏览器必须提供本机 BPI 或 JavaScript 的某些内容来显示查询列表及其时间线 二进制 API 称为什么 我可以使用相同的
  • 编写 cypress 测试时如何选择同名的 div 元素

    我正在使用 cypress 为我们的新应用程序创建 E2E 测试 该应用程序有一个菜单 其中包含用于在地图屏幕上显示不同数据的按钮 所有这些按钮都有相同的 div 名称 我可以通过输入按钮的文本名称来区分 cy get div sb ite
  • 如何在django中自动更改模型字段

    我有一个模型 我想知道是否可以设置触发模型字段更改的条件 例如 我有一个模型 class BillboardTracker models Model client name models CharField max length 400 e
  • 从java在mysql中创建数据库

    你能帮忙解决这个问题吗 我正在尝试创建并使用一个名为 TIGER 的数据库 如果我在 MySQL 中创建数据库并且它运行完美 那么我没有问题 我想做的是从 Java 创建它 这样 当代码第一次运行时 它会创建数据库作为初始启动的一部分 如果
  • 5000:类“..”必须是“flash.display.MovieClip”的子类,因为它链接到该类型的库元件

    这是带有完整路径的标题错误 psf Home Dropbox Development Repositories GIT i cc Powerhouse Notes master flash lib libnote NotesCore as
  • 来自 AXUIElement 的 CGWindowID

    我正在尝试使用辅助功能 API 自动化外部 OSX 应用程序 一些 应用程序的状态无法通过 API 获得 因此我通过以下方式获取它 屏幕刮擦 为此 我需要获取可访问性对象的 CGWindowID 窗口角色 有没有直接的方法来获取 窗口角色
  • Json.NET 可以反序列化带有点表示法的扁平化 JSON 字符串吗?

    我有一个扁平化的 JSON CaseName John Doe v State CaseDate