Ich habe den folgenden Beispiel-C # -Code, der automatisch von einem xsd mit der Anwendung svcutils.exe erstellt wurde.
%Vor%Es folgt ein Komponententest, der versucht, ein JSON-Beispieldokument zur UNameIt-Klasse zu deserialisieren.
%Vor%Leider schlägt der Test aus folgendem Grund fehl:
System.Runtime.Serialization.SerializationException: Es gab ein Fehler bei der Deserialisierung des Objekts vom Typ MyNamespace.Units.UNameIt. Das Wert 'Bar' kann nicht als Typ 'Int64' geparst werden.
Der Test wird bestanden, wenn ich meine JSON-Zeichenfolge aktualisiere, um den String-Spezifizierer für die Enumeration durch eine Ganzzahl zu ersetzen, z. B.
%Vor%Ich habe nicht die Flexibilität, das mitgelieferte JSON zu ändern, also muss ich herausfinden, wie man die Zeichenfolge Enum-Darstellung vielleicht bei der Serialisierung konvertiert. Idealerweise möchte ich dies vereinfachen, ohne meine Klasse für die automatische Generierung ändern zu müssen, denn sobald ich die Klasse neu generiere, würde ich meine Änderungen verlieren.
Ich frage mich, ob es möglich wäre, den DataContractJsonSerializer auf benutzerdefiniertes Enumeration zu erweitern? Oder gibt es vielleicht einen besseren Weg, dies zu tun?
Dieses Verhalten ist nach Design . Hier ein Zitat aus dem Enumerations- und JSON-Absatz in MSDN :
Aufzählungselementwerte werden in JSON als Zahlen behandelt anders als in Datenverträgen behandelt werden, wo sie sind als Mitgliedsnamen enthalten.
Außerdem wird der DataContractJsonSerializer automatisch alle Enumerationen serialisieren, Daher wird das EnumMemberAttribute tatsächlich ignoriert.
Eine Problemumgehung finden Sie diese Antwort auf SO .
>Tags und Links wcf c# json datacontractserializer xsd