json - Json.NET 将不匹配的数据反序列化为扩展数据
问题描述
我正在尝试将 json 反序列化为一个对象。一个属性的情况下,我有一个带有$ref
属性的子对象(最终将被解析为字符串)......但在反序列化时,我希望将这些属性添加到我的 JsonExtensionData (其中存在数据类型不匹配) .
考虑以下:
internal class Program
{
private static void Main()
{
var json = File.ReadAllText("test.json");
var jo = JObject.Parse(json);
using var reader = jo.CreateReader();
var serializer = JsonSerializer.CreateDefault();
var o = new JsonData();
serializer.Populate(reader, o);
}
}
public class JsonData
{
public JsonChildData Data { get; set; }
[JsonExtensionData]
public IDictionary<string, object> AdditionalData { get; set; }
}
public class JsonChildData
{
public int IntValue { get; set; }
public string StringValue { get; set; }
[JsonExtensionData]
public IDictionary<string,object> AdditionalData { get; set; }
}
使用包含以下内容的 test.json 文件:
{
"data": {
"intValue": 1,
"otherValue": "baz",
"stringValue": {
"$ref": "foobar"
}
}
}
请注意,stringValue 实际上是一个“$ref”对象,因此String
与StringValue
.
在这种情况下,我想stringValue
在我的JsonExtensionData
字典中结束JsonChildData
.
作为假设,如果我AdditionalData
手动将字符串值添加到我的 test.json 中并stringValue
从我的 test.json 中删除,那么在序列化数据时会遇到一个额外的问题。
o.Data.AdditionalData["stringValue"] = new JObject
{
["$ref"] = "foobar"
};
var newJson = JsonConvert.SerializeObject(o);
newJson
现在包含重复的属性名称(我希望排除 null 并包含自定义值JsonExtensionData
):
{
"data": {
"intValue": 1,
"stringValue": null,
"otherValue": "baz",
"stringValue": {
"$ref": "foobar"
}
}
}
关于如何使用转换器或自定义合同解析器在此处获得所需输出的任何建议?请注意,硬编码的每个属性方法将不起作用。我需要一种动态处理这些 $ref 情况的方法。
谢谢!
解决方案
推荐阅读
- java - 获取 java.net.ConnectException 但是当我实现 catch 块时,IDE 告诉永远不要从 try 块中抛出 ConnectException
- django - 如何过滤 django 中的数据?
- android - 在没有连接的情况下接收BLE数据是一种好方法吗?
- spring - 安装软件遇到问题
- botframework - 无法自定义网络聊天发送框(表单字段)
- java - Java:Java泛型的奇怪问题
- windows-services - 升级到平台更新 32 后无法启动批处理服务
- c# - Active Directory - c# 中的 DN 转发器
- ios - 如何修复无法将“AnyObject”类型的值转换为预期的参数类型“_?” 错误?
- c# - 对象引用错误进入将项目添加到对象