2015-12-07 34 views
1

我在通用Windows平臺(Win10)上編寫應用程序。並且在發佈模式下運行時使用自定義Json轉換器時出現問題,這意味着通過.NET Native進行編譯。這裏是我的轉換器的代碼自定義Json轉換器沒有默認的構造函數和.NET本機

public class NestedObjectJsonConverter : JsonConverter 
{ 
    private string childNodeName; 

    public override bool CanConvert(Type objectType) 
    { 
     return true; 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     if (reader.TokenType != JsonToken.StartObject) 
     { 
      return serializer.Deserialize(reader, objectType); 
     } 

     var rootObject = JObject.Load(reader); 
     var childToken = rootObject[childNodeName]; 
     return ServiceModelJsonConvert.DeserializeObject(childToken, objectType); 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     writer.WriteStartObject(); 
     writer.WritePropertyName(childNodeName); 
     writer.WriteRawValue(JsonConvert.SerializeObject(value)); 
     writer.WriteEndObject(); 
    } 

    public NestedObjectJsonConverter(string childNodeName) 
    { 
     this.childNodeName = childNodeName; 
    } 
} 

當觸發此轉換器在釋放模式。它會得到「創建錯誤」異常,但在調試模式下工作正常。

我已經登錄我的例外meesage

HRESULT:-2146233088類型名:Newtonsoft.Json.JsonException, Newtonsoft.Json,版本= 8.0.0.0,文化=中立, 公鑰= 30ad4fe6b2a6aeed消息: Newtonsoft.Json.JsonException:創建 'NestedObjectJsonConverter'時出錯。 ---> System.NullReferenceException:對象引用未設置爲對象的實例 。在 Newtonsoft.Json.Serialization.JsonTypeReflector。 <> c.b__18_1(對象 PARAM)在 System.Func.Invoke(Runtime.CompilerServices.CallSiteBinder ARG)在SharedLibrary!+ 0x3a908c在 SharedLibrary!+ 0x3b1492在 SharedLibrary!+在 Newtonsoft.Json.Serialization 0x4d376a .JsonTypeReflector。 <> c__DisplayClass18_0.b__0(Object [] parameters)---內部異常堆棧跟蹤結束---在 Newtonsoft.Json.Serialization.JsonTypeReflector。 <> c__DisplayClass18_0.b__0(對象[] 參數)處 Newtonsoft.Json System.Func.Invoke(Runtime.CompilerServices.CallSiteBinder ARG)在 Newtonsoft.Json.Serialization.JsonTypeReflector.GetJsonConverter(對象 attributeProvider)。 Serialization.DefaultContractResolver.SetPropertySettingsFromAttributes(Json.Serialization.JsonProperty 屬性,對象attributeProvider,字符串名稱,類型declaringType, Json.MemberSerialization memberSerialization,布爾& allowNonPublicAccess)在 Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperty(Reflection.MemberInfo 成員,Json.Member序列化memberSerialization)處 Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(類型 的objectType)在 Newtonsoft.Json.Serialization.DefaultContractResolver Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(類型 類型,Json.MemberSerialization memberSerialization)。 CreateContract(類型 的objectType)處 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe(類型 型) Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(類型 型)在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize( Json.JsonReader rea DER,類型的objectType,布爾checkAdditionalContent)處 Newtonsoft Newtonsoft.Json.JsonSerializer.DeserializeInternal(Json.JsonReader 讀卡器,類型的objectType)在 Newtonsoft.Json.JsonSerializer.Deserialize(Json.JsonReader讀卡器, 類型的objectType)。 Json.JsonConvert.DeserializeObject(字符串值,類型類型, Json。JsonSerializerSettings設置)

看來找到參數化構造函數是.NET Native中這個問題的根本原因。但是這是一個.NET Native或JSON.NET?

+0

問題是什麼? – WiredPrairie

+1

我建議將你的項目設置爲DEBUG模式,但啓用.NET Native(在你的項目屬性中有一個複選框)。這應該引發一些有用的消息的例外。更新到VS Update 1也可能是有益的。 –

+0

@MattWhilden:好的〜謝謝〜我會嘗試這個選項 – FatJohn

回答

0

這是一個.net本地錯誤。它在當前版本中已修復

相關問題