0

のWeb サービスjsonから返されたテスト用のコードを書いています。返される応答は次の形式です。asmxC#

{"d":"[{\"Id\":\"row1\",\"TheDate\":\"01/01/2013 00:00:00\",\"Description\":\"Test1\",\"Field\":\"N\"},     
       {\"Id\":\"row2\",\"TheDate\":\"01/01/2013 00:00:00\",\"Description\":\"Test2\",\"Field\":\"N\"}]

最終的には、データをオブジェクトのリストとして変換したいと考えています。使用を制限していますJSON.Net

現時点では、以下のメソッドを使用してjson、応答で返されたをに変換しています。JArray

 private static JArray ConvertToJsonArray(StreamReader reader)
 {
     var json = reader.ReadToEnd();

     string result = json.Replace("{\"d\":\"", string.Empty);
     result = result.Replace(@"\", string.Empty);
     result = result.Replace("]\"}", "]");

     return JArray.Parse(result);
 }

ご覧のとおり、最終的に解析できるように、文字列を手動でフォーマットしています。

次にループJObjectして、それぞれを取得JArrayし、リストに追加する前に必要なオブジェクト タイプに変換します。

これにより、望ましい結果が得られますが、よりエレガントなソリューションが必要だと感じています。

誰でも助けてもらえますか?

PS - 簡潔にするために多くのコードを省略しました。必要に応じて詳細をお知らせします。

4

1 に答える 1

0

Brian Rogersandに感謝Tanim Salem(上記のコメントを参照)

二重にシリアル化されないように Web サービスを変更しました。

コードを次のように単純化できるようになりました。

    private static JArray ConvertToJsonArray(string json)
    {          
        var jsonObject = JObject.Parse(json);                
        return (JArray)jsonObject["d"];
    }

そして、次を使用してオブジェクトのリストに変換します。

    private static IList<ThirdPartyClaim> ConvertJsonArrayToListOfClaims(JArray jsonArray)
    {
        return JsonConvert.DeserializeObject<List<ThirdPartyClaim>>(jsonArray.ToString());           
    }

その他のコメントや改善点をいただければ幸いです。

于 2013-06-28T11:17:07.413 に答える