使用来自 URL 的 JSON.NET 反序列化 JSON 数组
Deserialize JSON Array with JSON.NET from URL
我是第一次使用 json,在互联网上搜索后我找到了 JSON.NET。我认为它很容易使用,但我有一个问题。每次我使用代码时都会收到警告:
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'JSON_WEB_API.Machine' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
这是 URL 中的 JSON 数组:
[
{
"id": "MachineTool 1",
"guid": "not implemented",
"name": "Individueller Maschinenname",
},
{
"id": "MachineTool 2",
"guid": "not implemented",
"name": "Individueller Maschinenname",
}
]
这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Runtime.Serialization;
using Newtonsoft.Json;
namespace JSON_WEB_API
{
class Program
{
static void Main()
{
string json = new WebClient().DownloadString("http://localhost:12084/Machines?format=json");
Console.WriteLine(json);
//string json = @"[{"id":"MachineTool 1","guid":"not implemented","name":"Individueller Maschinenname"},{"id":"MachineTool 2","guid":"not implemented","name":"Individueller Maschinenname"}]
//Console.WriteLine(json)";
Machine machine = JsonConvert.DeserializeObject<Machine>(json);
Console.WriteLine(machine.id);
Console.Read();
}
}
[DataContract]
class Machine
{
[DataMember]
internal string id { get; set; }
[DataMember]
internal string guid { get; set; }
[DataMember]
internal string name { get; set; }
}
}
将其转换为机器列表
var machine = JsonConvert.DeserializeObject<List<Machine>>(json);
访问数据运行 机器上的 foreach。
foreach(var data in machine )
{
Console.WriteLine(data.id);
}
看看你的JSON:
[
{
"id": "MachineTool 1",
"guid": "not implemented",
"name": "Individueller Maschinenname",
},
{
"id": "MachineTool 2",
"guid": "not implemented",
"name": "Individueller Maschinenname",
}
]
这是一个 JSON 数组。
并查看您的 JSON 转换代码:
Machine machine = JsonConvert.DeserializeObject<Machine>(json);
您正在机器对象中转换它。
但是您有 json 数组作为响应。
您需要将 JSON 转换代码更改为类似的代码:
要将其转换为数组,请使用此代码:
Machine[] machines = JsonConvert.DeserializeObject.Deserialize<Machine[]>(json);
要在列表中转换它,请使用此代码:
List<Machine> machines = JsonConvert.DeserializeObject<List<Machine>>(json);
用
装饰你的模型
[DataContract]
class Machine
{
[DataMember]
[JsonProperty("id ")]
internal string id { get; set; }
[DataMember]
[JsonProperty("guid ")]
internal string guid { get; set; }
[DataMember]
[JsonProperty("name")]
internal string name { get; set; }
}
public class MachineJson
{
[JsonProperty("machine")]
public Machine Machine{ get; set; }
}
var machine = JsonConvert.DeserializeObject<List<MachineJson>>(json);
我是第一次使用 json,在互联网上搜索后我找到了 JSON.NET。我认为它很容易使用,但我有一个问题。每次我使用代码时都会收到警告:
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'JSON_WEB_API.Machine' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
这是 URL 中的 JSON 数组:
[
{
"id": "MachineTool 1",
"guid": "not implemented",
"name": "Individueller Maschinenname",
},
{
"id": "MachineTool 2",
"guid": "not implemented",
"name": "Individueller Maschinenname",
}
]
这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Runtime.Serialization;
using Newtonsoft.Json;
namespace JSON_WEB_API
{
class Program
{
static void Main()
{
string json = new WebClient().DownloadString("http://localhost:12084/Machines?format=json");
Console.WriteLine(json);
//string json = @"[{"id":"MachineTool 1","guid":"not implemented","name":"Individueller Maschinenname"},{"id":"MachineTool 2","guid":"not implemented","name":"Individueller Maschinenname"}]
//Console.WriteLine(json)";
Machine machine = JsonConvert.DeserializeObject<Machine>(json);
Console.WriteLine(machine.id);
Console.Read();
}
}
[DataContract]
class Machine
{
[DataMember]
internal string id { get; set; }
[DataMember]
internal string guid { get; set; }
[DataMember]
internal string name { get; set; }
}
}
将其转换为机器列表
var machine = JsonConvert.DeserializeObject<List<Machine>>(json);
访问数据运行 机器上的 foreach。
foreach(var data in machine )
{
Console.WriteLine(data.id);
}
看看你的JSON:
[
{
"id": "MachineTool 1",
"guid": "not implemented",
"name": "Individueller Maschinenname",
},
{
"id": "MachineTool 2",
"guid": "not implemented",
"name": "Individueller Maschinenname",
}
]
这是一个 JSON 数组。
并查看您的 JSON 转换代码:
Machine machine = JsonConvert.DeserializeObject<Machine>(json);
您正在机器对象中转换它。
但是您有 json 数组作为响应。 您需要将 JSON 转换代码更改为类似的代码:
要将其转换为数组,请使用此代码:
Machine[] machines = JsonConvert.DeserializeObject.Deserialize<Machine[]>(json);
要在列表中转换它,请使用此代码:
List<Machine> machines = JsonConvert.DeserializeObject<List<Machine>>(json);
用
装饰你的模型[DataContract]
class Machine
{
[DataMember]
[JsonProperty("id ")]
internal string id { get; set; }
[DataMember]
[JsonProperty("guid ")]
internal string guid { get; set; }
[DataMember]
[JsonProperty("name")]
internal string name { get; set; }
}
public class MachineJson
{
[JsonProperty("machine")]
public Machine Machine{ get; set; }
}
var machine = JsonConvert.DeserializeObject<List<MachineJson>>(json);