2013-02-04 125 views
2

我真的很难过这里。这里是我的JSON返回:System.TypeLoadException使用Newtonsoft 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: A type load exception has occurred. 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.Type 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 type, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in :0 at Newtonsoft.Json.JsonConvert.DeserializeObject (System.String value) [0x00000] in :0 at AppMultiView.CourseInformationScreen.ViewDidLoad() [0x00029] in /Users/Dan/Desktop/AppTouch_dev /Screens/CourseInformationScreen.cs:48 at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging:void_objc_msgSend_IntPtr_bool (intptr,intptr,intptr,bool) at MonoTouch.UIKit.UINavigationController.PushViewController (MonoTouch.UIKit.UIViewController viewController, Boolean animated) [0x00021] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UINavigationController.g.cs:176 at AppMultiView.HomeScreen.m__2 (System.Object sender, System.EventArgs e) [0x00016] in /Users/Dan/Desktop/AppTouch_dev /Screens/HomeScreen.cs:75 at MonoTouch.UIKit.UIControlEventProxy.Activated() [0x00000] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIControl.cs:30 at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
at AppMultiView.Application.Main (System.String[] args) [0x00000] in /Users/Dan/Desktop/AppTouch_dev /Main.cs:18

我想反序列化错误的东西?

任何指针将不胜感激。

回答

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

+0

所以...... RootObject根=新RootObject(): 根= JsonConvert.DeserializeObject (JSON); 这仍会引发TypeLoadException。我错过了别的吗? – dstilwell

+0

你从哪里得到你的Json.Net程序集? – Stuart

+0

不知道该答案的答案......这是我继承的代码 – dstilwell

相关问题