2

私は本当にここで困惑しています。返されたJSONは次のとおりです。

{"ResponseData":[{"ClusterID":"c02f1f5c-c61b-4f2c-ab5a-249966b3cdef","ClusterName":"Northeast","Courses":[{"CourseID":"8ab4f2b3-8160-4d7e-b79f-8d8b58926cc0","CourseName":"Home Course","SubCourses":[{"SubCourseName":"SubCourse1","SubCourseNumber":18}]},{"CourseID":"b3223464-333b-4c54-89c2-23908e0510c9","CourseName":"Away Course","SubCourses":[{"SubCourseName":"SubCourse1","SubCourseNumber":19}]}],"IsHomeCluster":true},"ResponseErrors":[]}

これは逆シリアル化する私のコードです:

        JArray jArr = (JArray)JsonConvert.DeserializeObject(json);
        foreach (var item in jArr) {
            foreach (var subitem in item["ResponseData"]) {
                Console.WriteLine (subitem ["ClusterID"]);
            }
        }

プロジェクトは正常にコンパイルされますが、シミュレーターで実行すると、次のエラーが発生します。

System.TypeLoadException:タイプロード例外が発生しました。at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(Newtonsoft.Json.JsonReader reader、System.Type objectType、Boolean checkAdditionalContent)[0x00000] in:0 at Newtonsoft.Json.JsonSerializer.DeserializeInternal(Newtonsoft.Json.JsonReader reader、System。タイプobjectType)[0x00000] in:0 at Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader reader、System.Type objectType)[0x00000] in:0 at Newtonsoft.Json.JsonConvert.DeserializeObject(System.String value、 System.Typeタイプ、Newtonsoft.Json.JsonSerializerSettings設定)[0x00000] in:0 at Newtonsoft.Json.JsonConvert.DeserializeObject(System.String value)[0x00000] in:0atAppMultiView.CourseInformationScreen。
AppMultiView.Application.Main(System.String [] args)[0x00000]の/Users/Dan/Desktop/AppTouch_dev /Main.cs:18

間違ったことを逆シリアル化しようとしていますか?

どんなポインタでも大歓迎です。

4

1 に答える 1

2

あなたが見ている問題が何であるかは完全にはわかりません。jsonのフォーマットが正しくない可能性があります。

それは役に立ちます、私が通常これに取り組む方法は次のとおりです:

  1. http://chris.photobooks.com/json/などのツールを使用してJSONを検証します。この場合、エラーが発生しました。「ResponseData」配列は終了していません。修正されたコードは次のとおりです。

    {"ResponseData":[
        {"ClusterID":"c02f1f5c-c61b-4f2c-ab5a-249966b3cdef","ClusterName":"Northeast",
        "Courses":
        [
        {"CourseID":"8ab4f2b3-8160-4d7e-b79f-8d8b58926cc0","CourseName":"Home Course","SubCourses":
            [{"SubCourseName":"SubCourse1","SubCourseNumber":18}]},
        {"CourseID":"b3223464-333b-4c54-89c2-23908e0510c9","CourseName":"Away Course","SubCourses":
            [{"SubCourseName":"SubCourse1","SubCourseNumber":19}]}
        ],
        "IsHomeCluster":true}
    ]
    ,"ResponseErrors":[]}
    
  2. 修正したJSONをhttp://json2csharp.com/にコピーします

    これにより、次のようなクラスが得られます。

    public class SubCours
    {
        public string SubCourseName { get; set; }
        public int SubCourseNumber { get; set; }
    }
    
    public class Cours
    {
        public string CourseID { get; set; }
        public string CourseName { get; set; }
        public List<SubCours> SubCourses { get; set; }
    }
    
    public class ResponseData
    {
        public string ClusterID { get; set; }
        public string ClusterName { get; set; }
        public List<Cours> Courses { get; set; }
        public bool IsHomeCluster { get; set; }
    }
    
    public class RootObject
    {
        public List<ResponseData> ResponseData { get; set; }
        public List<object> ResponseErrors { get; set; }
    }
    
  3. を使用しJsonConvert.DeserializeObject<RootObject>(json)て、逆シリアル化されたRootObjectを取得します


JSON用の新しいクラスとして貼り付け機能も利用できます:http://blogs.msdn.com/b/webdev/archive/2012/12/18/paste-json-as-classes-in-asp-net-and -web-tools-2012-2-rc.aspx

于 2013-02-04T18:03:05.377 に答える