1、自定义的实例类
public class MyMailContent
{
public string Name { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
2、自定义转换器JsonConverter
public class MyMailContentJsonConverter : JsonConverter<MyMailContent>
{
public override MyMailContent Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType != JsonTokenType.StartObject)
{
throw new JsonException();
}
var mailContent = new MyMailContent();
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.EndObject)
{
return mailContent;
}
if (reader.TokenType == JsonTokenType.PropertyName)
{
var propertyName = reader.GetString();
reader.Read();
switch (propertyName)
{
case "Name":
mailContent.Name = reader.GetString();
break;
case "Subject":
mailContent.Subject = reader.GetString();
break;
case "Body":
string body = reader.GetString();
//body的内容做一些处理
mailContent.Body = body;
break;
}
}
}
throw new JsonException();
}
public override void Write(Utf8JsonWriter writer, MyMailContent mailcontent, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
}
private static JsonSerializerOptions _jsonDeserializeOptions = new()
{
ReadCommentHandling = JsonCommentHandling.Skip,
AllowTrailingCommas = true,
Converters =
{
new MyMailContentJsonConverter()
}
};
3、使用自定义转换器
var jsonstring = JsonSerializer.Serialize(new MyMailContent
{
Name = "邮件",
Subject = "自定义转换器写法",
Body = "邮件内容"
});
var MailContent = JsonSerializer.Deserialize<MyMailContent>(jsonstring, _jsonDeserializeOptions);