我正在使用private string RunProcess(string command, string args)
{
StringBuilder sb = new StringBuilder();
Process p = new Process();
p.StartInfo.FileName = command;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.Arguments = args;
p.OutputDataReceived += (sender, eventArgs) => { sb.Append(eventArgs.Data); };
p.Start();
p.WaitForExit();
return sb.ToString();
}
。在调试我的设备时,我得到了正确的结果,但以下是控制器返回的结果。好像Jackson不能反序列化SetValuedMap。
Map<String, SetValuedMap<String, CustomerDomain>>
答案 0 :(得分:1)
这是因为诸如Map
之类的数据结构在反序列化时需要一些特殊的逻辑,并且任何将POJO转换为JSON的库都对扩展Map
接口的对象进行了某些处理。
SetValuedMap
也需要进行此处理,因为不能从字段等中直接读取值,而是使用put(..)
和get(..)
方法(与{{1 }}。
但是:Map
没有实现SetValuedMap
接口。例如,它在Map
方法返回值类型上有所不同,因此,它们在这种意义上是“不兼容的”。它是来自Apache公用程序的实用程序类,而不是“标准Java”。
因此,杰克逊可能不知道如何反序列化此类。您可能需要编写自定义的反序列化器,例如-put()
。