{
"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转移,那将非常有用。
答案 0 :(得分:1)
这是JSON.net,它是.NET最流行的JSON框架之一。
基本上它的工作方式是定义与JSON模式匹配的类,然后将json字符串转换为C#对象。
目的是使解析JSON数据变得更容易,否则您必须手动将每个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