Json.NET - 防止重新序列化已经序列化的属性[重复]

2024-03-24

在 ASP.NET Web API 应用程序中,我正在使用的一些模型包含一块仅在客户端有用的临时 JSON。在服务器上,它只是作为字符串进出关系数据库。性能是关键,在服务器端处理 JSON 字符串似乎根本没有意义。

所以在 C# 中,想象一个这样的对象:

new Person
{
    FirstName = "John",
    LastName = "Smith",
    Json = "{ \"Age\": 30 }"
};

默认情况下,Json.NET 将像这样序列化该对象:

{
    "FirstName": "John",
    "LastName": "Smith",
    "Json": "{ \"Age\": 30 }"
}

我希望能够指示 Json.NET 假设Jsonproperty 已经是序列化表示,因此它不应该重新序列化,并且生成的 JSON 应如下所示:

{
    "FirstName": "John",
    "LastName": "Smith",
    "Json": {
        "Age": 30
    }
}

理想情况下,这在两个方向上都有效,即当 POST JSON 表示时,它将自动反序列化为上面的 C# 表示。

使用 Json.NET 实现此目的的最佳机制是什么?我需要定制吗JsonConverter?有没有更简单的基于属性的机制?效率很重要;重点是跳过序列化开销,这could是一个微观优化,但为了论证起见,我们假设它不是。 (可能会有大量的大列表Json正在返回的属性。)


如果您能够更改类型Json属性于Person from string to JRaw然后你就会得到想要的结果。

public class Person
{
    public string FirstName { get; set;}
    public string LastName { get; set;}        
    public JRaw Json  { get; set;}
} 

或者,您可以保留string属性,并添加一个JRaw用作序列化代理的属性:

public class Person
{
    public string FirstName { get; set;}
    public string LastName { get; set;}
    [JsonIgnore]
    public string Json { get; set; }

    [JsonProperty("Json")]
    private JRaw MyJson
    {
        get { return new JRaw(this.Json); }
        set { this.Json = value.ToString(); }
    }        
}

无论哪种方式,序列化和反序列化都将按照您的要求进行。

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

