Hallo,
ich verwende folgendes Enum innerhalb eines Objektes, dass ich deserialisieren möchte. Das klappt soweit prima.
[Serializable]
public enum WeekDays
{
[XmlEnum("1")]
Sunday = 1,
[XmlEnum("2")]
Monday = 2,
[XmlEnum("4")]
Tuesday = 4,
[XmlEnum("8")]
Wednesday = 8,
[XmlEnum("16")]
Thursday = 16,
[XmlEnum("32")]
Friday = 32,
[XmlEnum("64")]
Saturday = 64,
[XmlEnum("65")]
WeekendDays = Sunday | Saturday,
[XmlEnum("62")]
WorkDays = Monday | Tuesday | Wednesday | Thursday | Friday,
[XmlEnum("127")]
EveryDay = WeekendDays | WorkDays
}
Nun ergibt sich aber die Problematik, dass ich Kombinationen derart ( Monday | Wednesday o.ä.) deserialisieren möchte. Ich erhalte eine Exception, dass der Wert nicht vorhanden ist.
Ich möchte natürlich unbedingt verhindern, dass ich alle Kombinationen explizit definieren muss. Wie kann ich das umgehen?
Danke und Grüße,
Marc
Hallo Spook,
ich erhalte mit
[FlagsAttribute]
[Serializable]
public enum WeekDays
{
[XmlEnum("1")]
Sunday = 1,
[XmlEnum("2")]
Monday = 2,
[XmlEnum("4")]
Tuesday = 4,
[XmlEnum("8")]
Wednesday = 8,
[XmlEnum("16")]
Thursday = 16,
[XmlEnum("32")]
Friday = 32,
[XmlEnum("64")]
Saturday = 64,
[XmlEnum("65")]
WeekendDays = Sunday | Saturday,
[XmlEnum("62")]
WorkDays = Monday | Tuesday | Wednesday | Thursday | Friday,
[XmlEnum("127")]
EveryDay = WeekendDays | WorkDays
}
die gleiche Fehlermeldung: "{"Instanzvalidierungsfehler: '10' ist kein gültiger Wert für global::RecurrenceLibary.WeekDays."}"
[Flags]
habe ich auch bereits versucht.
Danke und Grüße, Marc
Wenn Kombinationswerte möglich sein sollen, musst du das FlagsAttribute angeben.
Lies dir mal enum (C#-Referenz) durch.
Hat aber nichts mit der Serialisierung zu tun.
Edit:
Zu langsam...
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
Hallo Scavanger,
ich habe natürlich zuvor gegoogelt und herausgefunden, dass man [Flags] setzen muss, wenn man mit Kombinationen arbeitet. Leider hilft das nicht beim Deserialisieren.
Grüße, Marc
Hi,
ggf. liegt dein Problem an anderer Stelle !?
Folgender Code funktioniert bei mir ohne Probleme:
[FlagsAttribute]
[Serializable]
public enum WeekDays
{
[XmlEnum("1")]
Sunday = 1,
[XmlEnum("2")]
Monday = 2,
[XmlEnum("4")]
Tuesday = 4,
[XmlEnum("8")]
Wednesday = 8,
[XmlEnum("16")]
Thursday = 16,
[XmlEnum("32")]
Friday = 32,
[XmlEnum("64")]
Saturday = 64,
[XmlEnum("65")]
WeekendDays = Sunday | Saturday,
[XmlEnum("62")]
WorkDays = Monday | Tuesday | Wednesday | Thursday | Friday ,
[XmlEnum("127")]
EveryDay = WeekendDays | WorkDays
}
public MainWindow()
{
InitializeComponent();
XmlSerializer ser = new XmlSerializer(typeof(WeekDays));
FileStream fsOpen = new FileStream("test.xml", FileMode.Open);
XmlReader reader = XmlReader.Create(fsOpen);
var x = ser.Deserialize(reader);
// x --> Sunday | Monday | Tuesday | Saturday
reader.Close();
fsOpen.Close();
WeekDays day = (WeekDays)71;
File.Delete("test.xml");
Stream fs = new FileStream("test.xml", FileMode.CreateNew);
XmlWriter writer = new XmlTextWriter(fs, Encoding.Unicode);
ser.Serialize(writer, day);
writer.Close();
}
Gruß,
t0ms3n
Hallo t0ms3n,
in der Tat! Das Problem lag/liegt woanders. Ich bin der Sache auch bereits auf der Spur...
Grüße, Marc