无法从JSON转换为C#对象 - 这些类如何工作?

时间:2015-06-12 18:38:05

标签: c# json object

{
 "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转移,那将非常有用。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

您可以使用Microsoft System.Web.Extensions JavaScriptSerializer.DeserializeObject反序列化您的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