Nies Nies - 15 days ago 9
JSON Question

Could not determine JSON object type for type "Class"

I got the following error while trying to add an object of type class to the JArray.

Could not determine JSON object type for type "Class"


Here is the code that I am using:

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;
}


And I call it like the following when run the program:

_JArray = NArray(repository);

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


How can I convert the AmountModel (class) inside of _JArray (JArray), to be recognized by the system as JSON object?

Your answer much appreciated.

Thank you.

dbc dbc
Answer

In order to add an arbitrary non-primitive POCO to a JArray, you must explicitly serialize it, using one of the overloads of 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;

Note also that I corrected the end condition in your for loop. It was i <= amounts.Length, which resulted in an IndexOutOfRangeException exception. Sample fiddle.