当前位置: 首页 > 编程语言 > C#

C#JsonConvert.DeserializeAnonymousType失败分享

时间:2023-04-10 17:44:55 C#

C#JsonConvert.DeserializeAnonymousType失败我正在尝试反序列化Azure功能应用程序中的字符串输入。我的意见是[{"messageid":1,"deviceid":"Android","temperature":20.0,"humidity":47.0,"eventprocessedutctime":"2017-12-01T10:35:57.8331048Z","result1":{"temperature":"20","humidity":"47","ScoredLabels":"NO","ScoredProbabilities":"0.450145334005356"}}]我尝试使用此代码运行。#r"Newtonsoft.Json"使用System.Configuration;使用系统文本;使用System.Net;使用Microsoft.Azure.Devices;使用Newtonsoft.Json;//创建代理staticMicrosoft.Azure.Devices.ServiceClientclient=ServiceClient.CreateFromConnectionString(ConfigurationManager.AppSettings["myIoTHub"]);publicstaticasyncTaskRun(stringinput,HttpRequestMessagereq,TraceWriterlog){log.Info($"ASAJob:{input}");vardata=JsonConvert.DeserializeAnonymousType(input,new{deviceid=""});如果(!string.IsNullOrEmpty(data?.deviceid)){stringdeviceId=data.deviceid;//字符串deviceId=data[0].deviceid;log.Info($"设备:{deviceId}");//云到设备消息varmsg=JsonConvert.SerializeObject(new{input});varc2dmsg=newMicrosoft.Azure.Devices.Message(Encoding.ASCII.GetBytes(msg));//发送AMQP消息awaitclient.SendAsync(deviceId,c2dmsg);}returnreq.CreateResponse(HttpStatusCode.NoContent);我感兴趣的是deviceid和ScoredLabels。但现在我什至无法提取其中之一。更多的分数标签由空格组成。result1是AzureMachineLearning返回的结果,所以好像不能改名。您的问题是您的根JSON容器是一个数组,而不是一个对象:如Json.NET文档中所述,需要将JSON数组反序列化为集合,例如.Net数组。这样你就可以做到:vardataArray=JsonConvert.DeserializeAnonymousType(input,new[]{new{deviceid=""}});vardata=dataArray.SingleOrDefault();样品小提琴。如果您发现需要从JSON中提取不止一个或两个属性,您可能需要创建显式类型以进行反序列化。为此,您可以使用http://json2csharp.com/或将JSON粘贴为类。以上就是C#学习教程的全部内容:C#JsonConvert.DeserializeAnonymousType分享失败。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: