Serialisierung und Deserialisierung in eine XML-Datei, C#
Ich habe den folgenden code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication28
{
class Program
{
static void Main()
{
List<string> dirs = FileHelper.GetFilesRecursive(@"c:\Documents and Settings\bob.smith\Desktop\Test");
foreach (string p in dirs)
{
Console.WriteLine(p);
}
//Write Count
Console.WriteLine("Count: {0}", dirs.Count);
Console.Read();
}
static class FileHelper
{
public static List<string> GetFilesRecursive(string b)
{
//1.
//Store results in the file results list.
List<string> result = new List<string>();
//2.
//Store a stack of our directories.
Stack<string> stack = new Stack<string>();
//3.
//Add initial directory.
stack.Push(b);
//4.
//Continue while there are directories to process
while (stack.Count > 0)
{
//A.
//Get top directory
string dir = stack.Pop();
try
{
//B
//Add all files at this directory to the result List.
result.AddRange(Directory.GetFiles(dir, "*.*"));
//C
//Add all directories at this directory.
foreach (string dn in Directory.GetDirectories(dir))
{
stack.Push(dn);
}
}
catch
{
//D
//Could not open the directory
}
}
return result;
}
}
}
}
Den code oben funktioniert gut für rekursiv, herauszufinden, was mit Dateien/Verzeichnisse liegen in einem Ordner auf meiner c:.
Ich bin versucht zu serialisieren, die Ergebnisse, was dieser code tut, um eine XML-Datei, aber ich bin nicht sicher, wie dies zu tun.
Mein Projekt ist diese: findet alle Dateien/Verzeichnisse w/in einem Laufwerk, serialisieren in eine XML-Datei. Dann, das zweite mal, dass ich starten Sie das app, werde ich zwei XML-Dateien vergleichen. Dann möchte ich Deserialisieren, die XML-Datei aus der ersten Zeit lief ich diese app und die Unterschiede zu den aktuellen XML-Datei und erzeugen eines Berichts von Veränderungen (D. H. Dateien, die Hinzugefügt wurden, gelöscht, aktualisiert).
Ich war in der Hoffnung etwas Hilfe zu bekommen, wie ich bin ein Anfänger in C# und ich bin sehr sehr wackelig auf serialisieren und Deserialisieren. Ich bin mit viel Mühe Codierung. Kann mir jemand helfen?
Dank
InformationsquelleAutor yeahumok | 2009-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Ergebnis ist
List<string>
und das ist nicht direkt serializable. Müssen Sie wickeln Sie es, einen minimalistischen Ansatz:Und dann die (De)Serialisierung geht wie:
Aber beachten Sie, dass Sie nicht vergleichen, werden die XML-Daten in irgendeiner Weise (nicht praktisch). Sie verglichen wird (deserialzed) Liste von Instanzen. Und die XML ist SOAP formatiert, werfen Sie einen Blick auf es. Es mag nicht sehr nützlich sein, in einem anderen Kontext.
Und von daher könnte man leicht mit einem anderen Formatierungsprogramm (binary ist ein bisschen effizienter und flexibler).
Oder vielleicht wollen Sie nur zu bestehen die Liste der Dateien, die als XML. Das ist eine andere Frage.
InformationsquelleAutor Henk Holterman
Für alle, die Probleme mit xml-Serialisierung und de-Serialisierung. Habe ich eine Beispiel-Klasse zu tun, dazu weiter unten. Es funktioniert für rekursive Kollektionen (wie z.B. Dateien und Verzeichnisse).
Als er sagte, es ist ein 'sample' - Klasse. Es verfügt über alle Häufig verwendeten Elemente, die Sie nicht haben, etwas zu tun, aber Sie haben es zu erklären. Sehr nett danke
InformationsquelleAutor Tim
Dieser Klasse serialisiert und deserialisiert....hoffentlich hilft.
fehlen mir irgendwelche Anweisungen? ich verwende diese: verwenden von System; verwenden von System.Sammlungen.Generic; using System.Linq; Verwendung System.Text; using System.Xml; using System.- Laufzeit.Serialization; using System.Xml.Serialization; using System.IO;
welche Fehler sind Sie immer?
wenn Sie mit meinen genauen Klasse....SerializableDictionary ist mein Objekt (nicht im Beispiel).
gute Entscheidung.....Hinzugefügt using-Anweisungen
InformationsquelleAutor CSharpAtl
John:
Darf ich vorschlagen, eine Verbesserung? Anstelle der Verwendung von Dateinamen, verwenden Sie die FileInfo-Objekt. Dies ermöglicht es Ihnen, viel mehr genaue Informationen über jede Datei, anstatt nur, wenn es existiert unter dem gleichen Namen.
Auch, die die XmlSerializer-Klasse sollte das tun Sie gerade fein. Es wird nicht die Serialisierung von generischen Listen, so müssen Sie zur Ausgabe der Liste<> um ein array oder eine solche, aber andere als das:
Einfach und leicht, wenn es Ihnen wichtig ist, wie die serialisierten XML sieht.
Was auch immer Sie tun, verlieren Sie die leeren catch-block. Sie WERDEN es bereuen, schlucken Ausnahmen. Log Sie oder re-throw.
InformationsquelleAutor Faqa
Hilfe #1. Einrücken von code durch vier Leerzeichen zu haben es gesehen werden, als code, wenn Sie hier posten.
2: loswerden, dass try/catch-block, es wird Essen alle Ausnahmen, auch die, die Sie wissen wollen.
3: Haben Sie irgendwelche Versuch überhaupt zu serialisieren Sie Ihre Ergebnisse? Bitte Editiere deine Frage, um zu zeigen, was du versucht hast. Hinweis: benutzen Sie die XmlSerializer-Klasse.
Sie können prüfen, ob "Beispiele finden" ist der richtige Weg für Sie zu lernen. Manche Menschen lernen auch in diesem unstrukturierten Art und Weise. Andere benötigen jemanden, der bereits weiß, die Struktur des Wissens, um es in eine vernünftige Reihenfolge. Vielleicht ist das, was Sie brauchen. Vielleicht so etwas wie msdn.microsoft.com/en-us/library/90c86ass(VS.85).aspx Ihnen helfen würde, und nicht zufällig Beispiele, die Sie passieren zu finden.
InformationsquelleAutor John Saunders
for xml serialisieren, haben Sie mehrere Möglichkeiten:
in den letzten zwei, sehen Sie ein code-Beispiel in diese Antwort. (Siehe einige Fallstricke hier)
Sowie für Ihre rekursive Verzeichnis-Besucher, Sie könnte in Erwägung ziehen, macht es wirklich rekursiv: hier einige interessante code-Beispiele.
InformationsquelleAutor Benjol
Diese Frage ist genau wie dieser. Ich habe auch eine Antwort gepostet, die für Sie arbeiten:
Wie zu serialisieren?
InformationsquelleAutor CodeLikeBeaker