gpt4 book ai didi

c# - 转换 Jil 动态反序列化对象数组时缺少无参数构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:44 25 4
gpt4 key购买 nike

在我们的应用程序中,我们在使用动态对象时遇到问题,这是使用 Jil 进行 JSON 反序列化的结果。以下代码只是为了说明问题。

void Main()
{
var modelJson = "{\"Id\":1,\"Options\":[{\"Id\":2,\"Name\":\"Option 1\"}]}";
var modelDto = Jil.JSON.DeserializeDynamic(modelJson);

var options = modelDto.Options;
var optionsIEnumerable = (IEnumerable<Option>)options;

var optionsArray1 = optionsIEnumerable.ToArray();
var optionsArray2 = optionsIEnumerable.Cast<Option>().ToArray();
}

class Model
{
public Model(long id, IEnumerable<Option> options = null)
: this()
{
this.Id = id;
this.Options = options;
}

private Model() => this.Options = new List<Option>();

public long Id { get; }

public IEnumerable<Option> Options { get; }
}

class Option
{
public Option(long id, string name)
{
this.Id = id;
this.Name = name;
}

private Option()
{
}

public long Id { get; private set; }

public string Name { get; private set; }
}

Main 中的最后两行都导致 MissingMethodException,表示没有无参数构造函数。但是 ModelOption 都有一个无参数的构造函数(此时我什至没有使用 Model)。

如何将属性 modelDto.Options 转换为 Option[]

最佳答案

这不是您问题的确切答案,但您可以使用模型轻松反序列化此 JSON。

static void Main(string[] args)
{
var modelJson = "{\"Id\":1,\"Options\":[{\"Id\":2,\"Name\":\"Option 1\"}]}";
var modelDto = Jil.JSON.Deserialize<ModelNew>(modelJson);

ShowObject(modelDto);
Console.Read();
}

class ModelNew
{
public int Id { get; set; }
public Option[] Options { get; set; }
public ModelNew() {}
}

class Option
{
public long Id { get; private set; }
public string Name { get; private set; }
private Option() {}
}

编辑:

要查看对象,请使用此函数:

static void ShowObject(ModelNew obj)
{
Console.WriteLine("Id: " + obj.Id);
foreach (var op in obj.Options)
{
Console.WriteLine("Id: " + op.Id);
Console.WriteLine("Name: " + op.Name);
}
}

输出:
编号:1
编号:2
名称:选项 1

关于c# - 转换 Jil 动态反序列化对象数组时缺少无参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50964859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com