C# 使用JsonConverter-System.Text.Json将Null属性设置为空字符串
我一直在尝试使用C# 使用JsonConverter-System.Text.Json将Null属性设置为空字符串,c#,asp.net-core,C#,Asp.net Core,我一直在尝试使用JsonSerializer和一个自定义JsonConverter反序列化一些null参数,这些都是我在关于该主题的文章中看到的示例,但它不起作用 当我调试NullToEmptyStringConverter时,它似乎跳过了我特意设置为null的null参数Version,而只是返回有值的字符串。然后,当您调试反序列化对象时,它仍然是Version=null public class NullToEmptyStringConverter : JsonConverter<st
JsonSerializer
和一个自定义JsonConverter
反序列化一些null
参数,这些都是我在关于该主题的文章中看到的示例,但它不起作用
当我调试NullToEmptyStringConverter
时,它似乎跳过了我特意设置为null
的null参数Version
,而只是返回有值的字符串。然后,当您调试反序列化对象时,它仍然是Version=null
public class NullToEmptyStringConverter : JsonConverter<string> {
public override bool CanConvert(Type typeToConvert) {
return typeToConvert == typeof(string);
}
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
string value = reader.GetString();
if(value == null) {
value = "";
}
return value;
}
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) {
throw new NotImplementedException();
}
}
添加到转换器
var options = new JsonSerializerOptions();
options.Converters.Add(new NullToEmptyStringConverter());
var config = JsonSerializer.Deserialize<ConfigRoot>(responseData.ToString(), options);
var options=newJSONSerializeRoptions();
添加(新的NullToEmptyStringConverter());
var config=JsonSerializer.Deserialize(responseData.ToString(),选项);
当我调试NullToEmptyStringConverter
时,它似乎跳过了null参数Version
JsonConverter
包含一个名为HandleNull
的虚拟属性,默认情况下该属性为false
。因此,NullToEmptyStringConverter
不用于null
值。重写getter并将其设置为返回true
,如下所示:
public override bool HandleNull => true;
…为什么即使我已将Read方法置于Version属性之上,仍会对每个参数调用Read方法
public class Application {
[JsonPropertyName("version")]
[JsonConverter(typeof(NullToEmptyStringConverter))]
public string Version { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("description")]
public string Description { get; set; }
}
在您的示例中,您有以下行:
这会将NullToEmptyStringConverter
注册为全局转换器。删除此注册,由于[JsonConverter]
属性,转换器将仅为版本运行。感谢回复,我添加了公共覆盖bool HandleNull=>true代码>现在它命中了Write
方法,该方法抛出了一个未实现的异常
作为您的写入
实现。我不知道在写入
方法中放入什么,因此我将其保留原样。在我从中复制代码的帖子中,声明它不是必需的。如果你在应用程序中的任何地方将应用程序写入JSON,它都是必需的,可能是作为控制器响应的一部分。您显示的示例代码只读取,但应用程序中的其他部分必须执行写入操作。啊,好的,我刚刚添加了writer.WriteStringValue(value??)代码>而且它似乎在正常工作:-)也许你应该在你的答案中包含这个,我会把它标记为正确的。也投了赞成票
options.Converters.Add(new NullToEmptyStringConverter());