Toon posts:

[C#] Ingewikkelde class serializen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een klein probleem met het serializen van een class die ik gemaakt heb. Ik denk dat het probleem hem in de ArrayList zit die ik gebruik.

Ik heb namelijk een class geschreven met daarin wat strings en wat integers. Deze class gebruik ik om een aantal instellingen in op te slaan. Deze class bevat ook een ArrayList waar vervolgens weer een aantal andere zelf gemaakt classes in moeten. Even een klein overzichtje van wat ongeveer de bedoeling is:

Settings
+- ArrayList Users
    +-ArrayList Directories

Als ik de Settings class serialize zonder dat er een object in de ArrayList zit gaat het wel goed. Maar als ik een class in de ArrayList doe en deze vervolgens ga serializen krijg ik een fout melding, namelijk:

There was an error creating the XML document.

Als ik vervolgens naar het object kijk waar de XML naar toe wordt geschreven dan stopt die precies bij:

<Users

Ik vermoed dus dat dit op de een of andere manier niet kan. Iemand een idee of het mogelijk is om een class in een class te serializen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Post even wat relevante code.

https://fgheysels.github.io/


Verwijderd

Topicstarter
M'n Settings class:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Collections;

namespace Interlink_XP
{
    [Serializable]
    public class Settings
    {
        public int ServerPort;
        public int ManagementPort;
        public string WelcomeFile;
        public string ManagementPassword;
      public ArrayList Users = new ArrayList();
    }
}

M'n User class:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections;

namespace Interlink_XP
{
    [Serializable]
    public class User
    {
        public string Username;
        public string Password;
        public string HomeDir;
        public bool Active;
        public bool HomeDirPermissions;
      public ArrayList Permissions = new ArrayList();
    }
}

En m'n permissions class:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;

namespace Interlink_XP
{
    [Serializable]
    public class Permission
    {
        public string Path;
        public bool Read;
        public bool Write;
        public bool List;
        public bool Delete;
        public bool Rename;
        public bool MakeFolder;
        public bool DeleteFolder;
        public bool RenameFolder;
        public bool SubFolder;
    }
}

Er zat nog wat ///<summary> code bij, maar die heb ik maar ffies weg gelaten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
En uw code om te serializen?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hehe, sorry, jah vergeten. Komt ie:
code:
1
2
3
4
            XmlSerializer serializer = new XmlSerializer(typeof(Interlink_XP.Settings));
            StringBuilder sb = new StringBuilder(10000);
            StringWriter sw = new StringWriter(sb);
            serializer.Serialize(sw, ServerSettings);

Verwijderd

Topicstarter
Iemand een idee waarom dit niet werkt???

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Waarom gebruik je een StringWriter een geen XmlTextWriter?
Omdat XmlTextWriter niet inherit van TextWriter.

Misschien kun je eens proberen om de method
code:
1
2
3
4
protected virtual void Serialize(
   object o,
   XmlSerializationWriter writer
);

te overriden en zo te gaan gebruiken, want wat staat er in de .NET SDK boven de lijst van alle Serialize methods van de XmlSerializer:
This member supports the .NET Framework infrastructure and is not intended to be used directly from your code.
Vreemd eigenlijk dat dit daar staat, want er is maar een Serialize method die virtual is, de rest kan je volgens mij ook gewoon zo gebruiken.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Okeej, laat maar heb het al gevonden. Ik moet namelijk ook opgeven welke class er in die ArrayList gaat komen. Dat kon ik doen met het XmlElement attribute. Het werkt nu als een trein. Trouwens, nog ffies vraagje, heeft een StringBuilder class een oneindige lengte of niet? Want als ik een lengte moet opgeven is het nogal onhandig, omdat ik natuurlijk geen flauw idee heb hoe groot m'n serializing string is :).
Pagina: 1