【发布时间】:2021-03-22 03:46:01
【问题描述】:
我为自定义转换器的Read() 端编写了一个system.text.json 自定义转换器。但是,对于Write() 方面,我只想使用默认的写入功能来序列化对象,而不必手动滚动对象的序列化。我开始...
public override void Write(Utf8JsonWriter writer, Customer value, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
我曾希望我可以在Write() 方法中简单地使用标准JsonSerializer.Serialize(Customer)。比如……
public override void Write(Utf8JsonWriter writer, Customer value, JsonSerializerOptions options)
{
return JsonSerializer.Serialize(value);
}
但是,这似乎返回了null。我想我所做的只是嵌套相同的行为。
作为绝望的表现,我还尝试删除 Write() 方法,希望标准功能能够填补这一空白,但我收到以下构建错误消息...
CS0534 'CustomerJsonConverter' does not implement inherited abstract member
'JsonConverter<Customer>.Write(Utf8JsonWriter, Customer, JsonSerializerOptions)'
Newtonsoft.Json 具有名为 CanRead 和 CanWrite 的属性,可以设置为 False。这些强制转换器分别在反序列化和序列化时使用默认转换器功能。
我希望 System.Text.Json 中有类似的东西?
更新 1
使用 @Guilherme 的建议...部分可行。但是,这种方法会给出一个不完整的 Json 对象。
作为背景,当我反序列化我的原始源 Json 时,我必须处理原始 Json(我无法控制)的字段可以是空 "" 或对象的情况{ "key": "value" } 或数组 [{ "key": "value" },{ "key": "value" }]。在Read()(反序列化器)中,我处理这个并输出一个一致的数组。
但是现在,当我序列化生成的对象时,Addresses 数组始终为空(空白)。这是我将 Write() 方法留空时的输出。请注意,“地址”没有值或逗号分隔符。
{
"Customer": {
"firstName": "John",
:
other values
:
"Addresses": "Phone": "01234567890"
}
}
我是否必须滚动自己的 JsonDocument 并在 Write 方法中使用它?
【问题讨论】:
-
它返回无效。你试过把它留空吗?
标签: c# json converters system.text.json