C# Unity3D无法执行Newtonsoft Json代码

C# Unity3D无法执行Newtonsoft Json代码,c#,json,unity3d,C#,Json,Unity3d,我刚刚更新了代码加载文件的方式: string filename = Path.Combine(Data.BaseDir, "entities.txt"); if (File.Exists(filename)) { string tempJson = System.IO.File.ReadAllText(filename); var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNa

我刚刚更新了代码加载文件的方式:

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;
   }
}
string filename=Path.Combine(Data.BaseDir,“entities.txt”);
if(File.Exists(filename))
{
字符串tempJson=System.IO.File.ReadAllText(文件名);
var settings=new JsonSerializerSettings()
{
TypeNameHandling=TypeNameHandling.Objects
};
IList parsedEntities=(IList)JsonConvert.DeserializeObject(tempJson,设置);
foreach(parsedEntities中的实体e)
{
//e、 初始化();
Get(e.Coord).Entity=e;
}
}
此代码经过编译,但在Unity 5编辑器中出现运行时异常。 (记录如下) 这段代码恰好与我的编辑器(这是一个windows窗体项目)相同,并且在visual studio编译时运行良好。 我的
Newtonsoft.Json.dll
说它是版本7

这是Unity编译器的问题吗? Newtonsoft Json DLL的某些部分是否与.Net的unities版本不兼容? 我应该怎样写才能与Unity兼容

日志:

JsonSerializationException:无法加载程序集“MO1Comon”。 Newtonsoft.Json.Serialization.DefaultSerializationBinder.GetTypeFromTypeNameKey(TypeNameKey TypeNameKey) Newtonsoft.Json.Utilities.ThreadSafeStore
2[Newtonsoft.Json.Serialization.DefaultSerializationBinder+TypeNameKey,System.Type].AddValue(TypeNameKey)
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&contract,Newtonsoft.Json.Serialization.JsonProperty成员,Newtonsoft.Json.Serialization.JsonContainerContract容器合同,Newtonsoft.Json.Serialization.JsonProperty容器成员,System.String限定类型名称) 以JsonSerializationException的形式重新显示:解析JSON“MO1.Definitions.Entities.Character,MO1Common”路径“[0]”.$type”中指定的类型时出错,第1行,位置57。 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ResolveTypeName(Newtonsoft.Json.JsonReader阅读器,System.Type&objectType,Newtonsoft.Json.Serialization.JsonContract&contract,Newtonsoft.Json.Serialization.JsonProperty成员,Newtonsoft.Json.Serialization.JsonContainerContract容器合同,Newtonsoft.Json.Serialization.JsonProperty容器成员,System.String限定类型名称) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadMetadataProperties(Newtonsoft.Json.JsonReader阅读器,System.Type和objectType,Newtonsoft.Json.Serialization.JsonContract和contract,Newtonsoft.Json.Serialization.JsonProperty成员,Newtonsoft.Json.Serialization.JsonContainerContract容器合同,Newtonsoft.Json.Serialization.JsonProperty容器成员,System.Object和newValue,System.String和id) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(Newtonsoft.Json.JsonReader阅读器,System.Type对象类型,Newtonsoft.Json.Serialization.JsonContract合同,Newtonsoft.Json.Serialization.JsonProperty成员,Newtonsoft.Json.Serialization.JsonContainerContract容器合同,Newtonsoft.Json.Serialization.JsonProperty容器成员,System.Object existingValue) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(Newtonsoft.Json.JsonReader阅读器,System.Type对象类型,Newtonsoft.Json.Serialization.JsonContract合同,Newtonsoft.Json.Serialization.JsonProperty成员,Newtonsoft.Json.Serialization.JsonContainerContract容器合同,Newtonsoft.Json.Serialization.JsonProperty容器成员,System.Object existingValue) Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList列表、Newtonsoft.Json.JsonReader、Newtonsoft.Json.Serialization.JsonArrayContract合同、Newtonsoft.Json.Serialization.JsonProperty容器属性、System.String id)


我通过添加以下代码修复了此问题:

#If Unity
tempJson = tempJson.Replace("MO1Common", "Assembly-CSharp")
#EndIf
这需要将IfDef“Unity”添加到Unity项目中


问题是,Json.Net试图引用我在visual studio中设置的程序集库“MO1Common”,然而,Unity将其“scripts”文件夹中的所有类编译到一个名为“assembly CSharp”的默认程序集库中。在Unity编译代码时,只需在Json字符串中替换程序集库的名称即可解决此问题。

您是否尝试引用缺少的程序集(MO1Common.dll)到项目中去?好的。和一个高级程序员交谈,我现在了解了基本问题。Unity不包括我的Visual studio项目中存在的相同的程序集库。它只是获取所有类并创建一个程序集库。有人建议我使用“IfDefs”来解决这个问题。如果它有效,我将发布答案。