我需要执行如下操作,但我需要在不添加属性或以其他方式污染模型类的情况下执行此操作。理想的解决方案是通过JsonSerializerSettings
,不干扰其他自定义序列化。顺便说一句,以下内容来自这个问题:JSON.NET 中特定对象的自定义转换 https://stackoverflow.com/questions/6404881/custom-conversion-of-specific-objects-in-json-net?rq=1
public class Person
{
public string FirstName { get; set; }
[JsonConverter(typeof(AllCapsConverter))]
public string LastName { get; set; }
// more properties here in the real example, some of which nest to properties that use their own JsonConverters.
}
The JsonConverter
对于这个玩具示例(内容并不真正相关;相关的是我将其用于属性):
public class AllCapsConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
=> objectType == typeof(string);
public override bool CanRead => false;
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotSupportedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var str = value as string;
var upper = str.ToUpperInvariant();
JToken j = JToken.FromObject(upper);
j.WriteTo(writer);
}
}
通过单元测试:
public class PersonSerializationTest
{
[Fact]
public void SerializePerson_LastNameCaps()
{
var person = new Person
{
FirstName = "George",
LastName = "Washington"
};
var serialized = JsonConvert.SerializeObject(person);
var expected = @"{""FirstName"":""George"",""LastName"":""WASHINGTON""}";
Assert.Equal(expected, serialized);
}
}