本文演示如何使用 命名空间从 JavaScript 对象表示法 (JSON) 进行反序列化。 如果要从 移植现有代码,请参阅如何迁移到 。
反初始化 JSON 的常用方法是创建一个 .NET 类,使其包含属性和表示一个或多个 JSON 属性的字段。 接着,若要从字符串或文件进行反序列化,请调用 方法。 对于泛型重载,.NET 类是泛型类型参数。 对于非泛型重载,传递类的类型作为方法参数。 可以以同步或异步方式反初始化。
会默认忽略类中未表示的任何 JSON 属性。 此外,如果类型上的任何属性是必需的,但不存在于 JSON 有效负载中,反序列化将失败。
以下示例演示如何对 JSON 字符串进行反初始化:
若要使用同步代码从文件进行反序列化,请将文件读入字符串中,如下面的示例中所示:
若要使用异步代码从文件进行反序列化,请调用 方法:
对 JSON 进行反序列化时,以下行为适用:
- 默认情况下,属性名称匹配区分大小写。 可以指定不区分大小写。
- 序列化程序会忽略非公共构造函数。
- 支持反序列化为不可变对象或不具有公共 访问器的属性,但默认未启用。 请参阅不可变类型和记录。
- 默认情况下,支持将枚举作为数字。 可以反序列化字符串枚举字段。
- 默认情况下忽略字段。 可以包含字段。
- 默认情况下,JSON 中的注释或尾随逗号会引发异常。 可以允许注释和尾随逗号。
- 默认最大深度为 64。
当你在 ASP.NET Core 应用中间接使用 System.Text.Json 时,某些默认行为会有所不同。 有关详细信息,请参阅 JsonSerializerOptions 的 Web 默认值。
可以实现自定义转换器以提供内置转换器不支持的功能。
如果有要反序列化的 JSON,但没有反序列化的目标类,则除了手动创建所需的类外,还有其他选项:
直接使用 Utf8JsonReader。
反序列化为文档对象模型 (JSON DOM),并从 DOM 中提取所需的内容。
DOM 允许你导航到 JSON 有效负载的子节,并反序列化单个值、自定义类型或数组。 有关 DOM 的信息,请参阅反序列化 JSON 有效负载的子节。 有关 DOM 的详细信息,请参阅如何搜索子元素的 JsonDocument 和 JsonElement。
使用 Visual Studio 2022 自动生成所需的类:
- 复制需要反序列化的 JSON。
- 创建一个类文件并删除模板代码。
- 选择编辑>选择性粘贴>将 JSON 粘贴为类。
结果是可用于反序列化目标的类。
若要从 UTF-8 进行反序列化,请调用采用 或 的 重载,如下面的示例中所示。 这些示例假设 JSON 处于名为 jsonUtf8Bytes 的字节数组中。
可以在 IDE 中使用 GitHub Copilot,生成 以从 JSON 反序列化。
如果使用的是 Visual Studio 2022 版本 17.8 或更高版本,则可以尝试通过 Visual Studio 中 AI 驱动的 GitHub Copilot 来生成使用 反序列化 JSON 的代码。 在 Copilot Chat 窗口中以提示形式提交问题,如以下示例所示。 还可以在编辑器窗口中使用内联聊天提交提示。
以下文本显示了 Copilot 聊天的示例提示:
生成代码以使用 将 JSON 字符串 {"FirstName":"John","LastName":"Doe","Age":30} 反序列化为等效的 .NET 对象。 映射属性名称和值。 提供示例输出。
可以自定义提示以将 JSON 字符串与符合要求的属性名称和值一起使用。
可以使用聊天功能(如斜杠命令、引用文件、方法或类和线程)来设置意向,并通过已限定范围上下文获取更好的答案。 对于在 IDE 中打开的项目中的现有类,可以使用 提示 GitHub Copilot。
以下输出显示了 Copilot 聊天响应示例:
当 Copilot 返回代码块时,响应包括用于复制代码、将代码插入新文件或预览代码输出的选项。
有关详细信息,请参阅:
- GitHub Copilot 信任中心
- Visual Studio 中的 GitHub Copilot
- VS Code 中的 GitHub Copilot
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/68456.html