当前位置: 首页 > 面试题库 >

C#JSON自定义序列化

裴经义
2023-03-14
问题内容

有没有一种方法/库可以让我像GSON自定义序列化程序一样自定义JSON序列化?

这是我想要得到的:

此对象: KeyValuePair(“ Age”,10)myAge

通常会像

“ myAge”:{“ Key”:“ Age”,“ Value”:10}

同时我希望它进行序列化,例如: “年龄”:10 。有任何想法吗?


问题答案:

首先,我建议使用newton json dll。

其次,您需要为KeyValuePair
创建自定义JsonConverter,如下所示:

  public class PairConverter : JsonConverter
  {
    public override bool CanConvert(Type objectType)
    {
       return objectType == typeof(KeyValuePair<string, int>);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
      throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
      var item = (KeyValuePair<string, int>)value;
      writer.WriteValue(item.Value);
      writer.Flush();
    }
  }

然后像这样为“年龄”属性添加JsonConverter属性:

 public class Persons
 {
   [JsonConverter(typeof(PairConverter))]
   public KeyValuePair<string, int> Age { get; set; }
 }

最后,用法示例:

 var persons = new Persons()
 {
    Age = new KeyValuePair<string, int>("Age", 10)
 };
 var json = JsonConvert.SerializeObject(persons); // {Age:10}


 类似资料:
  • 我有以下ORM对象(简化): 每行有: 主键 插入行时的时间戳 computed_values要存储的实际JSONB数据 JSONB来存储计算数据的日期列表。 虽然我对列没有问题,但是对象不能被SQLAlchemy JSON序列化程序序列化。 我的想法是为该列重新定义对象的序列化程序行为。要做到这一点,我必须定义自己的自定义JSON序列化程序,或者使用一些现成的序列化程序,比如orjson。因为我

  • 问题内容: 我的代码结构如下。 和 基本上我正在扫描网站以获取统计信息,例如标题标签,重复标题等。 我正在使用JQuery并向Web服务进行AJAX调用并检索url统计信息,而该过程正在运行以显示到目前为止收集的用户url统计信息,因为扫描大型网站需要花费大量时间。因此,每隔5秒,我就会从服务器检索统计信息。现在的问题是我需要在扫描处理完成时(而不是更新期间)最后发送所有List变量数据。现在发生

  • 问题内容: 我用来将一些对象作为JSON值返回,并且除了一个字段外,它都工作正常。有没有一种简单的方法可以在一个字段中添加内容而无需手动创建整个json模板? 问题答案: Play使用GSON构建JSON字符串。如果您的字段是一种特定的对象类型,则可以通过为该类型提供自定义的序列化来轻松完成此操作。在这里查看文档 http://sites.google.com/site/gson/gson-use

  • 我想以 json 格式序列化一个自定义对象,其中 entryData 是我的域对象的列表。像这样: 下面是我在一次尝试中为获得json输出所做的工作: 但结果是entryData评估为字符串,引号转义: 我也尝试过这样做: 但是我得到了这个例外:

  • 我使用NewtonSoft.json来反序列化这个json

  • 问题内容: 我正在使用Flickr API 。调用该方法时,默认的JSON结果为: 我想将此响应解析为Java对象: JSON属性应按以下方式映射: 不幸的是,我无法找到一种使用Annotations做到这一点的好方法。到目前为止,我的方法是将JSON字符串读入a 并从中获取值。 但是我认为,这是有史以来最不优雅的方式。有没有简单的方法,可以使用注释还是自定义反序列化器? 这对我来说将是很明显的,