我剛剛更新了我的代碼加載一個文件的方式:Unity3D未能exicute Newtonsoft的Json代碼
string filename = Path.Combine(Data.BaseDir, "entities.txt");
if (File.Exists(filename))
{
string tempJson = System.IO.File.ReadAllText(filename);
var settings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Objects
};
IList parsedEntities = (IList)JsonConvert.DeserializeObject<List<Entity>>(tempJson, settings);
foreach (Entity e in parsedEntities)
{
//e.Initialise();
Map.Get(e.Coord).Entity = e;
}
}
此代碼編譯但隨後在Unity 5編輯器運行時異常。 (下面的日誌) 這段代碼碰巧和我的編輯器很相似,它是一個windows窗體項目,當它由visual studio編譯時它運行良好。 我的Newtonsoft.Json.dll
說它是版本7.
這是Unity編譯器的問題嗎? Newtonsoft Json DLL的某些部分是否與.Net的unities版本不兼容? 我應該如何編寫這個以兼容Unity?
日誌:
JsonSerializationException:無法加載組件 'MO1Common'。 Newtonsoft.Json.Serialization.DefaultSerializationBinder.GetTypeFromTypeNameKey(TypeNameKey typeNameKey) Newtonsoft.Json.Utilities.ThreadSafeStore
2[Newtonsoft.Json.Serialization.DefaultSerializationBinder+TypeNameKey,System.Type].AddValue (TypeNameKey key) Newtonsoft.Json.Utilities.ThreadSafeStore
2 [Newtonsoft.Json.Serialization.DefaultSerializationBinder + TypeNameKey,System.Type的]獲得(TypeNameKey鍵) Newtonsoft.Json。 Serialization.DefaultSerializationBinder.BindToType(System.String assemblyName,System.String typeName) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolveTypeName(Newtonsoft.Json.JsonReader reader,System.Type & objectType,Newtonsoft.Json.Serialization.JsonContract & contract, Newtonsoft.Json.Serialization.JsonProperty成員,Newtonsoft.Json.Serialization.JsonContainerContract containerContract,Newtonsoft.Json.Serialization.JsonProperty containerMember,System.String qualifiedTypeN ame) Rethrow as JsonSerializationException:在解析JSON'MO1.Definitions.Entities.Charactor,MO1Common'中指定的類型時出錯。路徑'[0]。$ type',第1行,位置57. Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolveTypeName(Newtonsoft.Json.JsonReader reader,System.Type & objectType,Newtonsoft.Json.Serialization.JsonContract & contract, Newtonsoft.Json.Serialization.JsonProperty成員,Newtonsoft.Json.Serialization.JsonContainerContract containerContract,Newtonsoft.Json.Serialization.JsonProperty containerMember,System.String qualifiedTypeName) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadMetadataProperties(Newtonsoft.Json.JsonReader reader, System.Type & objectType,Newtonsoft.Json.Serialization.JsonContract &合約,Newtonsoft.Json.Serialization.JsonProperty成員,Newtonsoft.Json.Serialization.JsonContainerContract containerContract,Newtonsoft.Json.Serialization.JsonProperty co ntainerMember,System.Object existingValue,System.Object & newValue,System.String & id) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(Newtonsoft.Json.JsonReader reader,System.Type objectType,Newtonsoft.Json.Serialization.JsonContract contract ,Newtonsoft.Json.Serialization.JsonProperty成員,Newtonsoft.Json.Serialization.JsonContainerContract containerContract,Newtonsoft.Json.Serialization.JsonProperty containerMember,System.Object existingValue) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(Newtonsoft.Json.JsonReader reader ,System.Type objectType,Newtonsoft.Json.Serialization.JsonContract合約,Newtonsoft.Json.Serialization.JsonProperty成員,Newtonsoft.Json.Serialization.JsonContainerContract containerContract,Newtonsoft.Json.Serialization.JsonProperty containerMember,System.Object existingValue) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList列表,Newtonsoft.Json.JsonReader讀者,Newtonsoft.Json.Serialization.JsonArrayContract契約,Newtonsoft.Json.Serialization。JsonProperty containerProperty,System.String ID)
你有沒有嘗試引用缺少的程序集(MO1Common.dll)到項目? – AgentFire
好的。與一位高級程序員交談,我現在明白了基本問題。 Unity不包含Visual Studio項目中存在的相同的Assembly庫。它只抓取所有的類並創建一個裝配庫。我被建議通過使用「IfDefs」來解決這個問題。如果它有效,我會發布答案。 –