class Resturant
{
public string Name { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
}
JObject feature = new JObject();
Resturant item = new Resturant();
item.Latitude = (double)Responseobj["results"][0]["geometry"]["location"]["lat"];
item.Longitude = (double)Responseobj["results"][0]["geometry"]["location"]["lng"];
feature["geometry"]["coordinates"] = new JArray[2];
feature["geometry"]["coordinates"][0] = item.Latitude;
feature["geometry"]["coordinates"][1] = item.Longitude;
给我一个错误
无法隐式转换类型' Newtonsoft.Json.Linq.JArray []' to' Newtonsoft.Json.Linq.JToken'
plz帮助我正确地做到这一点
答案 0 :(得分:0)
事实证明我正在解决同样的问题。在经过大量研究Stack Overflow之后,我已经解决了这个问题。
你需要的是一个帮助类来从JSON对象中获取JArrays。看起来像这样:
public static JArray ToJArray(this JToken token, string itemProperty)
{
if (token != null && token.Type != JTokenType.Null)
{
token = token[itemProperty];
if (token != null)
{
if (token.Type == JTokenType.Array)
{
return (JArray)token;
}
else
{
return new JArray(token);
}
}
}
return new JArray();
}
上面的源代码来自这篇StackOverflow文章:Link
接下来,您必须记住,您仍然可以获得数据中的根对象。你必须解决它。在上面的链接中,您会看到他的来源看起来像这样。它演示了如何使用它。
class Program
{
static void Main(string[] args)
{
string json = @"
{
""collection1"": {
""item"": {
""label"": ""A"",
""value"": ""1""
}
},
""collection2"": {
""item"": [
{
""label"": ""B"",
""value"": ""2""
},
{
""label"": ""C"",
""value"": ""3""
}
]
},
""collection3"": null
}";
JObject root = JObject.Parse(json);
DumpItems(root, "collection1");
DumpItems(root, "collection2");
DumpItems(root, "collection3");
}
private static void DumpItems(JToken token, string collectionName)
{
JArray array = token[collectionName].ToJArray("item");
Console.WriteLine("Count of items in " + collectionName + ": " + array.Count);
foreach (JToken item in array)
{
Console.WriteLine(item["label"] + ": " + item["value"]);
}
}
}
以下是我如何解决这些问题的结果'结果'根。在我的示例中,列表中的每个项目都包含ID,名称和标签字符串。
public List GetResultsWithTag(string tagSrc) { // json数据中的Results对象是一个JObject。它包含一个结果对象的JSON数组
JObject root = JObject.Parse(jsonData);
JArray array = DumpItems(root, "results");
List<Result> returnList = new List<Result>();
foreach(var item in array)
{
Debug.WriteLine(item.ToString());
Result _result = new Result();
_result.ID = item["ID"].ToString();
_result.Name = item["Name"].ToString();
_result.Tags = item["Tags"].ToString();
if(_result.Tags.Contains(tagSrc))
{
returnList.Add(_result);
}
}
return returnList;
}