我无法将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
这里是项目如何获得Json到c#对象:
https://onedrive.live.com/?cid=e648f5a0f179f346&id=E648F5A0F179F346%218429&ithint=folder,rar&authkey=!ALKlJdwsb8ER2FA
答案 0 :(得分:1)
这很好用:
var data = JsonConvert.DeserializeObject<RootObject>(datafile)
答案 1 :(得分:0)
如果您对丢失intellisense不太具体,可以反序列化为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字符串开始检查。