Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Api服务上的JSON反序列化失败 问题_Json_Azure_Json Deserialization_Azure Api Apps - Fatal编程技术网

Azure Api服务上的JSON反序列化失败 问题

Azure 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”,因

我有一个非常大的JSON文件,需要反序列化为.NET对象。为了实现这一点,我使用Newtonsoft.Json
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服务上工作

奖励:为什么发布代码会在一段时间内缓解问题?

我有同样的问题:我有同样的问题: