当前位置: 首页 > news >正文

笔记:Newtonsoft.Json 序列化接口集合

        在使用 Newtonsoft.Json 序列化接口集合时,一个常见的挑战是如何处理接口的具体实现,因为接口本身并不包含关于要实例化哪个具体类的信息。为了正确序列化和反序列化接口集合,你需要提供一些额外的信息或使用自定义的转换器来指导 Newtonsoft.Json 如何处理这些情况。


序列化接口集合


假设我们有以下接口和实现类:

public interface IAnimal
{string Name { get; }
}public class Dog : IAnimal
{public string Name { get; set; }public string Breed { get; set; }
}public class Cat : IAnimal
{public string Name { get; set; }public string Color { get; set; }
}

我们想要序列化一个包含 IAnimal 对象的集合:

List<IAnimal> animals = new List<IAnimal>
{new Dog { Name = "Rex", Breed = "Golden Retriever" },new Cat { Name = "Whiskers", Color = "Black" }
};

使用 TypeNameHandling


一种简单的方法是使用 JsonSerializerSettings 的 TypeNameHandling 属性。这会在 JSON 中包含类型信息,从而允许正确的反序列化。

string json = JsonConvert.SerializeObject(animals, new JsonSerializerSettings
{TypeNameHandling = TypeNameHandling.All
});List<IAnimal> deserializedAnimals = JsonConvert.DeserializeObject<List<IAnimal>>(json, new JsonSerializerSettings
{TypeNameHandling = TypeNameHandling.All
});

这种方法会在 JSON 中添加额外的 $type 属性来指示具体的实现类型,从而使反序列化过程能够实例化正确的类。

注意事项


•    使用 TypeNameHandling 时要小心,因为它可能会引入安全风险,特别是在处理不受信任的输入数据时。确保理解这些风险并适当地限制类型。
•    自定义 JsonConverter 提供了更大的灵活性,但也需要更多的工作来正确实现。
•    选择哪种方法取决于你的具体需求,包括安全性、灵活性和易用性的考虑。

System.Windows.Controls 命名空间 | Microsoft Learn

http://www.lryc.cn/news/393517.html

相关文章:

  • 【Unity设计模式】✨使用 MVC 和 MVP 编程模式
  • CDH安装和配置流程
  • SpringMVC:SpringMVC执行流程
  • 如何在前端网页实现live2d的动态效果
  • 昇思25天学习打卡营第15天|linchenfengxue
  • 软考中级数据库系统工程师备考经验分享
  • Centos7删除MariaDB
  • 【Docker系列】Docker 镜像构建中的跨设备移动问题及解决方案
  • C++友元函数和友元类的使用
  • 黑马苍穹外卖技术亮点 详情
  • Python酷库之旅-第三方库Pandas(005)
  • javascripr如何设计弹出输入框并在网页内输出输入内容
  • gitee代码初次上传步骤
  • android调用openssl库
  • Hugging face Transformers(3)—— Tokenizer
  • kubernetes集群部署:环境准备及master节点部署(二)
  • 第8篇 智能合约的商业应用场景解析
  • Zabbix 配置grafana对接
  • 三相感应电机的建模仿真(2)基于ABC相坐标系S-Fun的仿真模型
  • 开源全新H5充值系统源码/自定义首页+充值页面/灵活对接上游渠道接口
  • Linux查看文件的行数,字数,字节数
  • 【IO】文件操作
  • 代码随想录算法训练营第74天:路径总结[1]
  • 用 Emacs 写代码有哪些值得推荐的插件
  • 自定义注解-手机号验证注解
  • 华为od-C卷200分题目5 -项目排期
  • 如何使用Pip从Git仓库安装Python包:深入探索远程依赖管理
  • 计算机专业怎么选择电脑
  • 当前国内可用的docker加速器搜集 —— 筑梦之路
  • 【腾讯内推】腾讯2025校招/青云计划/社招——长期有效