小编典典

无法确定类型“类别”的JSON对象类型

json

尝试将类类型的对象添加到 JArray时 遇到以下错误。

Could not determine JSON object type for type "Class"

这是我正在使用的代码:

private dynamic _JArray = null

private JArray NArray(Repository repository)
    {
        _JArray = new JArray();

        string[] amounts = repository.Amounts.Split('|');

        for (int i = 0; i <= amounts.Length; i++)
        {
            _JArray.Add(
                new AmountModel
                {
                    Amounts = amounts[i],
                });
        }

        return _JArray;
    }

public class AmountModel
{
    public string Amounts;
}

在运行程序时,我将其命名如下:

_JArray = NArray(repository);

Console.WriteLine(JsonConvert.SerializeObject(_JArray));

如何转换 _JArray(JArray) 内的 AmountModel(类) 以被系统识别为JSON对象?

非常感谢您的回答。

谢谢。


阅读 275

收藏
2020-07-27

共1个答案

小编典典

为了将任意非原始POCO添加到中JArray,您必须使用以下重载之一显式序列化它JToken.FromObject()

_JArray = new JArray();

string[] amounts = repository.Amounts.Split('|');

for (int i = 0; i < amounts.Length; i++)
{
    _JArray.Add(JToken.FromObject(
        new AmountModel
        {
            Amounts = amounts[i],
        }));
}

return _JArray;

(另请注意,我已更正了for循环中的结束条件。它是i <= amounts.Length,导致出现IndexOutOfRangeException异常。)

工作样本.Net 在这里#1 。

另外,您可以使用LINQ简化代码,方法JArray.FromObject()是将字符串数组投影为AmountModel可枚举,然后将整个序列序列化为JArray一个调用:

var _JArray = JArray.FromObject(amounts.Select(a => new AmountModel { Amounts = a }));

在这里样本小提琴2 。

2020-07-27