我正在将代码从使用名为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中序列化为[]
,我需要做什么?
答案 0 :(得分:2)
您正在处理的dynamic
值实际上是JObject
。它知道如何自动将某些标准类型(如int
s)转换为适当的JValue
对象,但更复杂的东西需要首先明确地转换为某种JToken
。
plugin.floatedPlugins = JArray.FromObject(new List<dynamic>());