2

我是新开发的 Windows UWP 应用程序,我正在尝试从我的资产文件夹中解析一个 JSON 文件。我看过很多教程,但是当我尝试时,它们不起作用。请有人帮我解析它,如果你可以举个例子。

我正在使用 VS2017 和 C#;

这是我要使用的库:

using Windows.Data.Json;

我的代码是:

private Uri appUri = new Uri("ms-appx:///Assets/marker.json");
private string title;
private void ConverJSONtoObjects()
        {
            try
            {
                Uri appUri = new Uri(fileName);//File name should be prefixed with 'ms-appx:///Assets/* 
                StorageFile anjFile = StorageFile.GetFileFromApplicationUriAsync(appUri).AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); 
                string jsonText = FileIO.ReadTextAsync(anjFile).AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); 
                JsonArray obj = JsonValue.Parse(jsonText).GetArray();
                for (uint i = 0; i < obj.Count; i++)
                {
                    title = obj.GetObjectAt(i).GetNamedString("name");
                }
                message("Place", title);
            }
            catch (Exception ex)
            {
                message("Error", ex.ToString());
            }
            
        }

我收到此错误: 异常处理的错误

我的文件是这样的:

[
{
"id":1,
"name":"Cabañas Nuevo Amanecer",
"lat":"18.402785",
"lng":"-70.094953",
"type":"Normal",
"phone":"No Disponible",
"price":"DOP 500",
"image":"http://i65.tinypic.com/10mif69.jpg"
},
{
"id":2,
"name":"Cabañas Costa Azul",
"lat":"18.424746",
"lng":" -69.990333",
"type":"Lujosa",
"phone":"(809) 539-6969",
"price":"DOP 4453",
"image":"http://i64.tinypic.com/wcd5b8.png"
}
]

解决方案(2021/11/7 更新)

嗨,对于那些有同样问题的人,问题出在文件属性中:构建操作需要是 Content才能从 UWP 的 Assets 文件夹中调用文件

4

1 回答 1

3

您可能正在寻找无数 JSON 库之一。您应该从最流行的选择Json.Net开始。(您可以查看Service Stack TextFastJsonParserJil等替代方案)。

一种简单的方法是声明一个与您预期的数据模式匹配的类:

public class PointOfInterest
{
    public int Id { get; set; }
    public string Name { get; set; }
    // ...
}

以及使用反序列化:

var poiArray = JsonConvert.DeserializeObject<PointOfInterest[]>(jsonString, new JsonSerializerSettings 
    { 
        ContractResolver = new CamelCasePropertyNamesContractResolver() 
    });

使用更新后的要求进行编辑,您必须执行以下操作:

var array = JArray.Parse(jsonString);

foreach(JObject item in array){
   var poi = new PointOfInterest()
   poi.Id = (int)item.GetNamedNumber("id");
   //...
}

官方文档非常简单。

于 2017-08-31T01:21:38.243 回答