【发布时间】:2015-09-13 23:53:10
【问题描述】:
我刚刚更新了我的代码加载文件的方式:
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 不兼容? 我应该如何编写才能与 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.ThreadSafeStore2[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 reader, System.Type& objectType, Newtonsoft.Json.Serialization.JsonContract& contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft .Json.Serialization.JsonProperty 容器成员,System.String 限定类型名称) 重新抛出为 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 member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft .Json.Serialization.JsonProperty 容器成员,System.String 限定类型名称) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadMetadataProperties (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, 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 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 id)
【问题讨论】:
-
您是否尝试过将缺少的程序集 (MO1Common.dll) 引用到项目中?
-
好的。与一位高级程序员交谈,我现在了解了基本问题。 Unity 不包含我的 Visual Studio 项目中存在的相同程序集库。它只是抓取所有类并创建一个程序集库。有人建议我使用“IfDefs”来解决这个问题。如果可行,我会发布答案。