【问题标题】:Deserializing a Json message from an IoT Device in C#在 C# 中反序列化来自 IoT 设备的 Json 消息
【发布时间】:2019-06-24 20:49:02
【问题描述】:

我是 C# 新手,我正在尝试反序列化来自运行 Azure IoT Edge 的 Raspberry Pi 的消息(我正在使用带有 Newtonsoft.Json 和 Newtonsoft.Json.Linq 的 Visual Studio 2019)。但是,我无法从消息中检索值。

我尝试将其转换为数组和对象,然后调用值。

消息如下:

messageBody = "[{\"Tag\": \"Apple\", \"Probability\": 0.0012170099653303623}]"

我使用以下几行来反序列化它:

JArray jsonArray = JArray.Parse(messageBody);
var jsonObjects = jsonArray.OfType<JObject>().ToList();

我想将属性标签和概率分别分配给水果和概率。

string fruit = jsonObjects.Tag;
var probability = jsonObjects.Probability;

但是,我收到错误消息“列表不包含概率的定义”和“列表不包含标签的定义”

【问题讨论】:

  • 创建一个带有字符串和小数属性的新类,使用相同的名称(标签和概率)。然后使用 JsonConvert.DeserializeObject(messageBody)

标签: c# arrays json json-deserialization


【解决方案1】:

你可以添加新的 C# 类

public class JsonModel{
public string Tag {get;set;}
public double Probability {get;set;}
}

var model = JsonConvert.DeserializeObject<List<JsonModel>>(message);

【讨论】:

  • 如果只有一条记录,我认为不需要列表。
  • json 正文是数组格式 [{}] 而不是对象 {}
  • 谢谢你,因为我的消息是一个 Json 数组。这会输出一个列表,然后允许调用此类列表的每个项目。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2019-09-21
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多