System.TypeLoadException ketika saya mencoba mengonversi JArray menjadi objek di utas

Saya memiliki kode C# yang mengonversi objek JArray jsonArray (JSON.Net) menjadi daftar objek jsonList (Daftar‹ MyClass >):

List<MyClass> jsonList = jsonArray.ToObject<List<MyClass>> ();

Kode di atas berfungsi dengan baik ketika saya menjalankannya di thread utama, tetapi jika saya meletakkan kode yang sama di dalam thread yang berbeda, seperti ini:

Thread t = new Thread(delegate() {
    List<MyClass> jsonList = jsonArray.ToObject<List<MyClass>> ();
});
t.Start();

Saya mendapatkan pesan kesalahan berikut: "System.TypeLoadException telah dilemparkan. Telah terjadi pengecualian pemuatan tipe".

Adakah yang tahu mengapa ini terjadi? Jejak tumpukan lengkap ada di bawah. Terima kasih sebelumnya!

System.TypeLoadException: Pengecualian pemuatan tipe telah terjadi. di Newtonsoft.Json.Utilities.ThreadSafeStore2[System.Type,System.Type].AddValue (System.Type key) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Utilities.ThreadSafeStore2[System.Type,System.Type].Dapatkan (kunci System.Type) [0x00000] di :0 di Newtonsoft.Json.Serialization.JsonTypeReflector.GetAssociatedMetadataType (tipe System.Type) [0x00000] di :0 di Newtonsoft.Json.Serialization.JsonTypeReflector.GetAttribute[JsonContainerAttribute] (tipe System.Type) [0x00000] di :0 di Newtonsoft.Json.Serialization.JsonTypeReflector.GetAttribute[JsonContainerAttribute] (ICustomAttributeProvider atributProvider) [0x00000] di : 0 di Newtonsoft.Json.Utilities.ThreadSafeStore2[System.Reflection.ICustomAttributeProvider,Newtonsoft.Json.JsonContainerAttribute].AddValue (ICustomAttributeProvider key) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Utilities.ThreadSafeStore2[System.Reflection.ICustomAttributeProvider,Newtonsoft.Json.JsonContainerAttribute].Dapatkan (kunci ICustomAttributeProvider) [0x00000] di :0 di Newtonsoft.Json.Serialization.CachedAttributeGetter1[Newtonsoft.Json.JsonContainerAttribute].GetAttribute (ICustomAttributeProvider type) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Serialization.JsonTypeReflector.GetJsonContainerAttribute (System.Type type) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Serialization.JsonTypeReflector.GetJsonObjectAttribute (System.Type type) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract (System.Type objectType) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract (System.Type type) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe (System.Type type) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, Boolean checkAdditionalContent) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Linq.JToken.ToObject (System.Type objectType, Newtonsoft.Json.JsonSerializer jsonSerializer) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Linq.JToken.ToObject (System.Type objectType, Boolean isNullable) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Linq.JToken.ToObject (System.Type objectType) [0x00000] in <filename unknown>:0 at Newtonsoft.Json.Linq.JToken.ToObject[List1] () [0x00000] di : 0 di GuiaTV.AgoraController.GetJSON () [0x00015] di /Users/vegidio/Documents/Dev/Xamarin/GuiaTV/GuiaTV/Controllers/AgoraController.cs:24 di GuiaTV.AgoraScreen.m__2 () [0x0000d] di /Users/ vegidio/Documents/Dev/Xamarin/GuiaTV/GuiaTV/Views/AgoraScreen.cs:43 di System.Threading.Thread.StartInternal () [0x0001d] di /Developer/MonoTouch/Source/mono/mcs/class/corlib/System. Utas/Utas.cs:697


person vegidio    schedule 24.02.2013    source sumber
comment
Masalah Anda mungkin terkait dengan pertanyaan ini: stackoverflow.com/ pertanyaan/10112533/   -  person Mike Zboray    schedule 24.02.2013
comment
Terima kasih banyak, itu membantu. Rupanya ada versi khusus JSON.Net yang berfungsi dengan MonoTouch.   -  person vegidio    schedule 24.02.2013


Jawaban (2)


Tampaknya Anda sedang mengembangkan aplikasi berbasis sentuhan, untuk ini Anda memerlukan NewtonSoft edisi terbaru untuk Mono Touch. Dapatkan dari di sini.

Jika Anda membangunnya untuk UI modern, sangat mudah mengikuti templat Win 8 atau menggunakan Tugas untuk memulai thread.

Coba masukkan blok Coba, Tangkap, Akhirnya untuk mendapatkan detail pengecualian.

person Sant14    schedule 24.02.2013
comment
Terima kasih. Saya tidak tahu ada port khusus JSON.Net agar dapat berfungsi di MonoTouch. - person vegidio; 24.02.2013
comment
jika kamu menyukai jawabannya maka kamu dapat menerimanya. Terserah kamu. Setiap pertanyaan tentang masalah, kamu dapat mengajukan pertanyaan dan hanya kita yang dapat menggunakan otak kita dan teknik pencarian di Internet untuk mendapatkan jawabannya. - person Sant14; 24.02.2013

Jika Anda mengaktifkan breakpoint

List<MyClass> jsonList = jsonArray.ToObject<List<MyClass>> ();

dan arahkan breakpoint itu untuk melihat pengecualian dalam, apa isinya?

Alasan saya bertanya adalah karena pengecualian TypeLoad akan menghasilkan nol atau memberi Anda pesan tentang pengecualian dalam yang dapat membantu Anda lebih dari sekadar pelacakan tumpukan ini.

person Sipps    schedule 24.02.2013