相关疑难解决方法(0)

Json.net序列化/反序列化派生类型?

json.net(newtonsoft)
我正在查看文档,但我找不到任何关于这个或最好的方法来做到这一点.

public class Base
{
    public string Name;
}
public class Derived : Base
{
    public string Something;
}

JsonConvert.Deserialize<List<Base>>(text);
Run Code Online (Sandbox Code Playgroud)

现在我在序列化列表中有Derived对象.如何反序列化列表并返回派生类型?

c# serialization json json.net

84
推荐指数
4
解决办法
9万
查看次数

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万
查看次数

JSON.net ContractResolver与JsonConverter

我已经和JSON.net合作了一段时间.我已经编写了自定义转换器和自定义合同解析器(通常来自修改SO和Newtonsoft网站上的示例),它们工作正常.

除了例子之外,我面临的挑战是,我什么时候应该使用其中一个(或两个)进行处理.根据我自己的经验,我基本上已经确定合同解决方案更简单了,所以如果我可以用他们做我需要的东西,我会这样做; 否则,我使用自定义JsonConverters.但是,我进一步知道两者有时一起使用,因此概念变得更加不透明.

问题:

  1. 是否存在区分何时用户与其他用户的来源?我发现Newtonsoft文档不清楚这两者是如何区分的,或者何时使用其中一种.
  2. 两者之间的排序管道是什么?

json.net

56
推荐指数
1
解决办法
1万
查看次数

将JSON反序列化为抽象类

我试图将JSON字符串反序列化为具体类,该类继承自抽象类,但我无法使其工作.我用Google搜索并尝试了一些解决方案,但它们似乎也没有用.

这就是我现在拥有的:

abstract class AbstractClass { }

class ConcreteClass { }

