UWP Json to C# conversion



我想序列化一些我从网络上获得的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,则必须执行以下步骤:

  1. 右键单击引用,然后添加参考,然后从汇编 ->框架select select seless.web.extensions。
  2. 现在您应该能够将以下内容添加到类文件中:

    using System.Web.Script.Serialization;
    

引用:https://stackoverflow.com/a/15391388/5056173

最新更新