从 JSON 对象转换为 C# 对象时遇到问题 - 类如何工作

本文关键字:对象 何工作 工作 问题 转换 JSON 遇到 | 更新日期: 2023-09-27 17:55:58

{
 "device": "Lamp",
 "type": "Switch",
 "commands": [
  {
   "name": "turn Lamp on",
   "command": "/api/Lamp/ON"
  },
  {
   "name": "turn Lamp off",
   "command": "/api/Lamp/OFF"
  }
 ]  
}

我需要将 JSON 反序列化为 (n) 个 C# 对象。我在理解如何格式化 C# 代码时遇到了麻烦。我用了 json2csharp.com,想出了这个:

 public class Command
 {
  public string name { get; set; }
  public string command { get; set; }
 }
 public class RootObject
 {
  public string device { get; set; }
  public string type { get; set; }
  public List<Command> commands { get; set; }
 }

但是,我不完全理解这两个不同的对象。这是返回 command1 空值的 C# 代码:

HttpClient client = new HttpClient();
string url = "http://localhost:8080/api/whatcanisay/";
string json = await client.GetStringAsync(url);
Commands command1 = JsonConvert.DeserializeObject<Commands>(json);
TestOutput.Text = command1.command;

如果有人可以解释这些类以及它们如何从 JSON 转移过来,那将非常有帮助。

从 JSON 对象转换为 C# 对象时遇到问题 - 类如何工作

这是

JSON.net,它是.NET最流行的JSON框架之一。

基本上,它的工作方式是定义与 JSON 架构匹配的类,然后将 json 字符串转换为 C# 对象。

目的是使解析 JSON 数据变得更加容易,否则您必须手动将每个 JSON 值映射到对象属性。

这是一个开源项目,所以请随意阅读代码

https://github.com/JamesNK/Newtonsoft.Json

您可以使用

System.Web.Extensions 和 JavaScriptSerializer.DeserializeObject Microsoft反序列化 JSON 字符串。

首先,必须具有与 JSON 文件关联的类。若要创建类,请选择 JSON 示例数据,然后在 Visual Studio 中转到"编辑/粘贴特殊"/"将 JSON 粘贴为类"。

接下来,使用此示例。

string json = await client.GetStringAsync(url);
var root = new JavaScriptSerializer().Deserialize<RootObject>(json);
// root object contains all JSON data.

或者您也可以使用完整的 JSON 库,例如 http://www.newtonsoft.com/json