无法在 C# 中反序列化 JSON
Unable to deserialize JSON in c#
我从 REST API 得到以下 JSON 的响应。
{
"data":{
"id":123,
"zoneid":"mydomain.com",
"parent_id":null,
"name":"jaz",
"content":"172.1 6.15.235",
"ttl":60,
"priority":null,
"type":"A",
"regions":[
"global"
],
"system_record":false,
"created_at":"2017-09-28T12:12:17Z",
"updated_at":"2017-09-28T12:12:17Z"
}
}
并尝试使用以下代码解决问题,但这不会导致正确的反序列化类型。
var model = JsonConvert.DeserializeObject<ResponseModel>(response);
下面是 class 根据我在 JSON 响应中收到的字段。
public class ResponseModel
{
public int id { get; set; }
public string zone_id { get; set; }
public int parent_id { get; set; }
public string name { get; set; }
public string content { get; set; }
public int ttl { get; set; }
public int priority { get; set; }
public string type { get; set; }
public string[] regions { get; set; }
public bool system_record { get; set; }
public DateTime created_at { get; set; }
public DateTime updated_at { get; set; }
}
缺少什么?
您缺少包装器 class。
public class Wrapper
{
public ResponseModel data {get;set}
}
然后做:
var model = JsonConvert.DeserializeObject<Wrapper>(response).data;
从 data
属性 中获取 ResponseModel 的实例。
你可以从你的json中扣除这个:
{ "data":
{ "id":123, /*rest omitted */ }
}
将接收此 JSON 的类型需要有一个名为 data
的 属性。建议的 Wrapper class 充当该类型。
根据 json2csharp 网站,您的模型似乎不正确。试试这个:
public class ResponseModel
{
public int id { get; set; }
public string zoneid { get; set; }
public object parent_id { get; set; }
public string name { get; set; }
public string content { get; set; }
public int ttl { get; set; }
public object priority { get; set; }
public string type { get; set; }
public List<string> regions { get; set; }
public bool system_record { get; set; }
public DateTime created_at { get; set; }
public DateTime updated_at { get; set; }
}
public class RootObject
{
public ResponseModel data { get; set; }
}
您的模型与您的回复不匹配 - 它与 data
属性 匹配。简单地用另一个物体包裹它
public class ResponseData
{
public ResponseModel Data {get; set; {
}
然后
var model = JsonConvert.DeserializeObject<ResponseData>(response);
这是一个很酷的技巧,你可以在 Visual Studio 2015-2017 中使用它生成正确的 class 如果你只是复制 JSON (ctrl + c)。
您需要在 visual studio 中创建一个新的 class,一旦进入 class 进入编辑菜单 -> 选择性粘贴 -> 将 JSON 粘贴为 类.
Steps to generate json class
这将为您生成 json 的 C# 对象并为您省去所有麻烦:)
我从 REST API 得到以下 JSON 的响应。
{
"data":{
"id":123,
"zoneid":"mydomain.com",
"parent_id":null,
"name":"jaz",
"content":"172.1 6.15.235",
"ttl":60,
"priority":null,
"type":"A",
"regions":[
"global"
],
"system_record":false,
"created_at":"2017-09-28T12:12:17Z",
"updated_at":"2017-09-28T12:12:17Z"
}
}
并尝试使用以下代码解决问题,但这不会导致正确的反序列化类型。
var model = JsonConvert.DeserializeObject<ResponseModel>(response);
下面是 class 根据我在 JSON 响应中收到的字段。
public class ResponseModel
{
public int id { get; set; }
public string zone_id { get; set; }
public int parent_id { get; set; }
public string name { get; set; }
public string content { get; set; }
public int ttl { get; set; }
public int priority { get; set; }
public string type { get; set; }
public string[] regions { get; set; }
public bool system_record { get; set; }
public DateTime created_at { get; set; }
public DateTime updated_at { get; set; }
}
缺少什么?
您缺少包装器 class。
public class Wrapper
{
public ResponseModel data {get;set}
}
然后做:
var model = JsonConvert.DeserializeObject<Wrapper>(response).data;
从 data
属性 中获取 ResponseModel 的实例。
你可以从你的json中扣除这个:
{ "data":
{ "id":123, /*rest omitted */ }
}
将接收此 JSON 的类型需要有一个名为 data
的 属性。建议的 Wrapper class 充当该类型。
根据 json2csharp 网站,您的模型似乎不正确。试试这个:
public class ResponseModel
{
public int id { get; set; }
public string zoneid { get; set; }
public object parent_id { get; set; }
public string name { get; set; }
public string content { get; set; }
public int ttl { get; set; }
public object priority { get; set; }
public string type { get; set; }
public List<string> regions { get; set; }
public bool system_record { get; set; }
public DateTime created_at { get; set; }
public DateTime updated_at { get; set; }
}
public class RootObject
{
public ResponseModel data { get; set; }
}
您的模型与您的回复不匹配 - 它与 data
属性 匹配。简单地用另一个物体包裹它
public class ResponseData
{
public ResponseModel Data {get; set; {
}
然后
var model = JsonConvert.DeserializeObject<ResponseData>(response);
这是一个很酷的技巧,你可以在 Visual Studio 2015-2017 中使用它生成正确的 class 如果你只是复制 JSON (ctrl + c)。
您需要在 visual studio 中创建一个新的 class,一旦进入 class 进入编辑菜单 -> 选择性粘贴 -> 将 JSON 粘贴为 类.
Steps to generate json class
这将为您生成 json 的 C# 对象并为您省去所有麻烦:)