我在通用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?
問題是什麼? – WiredPrairie
我建議將你的項目設置爲DEBUG模式,但啓用.NET Native(在你的項目屬性中有一個複選框)。這應該引發一些有用的消息的例外。更新到VS Update 1也可能是有益的。 –
@MattWhilden:好的〜謝謝〜我會嘗試這個選項 – FatJohn