2016-02-24 89 views
0

我想使用YAXLib處理XML,但每當我嘗試使用int,double或float字段序列化一個類時, 。 YAXLib試圖呼叫C#MissingMethodException:未找到類型'System.Int32'的構造函數

DefaultValue = MemberType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, new object[0]); 

MemberType哪裏是System.Int32Type對象。

當然Int32沒有調用的構造函數。我試圖理解這是如何工作的。這是在更新版本的mono/C#中引入的東西嗎?

這是Unity3d,使用Mono,.NET 2.0.5

MissingMethodException: Constructor on type 'System.Int32' not found. 
System.MonoType.InvokeMember (System.String name, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object target, System.Object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, System.String[] namedParameters) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/MonoType.cs:398) 
System.Type.InvokeMember (System.String name, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object target, System.Object[] args) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Type.cs:1149) 
YAXLib.MemberWrapper.InitDefaultValue() (at Assets/Vendor/YAXLib/MemberWrapper.cs:691) 
YAXLib.MemberWrapper.InitInstance() (at Assets/Vendor/YAXLib/MemberWrapper.cs:682) 
YAXLib.MemberWrapper..ctor (System.Reflection.MemberInfo memberInfo, YAXLib.YAXSerializer callerSerializer) (at Assets/Vendor/YAXLib/MemberWrapper.cs:122) 
YAXLib.YAXSerializer+<GetFieldsToBeSerialized>c__Iterator1.MoveNext() (at Assets/Vendor/YAXLib/YAXSerializer.cs:2815) 
YAXLib.YAXSerializer.SerializeBase (System.Object obj, System.Xml.Linq.XName className) (at Assets/Vendor/YAXLib/YAXSerializer.cs:722) 
YAXLib.YAXSerializer.SerializeBase (System.Object obj) (at Assets/Vendor/YAXLib/YAXSerializer.cs:609) 
YAXLib.YAXSerializer.SerializeXDocument (System.Object obj) (at Assets/Vendor/YAXLib/YAXSerializer.cs:539) 
YAXLib.YAXSerializer.Serialize (System.Object obj) (at Assets/Vendor/YAXLib/YAXSerializer.cs:349) 
DataHandler..ctor() (at Assets/DataWrangling/DataHandler.cs:36) 
YAXTestHarness.Start() (at Assets/DataWrangling/YAXTestHarness.cs:8) 

回答

1

也許你想獲得最新版本YAX什麼的?

我只是用Google搜索YAXLib MemberWrapper,發現https://github.com/sinairv/YAXLib/blob/master/YAXLib/MemberWrapper.cs

有這個方法你有例外,在如下實施:

private void InitDefaultValue() 
    { 
     if(MemberType.IsValueType) 
      DefaultValue = MemberType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, new object[0]); 
     else 
      DefaultValue = null; 
    } 

,所以我稍微修改了它,並呼籲從一個控制檯應用程序和它的工作原理只是罰款返回0.

private static object InitDefaultValue(Type MemberType) 
    { 
     if (MemberType.IsValueType) 
      return MemberType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, new object[0]); 
     else 
      return null; 
    } 

    static void Main(string[] args) 
    { 
     Console.WriteLine(InitDefaultValue(typeof(System.Int32))); 
    } 

這使我相信YAXLib之間有一些不兼容單聲道版本,因爲它轉化爲「通過調用默認構造函數創建實例」,並且也應該在單聲道下工作。

+0

感謝您確認這對您有用。我在Unity/mono下運行了相同的測試,並拋出了相同的異常,所以這很可能是單聲道問題,而不是YAXLib中的錯誤。 – Jephron

相關問題