C# jsoncovert序列化去除空值和回车
时间: 2024-10-23 08:08:03 浏览: 36
在C#中,使用JsonConvert.SerializeObject()方法将对象序列化为JSON字符串时,默认会包含所有属性,包括空值和回车等空白字符。如果你想要移除这些不必要的空值和回车,可以自定义一个JsonConverter来过滤。
首先,创建一个继承自JsonConverter<T>的类,例如`TrimmingJsonConverter<T>`,然后重写`WriteJson()`方法:
```csharp
public class TrimmingJsonConverter<T> : JsonConverter<T>
{
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// 读取转换不是重点,这里不做处理
return default(T);
}
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
{
if (value != null)
{
var properties = typeof(T).GetProperties();
foreach (var property in properties.Where(p => p.GetValue(value) != null))
{
writer.WritePropertyName(property.Name);
property.GetValue(value)?.ToString().Trim().WriteTo(writer); // 使用ToString().Trim()移除前后的空格和换行符
}
}
}
}
```
然后,在序列化时指定这个自定义的Converter:
```csharp
string json;
using (var writer = new Utf8JsonWriter(new StringWriter()))
{
JsonSerializerOptions options = new JsonSerializerOptions();
options.Converters.Add(new TrimmingJsonConverter<MyObject>());
JsonConvert.SerializeObject(myObject, writer, options);
json = writer.GetString();
}
```
这样,序列化的JSON字符串就不会包含空值和多余的空白了。
阅读全文