var speichern = GetStore (); Verwenden (IsolatedStorageFileStream fileStream = store.OpenFile (RootData, FileMode.Create)) { DataContractSerializer Serializer = neuer DataContractSerializer (typeof (List)); serializer.WriteObject (dateiStream, rootdatalist); }
Aber das serialisiert nur den Rootdatalist und nicht die Unterelemente. Der Rootdatalist hat eine List-Eigenschaft für Knoten, wie kann ich diese serialisieren, damit die Listenhierarchie serialisiert wird?
Da es sich um dbml-generierte Objekte handelt, ist die Nodes-Eigenschaft von Root
%Vor%Meine Datenkontextrückgabe lautet:
%Vor%Das Knoten-Entityset sieht in meinem dbml-Designer wie folgt aus:
%Vor% Außerdem muss das [Include]
-Tag über meinen Eigenschaften stehen oder nichts wird geladen.
Bearbeiten::
Für andere, die dbml-Klassen serialisieren möchten Ссылка
Können Sie weitere Informationen zu den Vertragsarten hinzufügen? Ich würde erwarten zum Beispiel, dass Root
als Datenvertrag markiert ist, mit dem Mitglied als Datenelement, zum Beispiel:
Das sollte dann funktionieren. Wenn nicht, würde es wirklich helfen, Ihre Typen zu sehen (oder eine beschnittene Version von ihnen, die das Problem darstellt).
Das DataContractSerializer
muss über alle der Typen in Ihrem Objektdiagramm wissen.
Verwenden Sie die Konstruktorüberladung , mit der Sie diese sowie den Stammtyp angeben können:
%Vor% OK; Ich habe noch einmal versucht, dies zu reproduzieren, indem ich die Person
/ PersonPhone
-Tabellen (im Schema Person
) von einer neuen AdventureWorks2008R2-Installation verwendet habe.
Ich habe den Datenkontext auf "unidirektionale" Serialisierung gesetzt, mit Standard-LINQ-zu-SQL-Bindings usw. (keine Anpassungen).
Um mit Ihrem Szenario zu vergleichen, kann Person
PersonPhone
s haben, und wir sind an einem List<Person>
interessiert. Ich habe mir 3 Szenarien angeschaut, von denen jedes den vollständigen Datensatz betrachtet:
Person
records LoadWith
, um die Telefoneinträge zu erhalten Hier sind die Ergebnisse; Wie Sie sehen, scheitert 1 in der Art, wie Sie beschreiben, aber 2 & amp; 3 funktionieren gut, mit der Unterscheidung, dass 3 signifikant mehr TSQL funktioniert.
So ohne weitere Details (idealerweise ein vollständig reproduzierbares Beispiel), es ist sehr schwer, weiter zu untersuchen ...
Ergebnisse:
%Vor%Prüfstand:
%Vor% Als Nebenbemerkung konnte ich >> protobuf-net optimieren, um L2S dazu zu bringen, ihm die Daten zu geben (wobei DataContractSerializer
beschließt, es zu ignorieren), aber dies reproduziert Szenario 3 mit einem großen N +1 Kosten Folglich plane ich nicht, das zu verfolgen ...
Tags und Links c# serialization