【发布时间】:2018-11-30 13:39:49
【问题描述】:
在我们的应用程序中,我们在使用动态对象时遇到了问题,这是使用 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,表示没有无参数构造函数。但是Model 和Option 都有一个无参数的构造函数(此时我什至没有使用Model)。
如何将属性modelDto.Options 转换为Option[]?
【问题讨论】:
-
我猜你是否将鼠标悬停在
modelDto旁边的var上,它会显示dynamic? -
是的,它确实显示
dynamic。
标签: c# arrays json dynamic jil