Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] Sérialisation XML

NullReferenceException

    11 avril 2014 à 19:43:44

    Salut !

    J'ai un souci avec le sérialiseur du .Net Framework :

    var Serializer = new System.Xml.Serialization.XmlSerializer(typeof(int[]));

    Fonctionne et me renvoie un sérialiseur XML pour les tableaux d'entiers.

    Par contre, si je veux l'utiliser pour le type List<int>[] (qui est un tableau de liste d'entiers, ce type fonctionne très bien par ailleurs dans le code) :

    var Serializer = new System.Xml.Serialization.XmlSerializer(typeof(List<int>[]));

    J'obtiens une exception NullReferenceException. Or, il n'y a aucun objet à initialiser, je n'utilise qu'un typeof !

    Ah, et le type List<int> tout court fonctionne aussi à la sérialisation, c'est juste List<int>[] que le Framework ne veut pas sérialiser o.O

    Y'a t-il une erreur dans mon code, ou est-ce une erreur de conception du Framework ?

    Merci ! :)

    Voilà la stacktrace si ça intéresse quelqu'un :

       à System.Object.GetType()
       à System.Xml.Serialization.CodeGenerator.GetVariableType(Object var)
       à System.Xml.Serialization.SourceInfo.InternalLoad(Type elementType, Boolean asAddress)
       à System.Xml.Serialization.XmlSerializationILGen.ILGenLoad(String source, Type type)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberBegin(Member[] members)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteArray(String source, String arrayName, ArrayMapping arrayMapping, Boolean readOnly, Boolean isNullable, Int32 fixupIndex, Int32 elementIndex)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteElement(String source, String arrayName, String choiceSource, ElementAccessor element, ChoiceIdentifierAccessor choice, String checkSpecified, Boolean checkForNull, Boolean readOnly, Int32 fixupIndex, Int32 elementIndex)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberElementsIf(Member[] members, Member anyElement, String elementElseString)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberElements(Member[] members, String elementElseString, String elseString, Member anyElement, Member anyText)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteArray(String source, String arrayName, ArrayMapping arrayMapping, Boolean readOnly, Boolean isNullable, Int32 fixupIndex, Int32 elementIndex)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteElement(String source, String arrayName, String choiceSource, ElementAccessor element, ChoiceIdentifierAccessor choice, String checkSpecified, Boolean checkForNull, Boolean readOnly, Int32 fixupIndex, Int32 elementIndex)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberElementsIf(Member[] members, Member anyElement, String elementElseString)
       à System.Xml.Serialization.XmlSerializationReaderILGen.WriteMemberElements(Member[] members, String elementElseString, String elseString, Member anyElement, Member anyText)
       à System.Xml.Serialization.XmlSerializationReaderILGen.GenerateTypeElement(XmlTypeMapping xmlTypeMapping)
       à System.Xml.Serialization.TempAssembly.GenerateRefEmitAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence)
       à System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
       à System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
       à FingerCode.MainWindow.Button_Click_4(Object sender, RoutedEventArgs e) dans c:\Users\...cs:ligne 239
       à System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       à System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       à System.Windows.Controls.Button.OnClick()
       à System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
       à System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       à System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       à System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
       à System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       à System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       à System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       à System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
       à System.Windows.Input.InputManager.ProcessStagingArea()
       à System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
       à System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
       à System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       à System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       à MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       à MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       à MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
       à System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
       à MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       à MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
       à System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
       à System.Windows.Application.RunInternal(Window window)
       à System.Windows.Application.Run()
       à FingerCode.App.Main() dans c:\Users\..App.g.cs:ligne 0
       à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       à System.Threading.ThreadHelper.ThreadStart()





    -
    Edité par FraggyMDL 11 avril 2014 à 19:44:59

    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2014 à 22:27:25

      Plop,

      Ton code fonctionne chez moi avec le Framework 4.0, peut-être un problème de version ?

      • Partager sur Facebook
      • Partager sur Twitter
      MysteryDash / 100 MPM / Développeur Freelance C#.NET / osu! / PS4 Offline Remote Play
        12 avril 2014 à 12:02:10

        J'utilise le Framework 4.5, il y a peut-être une différence à ce niveau là du coup...

        J'ai trouvé une solution alternative, j'utilise un autre type de données.

        • Partager sur Facebook
        • Partager sur Twitter

        [C#] Sérialisation XML

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown