Azure Api服务上的JSON反序列化失败 问题
我有一个非常大的JSON文件,需要反序列化为.NET对象。为了实现这一点,我使用Newtonsoft.JsonAzure Api服务上的JSON反序列化失败 问题,json,azure,json-deserialization,azure-api-apps,Json,Azure,Json Deserialization,Azure Api Apps,我有一个非常大的JSON文件,需要反序列化为.NET对象。为了实现这一点,我使用Newtonsoft.JsonJsonTextReader。在本地计算机上,反序列化过程运行时不会出错,并且.NET对象完全由文件中的值填充。当我将代码发布到Azure Api服务时,反序列化将无法工作 尝试解析本地工作的同一文件时,我遇到以下异常: Newtonsoft.Json.JsonSerializationException:无法将当前Json数组(例如[1,2,3])反序列化为类型“Template”,因
JsonTextReader
。在本地计算机上,反序列化过程运行时不会出错,并且.NET对象完全由文件中的值填充。当我将代码发布到Azure Api服务时,反序列化将无法工作
尝试解析本地工作的同一文件时,我遇到以下异常:
Newtonsoft.Json.JsonSerializationException:无法将当前Json数组(例如[1,2,3])反序列化为类型“Template”,因为该类型需要一个Json对象(例如{“name”:“value”})才能正确反序列化。
要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”}),或将反序列化类型更改为数组或实现可从JSON数组反序列化的集合接口(例如ICollection、IList)类似列表的类型。还可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组反序列化。
路径“p2[0]。p35[1]。p125.p35[2]。p125.p36[0]。p200',第1行,位置35681
我检查了对象结构,并将其与JSON文件进行了比较。显示的路径指向JSON中的一个数组,该数组应转换为.NET对象中的对象集合ICollection Blocks
补充资料
有趣的是,它有时也会在代码发布后直接在Azure Api服务中工作。当发生异常时,重新启动Api服务将没有帮助,但再次发布相同的代码将修复错误,并且文件将正确反序列化。迟早错误会再次出现,我必须再次发布代码以消除它
在使用JsonTextReader
对JSON进行反序列化之前,我使用了JsonConvert.DeserializeObject(fileAsString)
,它工作正常,但将整个文件作为字符串获取会导致更大文件的OutOfMemory异常
代码
这是反序列化对象的代码。JsonPropertyShortener
ContractResolver用于用较短的名称替换JSON文件中的属性,以减小文件大小,并在反序列化时将其映射回正确的属性名称
using (var sr = new StreamReader(pkgStream, Encoding.UTF8))
{
using (var jsonTextReader = new JsonTextReader(sr))
{
serializer.NullValueHandling = NullValueHandling.Include;
serializer.DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate;
serializer.ContractResolver = JsonPropertyShortener.GetDeserializer(mapping);
serializer.Formatting = Formatting.None;
serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
return serializer.Deserialize<Package>(jsonTextReader);
}
}
使用(var sr=newstreamreader(pkgStream,Encoding.UTF8))
{
使用(var jsonTextReader=new jsonTextReader(sr))
{
serializer.NullValueHandling=NullValueHandling.Include;
serializer.DefaultValueHandling=DefaultValueHandling.IgnoreAndPopulate;
serializer.ContractResolver=JsonPropertyShortener.GetDeserializer(映射);
serializer.Formatting=格式化.None;
serializer.ReferenceLoopHandling=ReferenceLoopHandling.Ignore;
返回序列化程序。反序列化(jsonTextReader);
}
}
问题
当反序列化在本地机器上正常工作时,为什么反序列化在Azure Api服务中不能正常工作
我能做些什么让它在Azure Api服务上工作
奖励:为什么发布代码会在一段时间内缓解问题?我有同样的问题:我有同样的问题: