我想序列化一些我从网络上获得的JSON数据并使用数据,因此我转到http://json2csharp.com/,然后将JSON转到下面的
json: [{"line_descr":"u03a0u0395u0399u03a1u0391u0399u0391u03a3 -
u0392u039fu03a5u039bu0391","line_descr_eng":"PEIRAIAS - VOYLA"}]
到此类别:
public class RootObject
{
public string line_descr { get; set; }
public string line_descr_eng { get; set; }
}
这是我的代码:
class LineName
{
public async static Task<RootObject> GetLineName(int linecode)
{
var http = new HttpClient();
var response = await http.GetAsync("http://telematics.oasa.gr/api/?act=getLineName&p1=962");
var result = await response.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (RootObject)serializer.ReadObject(ms);
return data;
}
}
[DataContract]
public class RootObject
{
[DataMember]
public string line_descr { get; set; }
[DataMember]
public string line_descr_eng { get; set; }
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
RootObject myLine = await LineName.GetLineName(92);
ResultTextBlock.Text = myLine.line_descr_eng;
}
所以当我尝试获取数据并在文本块中显示它时,我会收到错误:line_descr_eng为null。
有人可以指向故障在哪里吗?因为line_descr_eng应该是 peiraias- voyla,但我的是无效的,经过大量搜索,我找不到错误的位置。
您的JSON是一个数组,而不是对象,您应该将其列为数组。
public async static Task<RootObject[]> GetLineName(int linecode)
{
var http = new HttpClient();
var response = await http.GetAsync("http://telematics.oasa.gr/api/?act=getLineName&p1=962");
var result = await response.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject[]));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (RootObject[])serializer.ReadObject(ms);
return data;
}
//...
var myLines = await LineName.GetLineName(92);
var myLine = myLines.FirstOrDefault();
您也不需要内存流,您可以从HTTP响应中读取流
var result = await response.Content.ReadAsStreamAsync();
您可以简单地使用JavaScriptSerializer类,而不是Datacontractjsonserialializer类似:
替换:
var serializer = new DataContractJsonSerializer(typeof(RootObject));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (RootObject)serializer.ReadObject(ms);
与此:
var ser = new JavaScriptSerializer();
var test = ser.Deserialize<List<RootObject>>(json);
如果找不到JavaScriptSerializer,则必须执行以下步骤:
- 右键单击引用,然后添加参考,然后从汇编 ->框架select select seless.web.extensions。
现在您应该能够将以下内容添加到类文件中:
using System.Web.Script.Serialization;
引用:https://stackoverflow.com/a/15391388/5056173