Json.NET - 防止重新序列化已经序列化的属性[重复] 的相关文章

  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • 通过另一个列表更新列表(linq)

    我有类 Data 的对象列表 如下所示 class Data int code string name DateTime date update 我还有另一个课程列表 例如 class RefCodes int old code int n
  • 当其源是 https uri 时如何使 wpf MediaElement 播放

    在 wpf 独立应用程序 exe 中 我在主窗口中包含了 MediaElement
  • 确定序列化对象的类型

    我需要通过套接字发送消息 从用户到引擎的请求 以及从引擎到用户的响应 所以流程本质上是 serialized request Server lt network gt Client serialized response request r
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 意外的令牌:尝试解析 JSON 字符串时

    我正在尝试解析这个 JSON 字符串 RESULTS name Thessaloniki GR type Sailing l sailing weather beach Porto 20Carras 20Marina 45904 name
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector
  • 运行 xunit 测试时无法将输出打印到控制台窗口

    public class test2InAnotherProject private readonly ITestOutputHelper output public test2InAnotherProject ITestOutputHel
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • 使用 Yarn 从 Github 包注册表安装私有包失败且未授权

    这个问题与这些有关 但这些解决方案都不适合我 Yarn 找不到私有 Github npm 注册表 https stackoverflow com questions 58316109 yarn cant find private githu
  • 找不到类型或命名空间名称“MySqlConnection”(您是否缺少 using 指令或程序集引用?)

    所以我正在制作一个项目 我几乎完成了它 这个错误让我困扰 我认为首先我的数据库没有连接 但它已连接 我真的不知道它的解决方案是什么 正确如果我给出的问题错了 请告诉我 并且我使用的是 Visual Studio 2013 我已经通过检查和取
  • 杀死一个进程

    我们有一个为 Windows Server 2003 开发的自定义应用程序 但在将其迁移到 Windows Server 2008 R2 后出现了问题 应用程序 进程的一部分是使用 C 代码终止 Windows 进程 这在 Windows
  • 暗网 YOLO 图像大小

    我正在尝试在 Darknet YOLO v2 中训练自定义对象分类器https pjreddie com darknet yolo https pjreddie com darknet yolo 我收集了一个图像数据集 其中大多数尺寸为 6
  • 如何创建像Windows IP地址字段一样的屏蔽文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何创建一个numeric Masked TextBox in WPF就像Windows IP地址字段一样 点击后跳转到下一个区域 D
  • 处理不同浏览器的JavaScript问题

    我遇到的问题是我的代码在 JavaScript 中工作正常 但在 Firefox 或 safari 中无法正常工作 想知道为什么 我正在做的是 我有一个循环遍历每个元素 并根据文本框中的变量只想发出警报 正如我之前所说 这段代码在 IE 中
  • 如何在 React/JSX 文件中添加脚本标签?

    private get mouseGestureSettingView const selectedMenu this state return selectedMenu 2 div h3 Mouse Gesture h3 div div
  • Puppeteer 访问 URL 时加载 429 的空白页面

    我正在开发一个从酒店网站获取定价信息的项目 但在 puppeteer 中加载网站时无法执行任何搜索 这是我打开 Chrome 的 JavaScript 片段 const puppeteer require puppeteer async g
  • Heroku推送应用程序问题

    我安装了 Heroku 并设置了一个帐户 但由于某种原因 每当我尝试将应用程序推送到网站时 都会收到此错误 git push heroku master No such app as first app fatal The remote e
  • 幕后花絮:核心数据日期以 31 年偏移存储?

    我知道 里面没有用户可维修的部件 但我很好奇 在 Core Data sqlite3 DB 中 我似乎可以在 ZDATE 中获取日期 如下所示 sqlite gt select datetime ZDATE unixepoch 31 yea
  • iOS 金属。为什么简单地改变 colorPixelFormat 就会产生更明亮的图像?

    在 iOS 上的 Metal 中 默认的 colorPixelFormat 是bgra8Unorm 当我将格式更改为rgba16Float所有图像都变亮 为什么 一个例子 Artwork MTKView有格式bgra8Unorm 纹理映射四
  • 正则表达式 [A-Za-z] 似乎不包含字母 W 和 w

    由于某种原因 我不知道为什么 也许我的系统或我的大脑有些不对劲 正则表达式 A Z 似乎无法识别字母 W 和 a z 似乎不认识字母 w 例子 for x in A a B b C c D d E e F f G g H h I i J j
  • 当 std::cerr 上打印某些内容时设置 gdb 断点

    我使用 qt creator 作为 gdb 的 IDE 和前端 当对 std cerr 变量调用operator 如何在 std cerr 设置断点 你的问题没有意义 std cerr是一个全球性的variable 您只能在函数上设置断点
  • 所选 bean 不在同一模块或企业应用程序中

    只是瞎猜 但我是否需要本地接口来调用远程无状态 EJB 当我尝试通过 Netbeans 远程调用 bean 时 Netbeans 不允许对此 Bean 进行远程调用或任何调用 为什么不 尝试手动完成 如下 jndi是什么global部署在
  • MSDeploy setParameter 不起作用

    我们正在尝试将 构建一次 随处部署 模型集成到我们的构建 部署系统中 MSDeploy 在这方面发挥了奇迹 通过 CRC 校验和比较和 大部分情况下 当使用参数化根据我们部署到的环境来更改应用程序 web configs 时 它也同样有效
  • 如何在 DataFrame 中选择两个值之间的行

    我正在尝试修改 DataFramedf仅包含列中的值的行closing price介于 99 和 101 之间 并尝试使用下面的代码来执行此操作 但是 我收到错误 ValueError 系列的真值不明确 使用 a empty a bool
  • 如何使用 API 网关调用 sagemaker 推理端点

    我正在尝试使用 AWS Integration 从 api 网关调用 sagemaker 推理端点 我不想在 API 网关和 sagemaker 运行时之间使用 lamdba 我跟着这个doc https docs aws amazon c
  • Adobe AIR 执行程序

    我想按下 Adob e AIR 应用程序中的按钮并执行某些已安装的程序 例如 我有一个名为 Start Winamp 的按钮 当按下这个按钮时 它应该直接启动 Winamp exe 我不想执行一些命令行 我只想启动一个 exe 或者 是同一
  • CSS - 将文本添加到样式表中的样式

    我还没有找到任何文档 所以我认为这是不可行的 但值得一问 我可以在样式表内指定样式内的实际文本吗 我有几个地方在相同的 div 位置使用相同的文本 我没有使用 javascript 或在 div 中重新输入相同的文本 而是在考虑样式是否可以
  • Json.NET - 防止重新序列化已经序列化的属性[重复]

    这个问题已经存在了 在 ASP NET Web API 应用程序中 我正在使用的一些模型包含一块仅在客户端有用的临时 JSON 在服务器上 它只是作为字符串进出关系数据库 性能是关键 在服务器端处理 JSON 字符串似乎根本没有意义 所以在