[英]Can't deserialize JSON into C# POCO
我无法尝试将JSON对象转换为C#类对象,但是弹出了相同的错误:
无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`1 [CoderwallDotNet.Api.Models.Account]',因为该类型需要JSON数组(例如[ 1,2,3])正确反序列化。
我正在使用此JSON并尝试在Windows 8.1应用程序中获取响应。
[
{
"id": 1,
"time": 40,
"srcLong": 35.909124,
"srcLat": 31.973628,
"destLong": 35.898258,
"destLat": 31.985622,
"subSites": [
{
"id": 1,
"name": "location1"
},
{
"id": 2,
"name": "location2"
},
{
"id": 3,
"name": "locaion3"
}
]
}]
我尝试使用webclient从JSON读取,但无法正常工作,无法识别它,因此我使用Newtonsoft.Json,我创建了这些类以获取响应。
public class SubSite
{
public int id { get; set; }
public string name { get; set; }
}
public class RootObject
{
public int id { get; set; }
public int time { get; set; }
public double srcLong { get; set; }
public double srcLat { get; set; }
public double destLong { get; set; }
public double destLat { get; set; }
public List<SubSite> subSites { get; set; }
}
var serviceUri = "http://localhost:24728/api/sites";
var client = new HttpClient();
var response = await client.GetAsync(serviceUri);
var datafile = await response.Content.ReadAsStringAsyn();
List<RootObject> data = JsonConvert.DeserializeObject<List<RootObject>>(datafile);
test1234.Text = data.ToString();//i am trying to for eample destlat
但是我无法获得响应所得到的价值,一切都很好,但是请问如何将其放入对象并在需要的地方使用它。 例如,我想获取时间和另一个的值,但是我srclong
srclat
列表有srclong
或者在子srclong
或srclat
或srclong
获取位置,这是如何将Json转换为c#对象的项目: https:// /onedrive.live.com/?cid=e648f5a0f179f346&id=E648F5A0F179F346%218429&ithint=folder,rar&authkey=!ALKlJdwsb8ER2FA
这工作正常:
var data = JsonConvert.DeserializeObject<RootObject>(datafile)
如果您不太担心丢失智能,则可以反序列化为dynamic
对象。 使用动态方法的一个优点是,您不必为了反序列化而创建类,而且如果返回的数据已更改,则无需更新类结构。 例如,您可以执行以下操作:
dynamic jsonValue = JsonConvert.DeserializeObject(jsonData);
foreach (dynamic rootObject in jsonValue)
{
theData.destLong.Value <-- use it anyway you want, store in a variable, etc.
// to get to each of the subSite in the rootObject
foreach (dynamic subSite in rootObject.subSites)
{
subSite.id.Value <-- returns an int based on your data
subSite.name.Value <-- returns a string based on your data
}
}
// where jsonData constains the json string you posted
foreaeach
很重要,因为您发布的数据将导致数组化。 您也可以只执行jsonValue[0]
但要注意是否存在空值错误,无论如何,您都应该从返回的json字符串开始进行检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.