2015-09-13 1 views
1

Я только что обновил путь мой код загружает файл: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. (журнал ниже) Этот код, как правило, распространен с моим редактором, который представляет собой проект окон, и он отлично работает при компиляции визуальной студией. Мой Newtonsoft.Json.dll говорит, что это версия 7.

Это проблема с компилятором Unity? Являются ли определенные части Newtonsoft Json DLL несовместимыми с версией .Net? Как я могу написать это, чтобы быть совместимым с 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] .get (клавиша TypeNameKey) Newtonsoft.Json. Serialization.DefaultSerializationBinder.BindToType (System.String AssemblyName, System.String TYPENAME) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolveTypeName (Newtonsoft.Json.JsonReader читатель, System.Type & OBJECTTYPE, Newtonsoft.Json.Serialization.JsonContract & контракт, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.String qualifiedTypeN ame) Rethrow as JsonSerializationException: Тип разрешения ошибки указан в JSON 'MO1.Definitions.Entities.Charactor, MO1Common'. Path '[0]. $ Type', строка 1, позиция 57. Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolveTypeName (Newtonsoft.Json.JsonReader reader, System.Type & objectType, Newtonsoft.Json.Serialization.JsonContract & контракт, Newtonsoft.Json.Serialization.JsonProperty member, 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 member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty co ntainerMember, System.Object existingValue, System.Object & новое_значение, System.String & идентификатор) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (Newtonsoft.Json.JsonReader читатель, System.Type OBJECTTYPE, контракт Newtonsoft.Json.Serialization.JsonContract , Newtonsoft.Json.Serialization.JsonProperty member, 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 contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList (список IList, Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonArrayContract contract, Newtonsoft.Json.Serialization.JsonProperty containerProperty, System.String идентификатор)

+0

Вы пробовали ссылаться на недостающую сборку (MO1Common.dll) на проект? – AgentFire

+0

Хорошо. Говоря со старшим программистом, я сейчас понимаю основную проблему. Unity не включает те же сборные библиотеки, которые существуют в моем проекте Visual studio. Он просто захватывает все классы и создает одну сборную библиотеку. Мне посоветовали обойти это, используя «IfDefs». Я отправлю ответ, если он будет работать. –

ответ

0

Я установил это, добавив следующий код:

#If Unity 
tempJson = tempJson.Replace("MO1Common", "Assembly-CSharp") 
#EndIf 

Это требует добавления IfDef "Единство" в проекте единства.

Проблема заключается в том, что Json.Net пытался ссылаться на сборку библиотеки «MO1Common», которую я установил в визуальной студии, однако Unity компилирует все классы в своей папке «скрипты» в одну сборку по умолчанию, "Ассамблея-CSharp". Просто заменив имя сборной библиотеки в строке Json, когда код компилируется Unity, исправляет эту проблему.

Смежные вопросы