相关疑难解决方法(0)

在JSON.NET中为反序列化转换接口

我正在尝试建立一个读取器,它将从各种网站中获取JSON对象(想想信息抓取)并将它们转换为C#对象.我目前正在使用JSON.NET进行反序列化过程.我遇到的问题是它不知道如何处理类中的接口级属性.所以有些本质:

public IThingy Thing
Run Code Online (Sandbox Code Playgroud)

会产生错误:

无法创建IThingy类型的实例.Type是接口或抽象类,无法实例化.

让它成为ITINGy而不是Thingy是相对重要的,因为我正在处理的代码被认为是敏感的,单元测试非常重要.对于像Thingy这样的完全成熟的对象,不可能对原子测试脚本的对象进行模拟.它们必须是一个接口.

我一直在研究JSON.NET的文档已有一段时间了,我在这个网站上找到的与此相关的问题都来自一年多以前.有帮助吗?

此外,如果重要,我的应用程序是用.NET 4.0编写的.

.net c# json json.net

116
推荐指数
10
解决办法
11万
查看次数

System.Text.Json 中是否可以进行多态反序列化?

我尝试从 Newtonsoft.Json 迁移到 System.Text.Json。我想反序列化抽象类。Newtonsoft.Json 为此具有 TypeNameHandling。有没有办法通过.net core 3.0 上的 System.Text.Json 反序列化抽象类?

c# json .net-core-3.0 system.text.json

60
推荐指数
6
解决办法
3万
查看次数

是否有一种简单的方法可以在 System.Text.Json 的自定义转换器中手动序列化/反序列化子对象?

注意:我正在使用 Microsoft 的新产品System.Text.JsonJson.NET因此请确保答案相应地解决了这个问题。

考虑这些简单的 POCO:

interface Vehicle {}

class Car : Vehicle {
    string make          { get; set; }
    int    numberOfDoors { get; set; }
}

class Bicycle : Vehicle {
    int frontGears { get; set; }
    int backGears  { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

汽车可以像这样用 JSON 表示......

{
  "make": "Smart",
  "numberOfDoors": 2
}
Run Code Online (Sandbox Code Playgroud)

自行车可以这样表示......

{
  "frontGears": 3,
  "backGears": 6
}
Run Code Online (Sandbox Code Playgroud)

很直接。现在考虑这个 JSON。

[
  {
    "Car": {
      "make": "Smart",
      "numberOfDoors": 2
    }
  },
  {
    "Car": {
      "make": …
Run Code Online (Sandbox Code Playgroud)

c# json system.text.json

7
推荐指数
1
解决办法
3277
查看次数

标签 统计

c# ×3

json ×3

system.text.json ×2

.net ×1

.net-core-3.0 ×1

json.net ×1