Toon posts:

[C#] Class uit ander project deserializen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben met een project bezig waarin ik een viertal classes gemaakt heb die de instelling van het programma beschrijven. Deze classes heten: Settings, User, Permission en SecurityRule. Nu heb ik dus het hoofd project wat met deze instellingen wil gaan werken. Maar de instellingen worden gecodeerd en in binair formaat opgeslagen in een bestand. Nu wil ik dus een klein programmatje schrijven om de settings op een eenvoudige manier te laten zien (bij voorkeur in XML). Dus ik heb het volgende gedaan:

Een nieuw project gestart dat in een subfolder van het project staat van het hoofdproject (dat Interlink XP heet). Dit nieuwe project heet Settings Reader. Vervolgens heb ik de bestanden Settings.cs, User.cs, Permission.cs en SecurityRule.cs gelinked in dit nieuwe project. Daarna heb ik de volgende code in de Load event handler gezet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
byte[] Key = {???};
byte[] IV = {???};
RijndaelManaged rij = new RijndaelManaged();
rij.Key = Key; rij.IV = IV; rij.Mode = CipherMode.ECB; rij.Padding = PaddingMode.PKCS7;
FileStream fs = new FileStream("c:\\windows\\system32\\Interlink XP Settings.bin", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
CryptoStream cs = new CryptoStream(fs, rij.CreateDecryptor(), CryptoStreamMode.Read);
Settings ServerSettings = new Settings();
IFormatter formatter = new BinaryFormatter();
try 
{
    ServerSettings = (Settings) formatter.Deserialize(cs);
}
catch (Exception ex) 
{
    Debug.WriteLine(ex);
}
fs.Close();
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
serializer.Serialize(sw, ServerSettings);
txtSettings.Text = sb.ToString();

PS: Ik heb m'n Key en IV ffies er uit gehaald, maar deze klopt, en ik heb hem gekopieërd uit het hoofd project.

Het probleem is dus nu dat op het regeltje: ServerSettings = (Settings) formatter.Deserialize(cs); ik een exception krijg. Om precies te zijn de exception:
code:
1
2
3
An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll

Additional information: File or assembly name Interlink XP, or one of its dependencies, was not found.

Nu vraag ik me af, waarom heeft dit project de Assembly Interlink XP nodig? Ik heb immers de bestanden gelinked en de namespace is dus beschikbaar, maar waarom dan toch die Assembly? Overigens werkt het in een ander project wel, alleen gaat 't deserializen daar via XML.

Verwijderd

Tja, hij kan imho de file gewoon niet vinden. Lijkt me logisch

Verwijderd

Topicstarter
Jah, maar waarom heeft ie die file nodig in de eerste plaats? Is niet logisch, heeft het andere project waar 'k ongeveer 't zelfde doe niet nodig :?.

Verwijderd

serialization is het wegschrijven van een class in een format naar een stream. De stream naam heb je nodig, bv de filename. Hoe wil je anders je geserializede class teruglezen?

Verwijderd

Topicstarter
Hij deserialized toch niet vanuit dat bestand. Hij deserialized uit c:\windows\system32\Interlink XP Settings.bin. Dat file'tje kan die ook wel vinden. Maar een ander file'tje wat ie naar mijn idee niet nodig heeft kan die niet vinden.