例如,我正在尝试将具有 10 个字段的对象转换为 Json,但是我需要修改序列化其中 1 个字段的过程。目前,我必须像这样手动写出每个属性:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName("Field1");
serializer.Serialize(writer, value.Field1);
writer.WritePropertyName("Field2");
serializer.Serialize(writer, value.Field2);
writer.WritePropertyName("Field3");
serializer.Serialize(writer, value.Field3);
writer.WritePropertyName("Field4");
serializer.Serialize(writer, Convert.ToInt32(value.Field4)); //Modifying one field here
//Six more times
writer.WriteEndObject();
}
这不是好的代码,而且不得不编写它真的很烦人。有没有办法让 Json.net 自动序列化除一个属性之外的所有属性?或者可能自动生成一个 JObject 并对其进行修改?
最佳答案
您可以尝试使用 JsonConverterAttribute
装饰您需要手动修改的属性,并传递适当的 JsonConverter
类型。
例如,使用OP的原始示例:
public class IntegerConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, Convert.ToInt32(value));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
}
class TestJson
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
[JsonConverter(typeof(IntegerConverter))]
public string Field4 { get; set; }
}
然后您可以像往常一样使用 JsonConvert
序列化该对象:
var test = new TestJson {Field1 = "1", Field2 = "2", Field3 = "3", Field4 = "4"};
var jsonString = JsonConvert.SerializeObject(test);
关于c# - 如何使用 Json.net 修改仅一个字段的 Json 序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21182758/