2017-08-31 18 views
2

新しいUWPアプリケーションを開発しています。アセットフォルダからJSONファイルを解析しようとしています。私は多くのチュートリアルを見てきましたが、試してみるとうまくいきません。どうか誰かがそれを解析するのを手伝ってください。UWPのAssetsフォルダから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()); 
      } 

     } 

私はこのエラーを取得しています: error handled by Exception

私のファイルは、このようなものです:

[ 
{ 
"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" 
} 
] 
+0

解析が必要な場合は、Windows.Data.Json.JArray.Parse(jsonString)と同じくらい簡単なので、わからないことについてさらに詳しく説明する必要があります。 –

+0

@CyprienAutexierこれがあなたに役立つかどうかを見てみましょう –

+0

そのコードの問題点は何ですか? (タイトルは宣言されず、メッセージはループの外にあり、常に最後の値を表示します) –

答えて

3

おそらく、無数のJSONライブラリの1つを探しているでしょう。最も人気のある選択肢であるJson.Netで始める必要があります。 (Service Stack TextFastJsonParserまたはJilなどの代替案を見ることができます)。あなたがしなければならないでしょう、あなたの更新の要件となるよう

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"); 
    //... 
} 

official documentationはかなり魅力的ですhtforward。

+0

にする必要があります。唯一の問題は、最後のオプションでない限り、Windowsのライブラリに外部ライブラリを使用したくないということです。私はそれをHTTPClientリクエストで動作させることができましたが、私の資産フォルダから動作させたい –

+1

@MisterJJ次に、DataContractSerializer https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializerを使用することができます(v = vs.110).aspxだが、これはごみ(非常に限られた機能サポートと遅い)です。例えば、Miscrosoft AspNet Coreチームは、Json.NetにJsonをサポートすることを選択しました。 –

関連する問題