尝试将类型类型的对象添加到 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(class),以便系统将其识别为JSON对象?
你的回答非常感谢。
谢谢。
答案 0 :(得分:16)
为了将任意非原始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 here。
或者,您可以使用LINQ和JArray.FromObject()
简化代码,方法是将字符串数组投影到AmountModel
枚举,然后在一次调用中将整个序列序列化为JArray
:
var _JArray = JArray.FromObject(amounts.Select(a => new AmountModel { Amounts = a }));
示例小提琴#2 here。