【发布时间】:2017-12-07 12:37:05
【问题描述】:
使用
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
以下正确反序列化我的 JSON 数组:
public List<PrintJobTranslation> Translations
以下不是:
public PrintJobTranslations Translations
与
public class PrintJobTranslations : List<PrintJobTranslation>
{
public string GetTranslation(string Key, string defaultValue)
{
var translation = this.FirstOrDefault(x => x.Key == Key);
if (translation == null) return defaultValue;
return translation.Translation;
}
}
它会抛出错误:
System.Collections.Generic.Dictionary`2[System.String,System.Object] ist kein Wert des Typs Print.printJob.PrintJobTranslation und kann in diesergenerischen Sammlung nicht verwendet werden。参数名称:值
我没有找到准确的翻译,但应该是这样的英文:
System.Collections.Generic.Dictionary`2[System.String,System.Object] 不是 Print.printJob.PrintJobTranslation 类型的值,不能在通用集合中使用。参数名称:值
如何让 JSON 正确反序列化?
【问题讨论】:
-
我会尝试用
NewtonSoft.Json来做。甚至微软也不推荐使用JavascriptSerializer -
不要使用已弃用的 JavaScriptSerializer。甚至 ASP.NET Web API 也使用 Json.NET。您发布的代码无论如何都不会反序列化任何内容。当您显示 List
时,错误本身是指 dictionary。输入、反序列化代码和 full 异常(包括其调用堆栈)在哪里?您可以通过 Exception.ToString()轻松获取。 -
@CamiloTerevinto 我可能不会向此 DLL 添加外部依赖项。 NewtonSoft.Json 是否适用于所有 .NET 安装,以及如何确保使用正确的版本?我们始终在我们使用它的产品中提供正确的版本。
-
如果您发布了完整示例(实际 json、PrintJobTranslation 定义、反序列化方式) - 会更容易回答。
-
看起来这可能是
JavaScriptSerializer中的错误或限制,请参阅c# Deserialize JSON list of object error,它在 2011 年报告了类似问题;公认的答案是只使用List<T>进行反序列化。
标签: c# json serialization