相关疑难解决方法(0)

使用json.net使属性反序列化但不序列化

我们有一些配置文件是通过使用Json.net序列化C#对象生成的.

我们希望将序列化类的一个属性从简单的枚举属性迁移到类属性.

一个简单的方法是将旧的enum属性保留在类上,并在我们加载配置时安排Json.net读取此属性,但是当我们下次序列化对象时不要再次保存它.我们将分别从旧枚举中处理生成新类.

是否有任何简单的方法来标记(例如,使用属性)C#对象的属性,以便Json.net仅在序列化时忽略它,但在反序列化时要注意它?

c# json.net

104
推荐指数
5
解决办法
5万
查看次数

Json.NET向后兼容性:编写新的属性名称,但要读取新属性或旧属性

让我们假设我喜欢这个属性,我用它来保存/加载设置:

public Options RectangleCaptureOptions { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想更改属性名称RegionCaptureOptions而不是RectangleCaptureOptions.但是,如果我更改属性名称,那么Json .NET将无法找到它反序列化.

这里接受的答案不起作用:

.NET NewtonSoft JSON将映射反序列化为不同的属性名称

因为如果我使用JsonProperty:

[JsonProperty("RectangleCaptureOptions")]
public Options RegionCaptureOptions { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后它还将序列化属性,因为RectangleCaptureOptions它是旧名称.

因此,当我更改变量或属性的名称时,仍然希望在反序列化时(RegionCaptureOptions或者RectangleCaptureOptions对于此示例)支持它们的旧命名,但在序列化(RegionCaptureOptions)时使用当前名称.这样,我可以在加载(反序列化)它们时为我的设置json文件提供向后兼容性支持.

我认为最干净的解决方案是制作自定义属性JsonAlternativeName,如下所示:

[JsonAlternativeName("RectangleCaptureOptions")]
public Options RegionCaptureOptions { get; set; }
Run Code Online (Sandbox Code Playgroud)

可选地,它可以具有多个参数支持,这样您可以添加多个替代名称.

但不确定如何完成它(或者根本不可能)并且无法在StackOverflow中找到类似的解决方案,因为在我发现的每个问题中,人们建议使用JsonProperty哪些对我的情况没有帮助.

c# serialization json json.net

5
推荐指数
0
解决办法
161
查看次数

将不同的JSON反序列化为一个类

首先; 我正在使用Newtonsoft.Json将JSON反序列化为这样的对象:

JSON:

[{"number":22041}]
Run Code Online (Sandbox Code Playgroud)

订单对象

[JsonProperty("number")]
public string OrderNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是,根据"其他"方面的版本,Json可能会变为

[{"order_number":22041}]
Run Code Online (Sandbox Code Playgroud)

所以我实际上想要预先定义"number"和"order_number"来反序列化到我的OrderNumber中.

有没有办法实现类似下面的东西(实际上有效)

[JsonProperty("order_number")]
[JsonProperty("number")]
public string OrderNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)

我可以编写另一个具有相同属性的类,但使用其他JsonProperties取决于它们所使用的版本,但这似乎是最后一次尝试的东西,除非没有可能的方法来更容易地做到这一点.


更新

我同意这个问题与上述问题重复.但是,由于JSON中的给定键发生了显着变化,因此我将制作重复的对象(OrderV1,OrderV2作为示例).

在我的情况下,简单地将一些字符替换为其他字符是不够的.

c# serialization json

5
推荐指数
0
解决办法
130
查看次数

标签 统计

c# ×3

json ×2

json.net ×2

serialization ×2