.NET, Warum muss ich verwenden *Angegebenen-Eigenschaft zu erzwingen-Serialisierung? Gibt es eine Möglichkeit, dies nicht tun?
Ich bin mit xml-Serialisierung in meinem Projekt zum serialisieren und Deserialisieren von Objekten basiert auf einem xml-schema. Ich benutzte den xsd-tool zu erstellen, Klassen zu verwenden, wenn serialisieren /Deserialisieren der Objekte.
Wenn ich zum serialisieren des Objekts, bevor ich gezwungen bin, um die *Angegebenen-Eigenschaft auf true, um die Kraft der serializer zu serialisieren alle propeties nicht string
.
Gibt es eine Möglichkeit zu zwingen, die Serialisierung aller Eigenschaften, ohne die *Angegebenen-Eigenschaft auf true?
- Können Sie sich mit Ihrer Klasse definition?
- Ich kann nicht die ganze Klasse... zu groß um hier zu posten. Was wäre am besten zu beheben mit?
- Es gibt keinen anderen Weg, dies zu tun, wenn Sie mit XML-Serialisierung. Können Sie den Datenvertrag-Serialisierung? Oder vielleicht LINQ to XML?
- Kann es möglich sein, gehen Sie mit dem Datenvertrag-Serialisierung aber nicht LINQ. Danke für die Anregung.
- Wir haben herausgefunden, dass jedes Element im schema müssen vom Typ string, um auf die Einstellung der *angegebenen-Eigenschaft. Danke Euch allen für Eure Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
FooSpecified
- Eigenschaft wird verwendet, um zu Steuern, ob dieFoo
- Eigenschaft serialisiert werden muss. Wenn Sie wollen immer zu serialisieren der Eigenschaft, entfernen Sie einfach dieFooSpecified
Eigenschaft.Ich weiß, das ist eine alte Frage, aber keine der anderen Antworten (ausser vielleicht der Vorschlag mit Xsd2Code) wirklich produziert eine ideale Lösung, wenn Sie die code-Generierung als Teil von Ihr zu bauen, und Ihre .xsd ändern kann mehrere Male während eines einzelnen release-Zyklus.
Einen einfachen Weg für mich zu bekommen, was ich wirklich wollte und immer noch verwenden xsd.exe war das ausführen der generierten Datei durch einen einfachen post-Prozessor. Der code für das post-Prozessor ist wie folgt:
Dem Ergebnis generiert wird code ähnlich dem folgenden:
Stand ich vor gleichen Problem und endete-Einstellung *die Angegebenen Eigenschaften zu wahren durch Reflexion.
Wie
Könnte man hinzufügen, einen default-Wert zu Ihrem schema und verwenden Sie dann die DefaultValueAttribute.
Zum Beispiel könnten Sie haben die folgende in Ihrem schema:
Dann die folgende Eigenschaft für die Serialisierung:
Diese sollten die Kraft der Farbe-Eigenschaft, damit immer serialisieren, die als "rot", wenn nicht explizit etwas anderes.
Fanden wir, dass die Antwort auf diese Frage ist zu stellen Sie sicher, dass der schema-Elemente sind definiert als
string
Datentypen. Dies wird sicherstellen, dass der serializer serialisiert alle Felder, ohne die Verwendung der korrelierten *angegebenen-Eigenschaft.