JArray上的LINQ总是返回null

时间:2018-11-28 13:23:31

标签: json xamarin.forms

我正在尝试解析Json中的一些Xamarin.Forms

我对Xamarin还是很陌生,尽管对.net而言不是

这是我简单的酒窝代码

        var htc = new HttpClient();
        var rsp = await htc.GetStringAsync("myurl.com");
        JArray lists = JArray.Parse(rsp);
        var c = lists.Count();
        var l = lists.ToList();
        var w=lists.Where(x => true);

即使c返回列表中正确的项目数,l和w均为空

为什么?以及如何解决?

谢谢!

PS。我真正想做的是将ListView绑定到JArray,但是直接看来似乎是不可能的,(Text={Binding MyPropertyName}使应用程序崩溃)。因此,我尝试在Select上运行JArray以转换为KeyValuePair。如果您有任何直接绑定的想法,那将是最好的选择!

更新

这个问题看起来更奇怪

我尝试过

 var kvlist = new List<KeyValuePair<string, string>>();

        foreach (JObject ll in lists)
        {
            kvlist.Add(new KeyValuePair<string, string>(ll["Name"].ToString(), ll["Name"].ToString()));
        }

至少在这里迭代效果很好,但是kvlist在整个过程中都是null。尝试评估kvlist变量,我得到:

  

无法将类型为'System.RuntimeType'的对象强制转换为类型   “ Mono.Debugger.Soft.TypeMirror”。

怎么回事?

再次感谢!

3 个答案:

答案 0 :(得分:0)

文档似乎表明JArray具有.Count属性,但没有重载方法,因为它没有实现IEnumerable,但是正如注释中所提到的,它确实实现了JToken类型(JArray是其集合),并且实现IEnumerable。 请参见JToken的以下文档:https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JToken.htm 和JArray分别为: https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JArray.htm

首选机制是创建一个强类型,然后运行.ToObject();。 您可以访问JArray.ChildrenTokens,这可能会有帮助

答案 1 :(得分:0)

您不应该直接以.ToList类型的object调用JArray,而是应该以所需类型的Select List来调用。例如。

var l = lists.Select(c => new MyList
{
    Item1 = c.Value<int>("ItemName1"),
    Item2 = c.Value<string>("ItemName2")
}).ToList(); //Replce MyList with your class name 

在第二种情况下,wnull,在获取列表l之后,您需要根据所使用的where子句指定属性。例如。

var w=l.Where(x =>x.isAdmin==true); //l is list you selected above

希望它能对您有所帮助。

答案 2 :(得分:0)

解决方案:

您可以使用下面的代码将JArray转换为list<T>

List<T> t =lists.ToObject<List<T>>();

引用:https://www.newtonsoft.com/json/help/html/ToObjectType.htm

您还可以使用JsonConvert.DeserializeObject将其直接转换为所需的类型。您必须先定义一个jsonModel结构,与您的json相同。

List<jsonModel> modelList = JsonConvert.DeserializeObject<List<jsonModel>>(jsonStr);

引用:https://www.newtonsoft.com/json/help/html/SerializingCollections.htm