public AbstractClass Decode(string jsonString)
{
    JsonSerializerSettings jss = new JsonSerializerSettings();
    jss.TypeNameHandling = TypeNameHandling.All;
    return (AbstractClass)JsonConvert.DeserializeObject(jsonString, null, jss);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试转换生成的对象,它就不起作用.

我不使用DeserializeObject的原因是我有很多具体的类.

有什么建议?

  • 我正在使用Newtonsoft.Json

c# serialization json json.net

35
推荐指数
4
解决办法
3万
查看次数

如何使用Json.NET反序列化可以是两种不同数据类型的JSON属性

我正在使用Json.NET进行我正在进行的项目.从外部API,我接收的JSON具有作为对象的属性,但是当它们为空时,传递"false".

例如:

data: {
    supplier: {
        id: 15,
        name: 'TheOne'
    }
}
Run Code Online (Sandbox Code Playgroud)

也可能是:

data: {
    supplier: false
}
Run Code Online (Sandbox Code Playgroud)

我应该如何定义供应商属性,以便将供应商反序列化为Supplier对象或为null.

现在我有:

public class Data {
   [JsonProperty("supplier")]
   public SupplierData Supplier { get; set; }
}
public class SupplierData {
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("name")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是现在当供应商的值为'false'时尝试反序列化时,它会失败.当JSON值为"false"时,我希望Supplier属性为null.

我希望有人知道如何做到这一点.谢谢.

c# serialization json json.net

22
推荐指数
1
解决办法
2万
查看次数

什么是@JsonTypeInfo和@JsonSubTypes用于杰克逊

在jackson中使用for的@JsonTypeInfo和@JsonSubTypes注释是什么?

public class Lion extends Animal {

private String name;

@JsonCreator
public Lion(@JsonProperty("name") String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public String getSound() {
    return "Roar";
}

public String getType() {
    return "carnivorous";
}

public boolean isEndangered() {
    return true;
}

@Override
public String toString() {
    return "Lion [name=" + name + ", getName()=" + getName() + ", getSound()=" + getSound() + ", getType()=" + getType() + ", isEndangered()="
            + isEndangered() + "]"; …
Run Code Online (Sandbox Code Playgroud)

java serialization jackson deserialization

20
推荐指数
1
解决办法
2万
查看次数

使用Json.Net失败的多态JSON反序列化

我正在尝试使用自定义将一些JSON反序列化为各种子类 JsonConverter

我几乎遵循了一点.

我的抽象基类:

abstract class MenuItem
{
    public String Title { get; set; }
    public String Contents { get; set; }
    public List<MenuItem> Submenus { get; set; }
    public String Source { get; set; }
    public String SourceType { get; set; }
    public abstract void DisplayContents();
}
Run Code Online (Sandbox Code Playgroud)

而我的派生JsonConverter:

class MenuItemConverter : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return typeof(MenuItem).IsAssignableFrom(objectType);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            JObject …
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net

15
推荐指数
1
解决办法
4158
查看次数

如何反序列化不同类型的集合?

我有一个看起来像这样的JSON提要(我删除了一些这个例子不需要的字段):

{
  "total_count": 2,
  "num_pages": 1,
  "current_page": 1,
  "balance": {
    "amount": "0.00001199",
    "currency": "BTC"
  },
  "transactions": [
    {
      "transaction": {
        "id": "5018f833f8182b129c00002f",
        "created_at": "2012-08-01T02:34:43-07:00",
        "sender": {
          "id": "5011f33df8182b142400000e",
          "name": "User Two",
          "email": "user2@example.com"
        },
        "recipient": {
          "id": "5011f33df8182b142400000a",
          "name": "User One",
          "email": "user1@example.com"
        }
      }
    },
    {
      "transaction": {
        "id": "5018f833f8182b129c00002e",
        "created_at": "2012-08-01T02:36:43-07:00",
        "hsh": "9d6a7d1112c3db9de5315b421a5153d71413f5f752aff75bf504b77df4e646a3",
        "sender": {
          "id": "5011f33df8182b142400000e",
          "name": "User Two",
          "email": "user2@example.com"
        },
        "recipient_address": "37muSN5ZrukVTvyVh3mT5Zc5ew9L9CBare"
      }
    }
 ]
}
Run Code Online (Sandbox Code Playgroud)

有两种类型的交易在这个饲料:有一个内部事务recipient有一个和外部交易hshrecipient_address.

我创建了以下类来容纳这个结构:

UML

因此,我们为所有分页结果( …

.net c# json json.net json-deserialization

8
推荐指数
1
解决办法
571
查看次数

如何在 appsettings.json 中加载多态对象

有没有办法以appsettings.json强类型的方式读取多态对象?下面是我需要的一个非常简化的例子。

我有多个应用程序组件,Features在此处命名。这些组件由工厂在运行时创建。我的设计意图是每个组件都由其单独的强类型选项配置。在这个例子中,FileSizeCheckerOptionsPersonCheckerOption是这些的实例。每个功能都可以使用不同的选项多次包含。

但是使用现有的 ASP.NET Core 配置系统,我无法读取多态强类型选项。如果设置是由 JSON 反序列化器读取的,我可以使用类似这样的东西。但这不是appsettings.json,其中选项只是键值对。

appsettings.json

{
    "DynamicConfig":
    {
        "Features": [
            {
                "Type": "FileSizeChecker",
                "Options": { "MaxFileSize": 1000 }
            },
            {
                "Type": "PersonChecker",
                "Options": {
                    "MinAge": 10,
                    "MaxAge": 99
                }
            },
            {
                "Type": "PersonChecker",
                "Options": {
                    "MinAge": 15,
                    "MaxAge": 20
                }
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

启动文件

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<FeaturesOptions>(Configuration.GetSection("DynamicConfig"));
        ServiceProvider serviceProvider = services.BuildServiceProvider();
        // try to load settings in strongly …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism json json-deserialization asp.net-core

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

是否可以将Json.Net设置为忽略$ type?

在json反序列化攻击中观看此视频,它显示了这一点json,可用于在任何反序列化它的应用程序上触发任意代码执行.

使用ObjectDataProvider执行任意代码

现在在我的应用程序中,我甚至从未使用过类型的json.我总是反序列化为动态对象或JObjects.在$type今天早上另一次无关的谈话之前,我甚至都不知道这个房产.

在我的json设置中是否有一种方法可以告诉它永远不会写或读取此属性?这不是我想要的东西.

c# json json.net

6
推荐指数
1
解决办法
1742
查看次数