不能在Unity中使用.NET的JavaScriptSerializer和在MacOS上使用MonoDevelop

时间:2012-12-25 15:54:14

标签: monodevelop unity3d javascriptserializer

我正在尝试使用.NET的System.Web.Script.Serialization.JavaScriptSerializer将一个JSON文件读取到Unity中的字典中,并在MacOS上使用MonoDevelop。

到目前为止,我已将System.Web.Extensions程序集添加到MonoDevelop中,这使得它可以构建“Assembly-CSharp”项目。

但是当我回到Unity时,它仍然显示错误:错误CS0234:名称空间“System”中不存在类型或命名空间名称“Web”。您是否缺少装配参考?

然后我在网上看到将DLL添加到assets文件夹的任何位置都会这样做,所以我在MonoDevelop的路径中找到了文件System.Web.Extensions.dll的一些版本,它们位于:/Applications/Unity/MonoDevelop.app/Contents/Frameworks/Mono.framework/Versions/2.10.2/lib/mono/gac/System.Web.Extensions

有3个文件夹包含不同版本的文件:1.0.61025.0__31bf3856ad364e353.5.0.0__31bf3856ad364e354.0.0.0__31bf3856ad364e35

尝试了所有这些,但没有一个工作,Unity给出了这个错误:

Internal compiler error. See the console log for more information. output was:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
File name: 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
  at (wrapper managed-to-native) System.Reflection.Assembly:InternalGetType (System.Reflection.Module,string,bool,bool)
  at System.Reflection.Assembly.GetType (System.String name, Boolean throwOnError, Boolean ignoreCase) [0x00000] in <filename unknown>:0 
  at System.Reflection.Assembly.GetType (System.String name) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.RootNamespace.GetTypeInAssembly (System.Reflection.Assembly assembly, System.String name) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.RootNamespace.LookupTypeReflection (Mono.CSharp.CompilerContext ctx, System.String name, Location loc, Boolean must_be_unique) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.GlobalRootNamespace.LookupTypeReflection (Mono.CSharp.CompilerContext ctx, System.String name, Location loc, Boolean must_be_unique) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Namespace.LookupType (Mono.CSharp.CompilerContext ctx, System.String name, Location loc) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Namespace.Lookup (Mono.CSharp.CompilerContext ctx, System.String name, Location loc) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.TypeManager.CoreLookupType (Mono.CSharp.CompilerContext ctx, System.String ns_name, System.String name, Kind type_kind, Boolean required) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.TypeManager.InitCoreTypes (Mono.CSharp.CompilerContext ctx) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0   

那么,现在呢?

2 个答案:

答案 0 :(得分:1)

Unity使用不支持.NET 4的旧版Mono。我相信他们也会删除System.Web.dll以减少它,因为System.Web主要包含与游戏无关的ASP.NET开发者。

您可以复制Mono的dll,但请确保使用System.Web.dll的v2.0和System.Web.Extensions.dll的v3.5。

或者你可以试试JSON.NET。

答案 1 :(得分:0)

尝试序列化您的数据,BinaryFormatter + MemoryStream + TextAsset

BinaryFormatter + MemoryStream:object&lt; ==&gt;字节[]

TextAsset.bytes用于二进制数据文件。