c# - 如何使用 Json.net 修改仅一个字段的 Json 序列化?

标签 c# json json.net

例如,我正在尝试将具有 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/

相关文章:

c# - 如果它是空的 ('' ) 字符串,则忽略属性来自 Json/Api Response C#

c# - Web Api 返回扩展键值对象而不是原始 JSON 对象

c# - 从后台线程更新 UI

c# - 如何使用 RazorGenerator 而不是 T4 来生成 C# 文件?

c# - 创建 xml 文档时的默认命名空间

json - MVC3 自动绑定(bind)到 JSON 对象列表不适用于属性

python - 如何在 Python 中展平其中一列包含 json 对象的数据框?

ios - CoreData - 在哪里包含对对象的引用?

c# - 如何使用 C# 将字符串中的 "http:"替换为 "https:"?

c# - 如何将对象树反序列化为 DTO?