如何将C#空列表序列化为JSON空数组?

时间:2016-08-16 19:26:28

标签: c# arrays json list json.net

我正在将代码从使用名为floatedPlugin的属性转换为使用名为floatedPlugins的属性(请注意's')。在此代码运行后,我根本不需要存在floatedPlugin。现有的floatedPlugin值可以是对象,也可以是null。如果是null,我想将floatedPlugins设置为空数组。如果floatedPlugin是一个对象,我想将floatedPlugins设置为仅包含该对象的数组。

foreach (var _case in context.Cases)
{
    dynamic data = JsonConvert.DeserializeObject(_case.Data);

    foreach (var row in data.myRows)
    {
        foreach (var plugin in row.plugins)
        {
            if (plugin.floatedPlugin == null)
            {
                 plugin.floatedPlugins = new List<dynamic>(); // Code breaks here
            }
            else
            {
                 plugin.floatedPlugins = new List<dynamic>(plugin.floatedPlugin);
            }
        }
    }
    _case.Data = JsonConvert.SerializeObject(data);
}

尝试运行时遇到的错误是

Could not determine JSON object type for type System.Collections.Generic.List`1[System.Object].

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Could not determine JSON object type for type System.Collections.Generic.List`1[System.Object].

如何让floatedPlugins在生成的序列化JSON中序列化为[],我需要做什么?

1 个答案:

答案 0 :(得分:2)

您正在处理的dynamic值实际上是JObject。它知道如何自动将某些标准类型(如int s)转换为适当的JValue对象,但更复杂的东西需要首先明确地转换为某种JToken

plugin.floatedPlugins = JArray.FromObject(new List<dynamic>());