Eine Option wäre, die Datei als JSON
Textdatei in Ihre Anwendung als Embedded Resource
eingebettet zu speichern.
eine Probe Json-Datei verwenden, wie unten:
{
"Data": [
{
"Title": "Title 1",
"Description": "Description 1",
"Developer": "Developer 1",
"Year": 1996
},
{
"Title": "Title 2",
"Description": "Description 2",
"Developer": "Developer 2",
"Year": 1997
},
{
"Title": "Title 3",
"Description": "Description 3",
"Developer": "Developer 3",
"Year": 1998
}
]
}
Weiter Sie diese in Ihre Lösung Aktion, indem die Build einbetten können (im Eigenschaftsfenster) zu Embedded Resource
dieses Sie JSON-Daten-Datei einbetten in Ihre Baugruppenausgabe.
Als nächstes können wir JSON.Net
verwenden, um die Daten in eine Dataset
zu deserialisieren.
public static DataSet LoadData()
{
var asm = typeof(Program).Assembly;
var jsonText = "";
using(var stream = asm.GetManifestResourceStream($"{asm.GetName().Name}.data.json"))
{
using (var reader = new StreamReader(stream))
{
jsonText = reader.ReadToEnd();
}
}
DataSet dataSet = null;
try
{
dataSet = JsonConvert.DeserializeObject<DataSet>(jsonText);
}
catch
{
}
return dataSet;
}
Die obige Methode ist ziemlich geradlinig. Zuerst lesen wir die JSON-Daten (Dateiname ist data.json
) aus der Baugruppe. Beachten Sie, dass der Pfad zu der Datei YourNameSpace.<FileName>
sein sollte. Als nächstes verwenden wir die JsonConvert.DeserializeObject<DataSet>()
, um den JSON-Text in ein Dataset
-Objekt zurück zu konvertieren. Das Ergebnis enthält eine einzelne Tabelle mit dem Namen Data
(der Stammknoten unserer JSON-Datei), die Sie dann in Ihrer Anwendung verwenden können.
Jetzt müssen Sie nur der JSON-Datei hinzufügen, um weitere Daten hinzuzufügen. Jetzt, da Sie diese Datei in Ihre Assembly (exe) einfügen wollen und keine zusätzliche Datei haben, können Sie keine Daten in die Assembly schreiben (wie in der Anwendung eingebettet).
Wenn Sie jedoch Schreibzugriff benötigen, könnten Sie (beim Start) feststellen, ob die Datei im Anwendungspfad vorhanden ist. Wenn es nicht vorhanden ist, können Sie die Standarddatendatei lesen und dann den Inhalt in eine Ausgabedatei wie unten schreiben.
public static DataSet LoadDataSet()
{
var asm = typeof(Program).Assembly;
string filePath = Path.GetDirectoryName(asm.CodeBase).ToLowerInvariant().Replace(@"file:\", "");
filePath = Path.Combine(filePath, "data.json");
string jsonText = null;
if (!File.Exists(filePath))
{
using (var stream = asm.GetManifestResourceStream($"{asm.GetName().Name}.data.json"))
{
using (var fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.ReadWrite))
{
stream.CopyTo(fs);
}
}
}
else
jsonText = File.ReadAllText(filePath);
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(jsonText);
return dataSet;
}
public static void SaveDataSet(DataSet dataSet)
{
var asm = typeof(Program).Assembly;
string filePath = Path.GetDirectoryName(asm.CodeBase).ToLowerInvariant().Replace(@"file:\", "");
filePath = Path.Combine(filePath, "data.json");
string jsonText = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
File.WriteAllText(filePath, jsonText);
}
Im Codebeispiel oben wir die Dataset
, indem man zuerst überprüfen, werden geladen, wenn die Datei in dem aktuellen Anwendungsverzeichnis existiert.Wenn es nicht existiert, kopieren wir den Inhalt effektiv von der eingebetteten Ressource auf die Platte unter Verwendung eines .
Dann können wir einfach File.ReadAllText()
aufrufen, um den Inhalt von der Festplatte zu lesen und dann mit der Methode vorher in einen Datensatz zu konvertieren.
Wir haben dann eine Methode, um die Änderungen im Dataset zu speichern. Da die Ressource nun in die Anwendung eingebettet ist, können wir die Version in der Assembly nicht ändern, jedoch können wir die Datei auf der Festplatte einfach überschreiben.
Sie können [Rows.Add] (https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/datensatz-datatable-dataview/adding-data-to-a-datatable) um die Werte für eine Zeile in einer Anweisung hinzuzufügen, aber selbst mit 200 Zeilen ist dies eine lästige Aufgabe. Wenn Sie keine Datenbank möchten, können Sie eine einfache Textdatei verwenden. –