C# Serializer gesucht

BAGZZlash

Lt. Junior Grade
🎅Rätsel-Elite ’24
Registriert
März 2008
Beiträge
394
Ich erzeuge in C# eine Klasse, die einige Felder hat, die in den Geo-Informatik-Paketen GDAL bzw. OGR (NuGet) definiert sind, nämlich "DataSource" und "Layer". Ich möchte nun eine Instanz dieser Klasse serialisieren. Ich habe es schon mit einigen Serialisierern probiert (JSON, XmlSerializer, BinaryFormatter, System.Runtime.Serialization und DataContractSerializer). Ich komme aber nicht weiter, weil die GDAL- bzw. OGR-Klassen entweder nicht als [Serializable] markiert sind oder keinen parameterless constructor verwenden. Meine eigenen Felder kann ich ja soweit zurechtklöppeln, aber an die Klassen aus den Packages komme ich entweder gar nicht dran, oder ich mache mir damit die Kompatibilität nach außen hin kaputt.

Hat da jemand nen heißen Tipp? Hier mal ein Minimalbeispiel:

C#:
using OSGeo.GDAL;
using OSGeo.OGR;

using System.IO;
using System.Runtime.Serialization;

namespace MyProj
{
    public class Shapefile
    {
        public string sFilename;
        public int firstLayer = 0;
        public Boolean Loaded = false;
        public DataSource ds;
        public Layer Layer;

        // ...irgendwelcher anderer Mist, egal...
    }

public class Program
{
    static async Task Main(string[] args)
    {
        Shapefile TestShapeFile = new Shapefile();
        TestShapeFile.sFilename = "C:/Temp/MyShape.shp";
        Boolean LoadSuccess = TestShapeFile.LoadShapeFile(TestShapeFile.sFilename);

        Console.WriteLine("Shapefile loaded successfully: {0}", LoadSuccess);

        DataContractSerializer ser = new DataContractSerializer(typeof(Shapefile))
        FileStream writer = new FileStream("C:/Temp/Test.dta", FileMode.Create);
        ser.WriteObject(writer, TestShapeFile); //Fehler. In diesem Fall: Klasse "Layer" nicht als DataContract attributiert.

        // ...
 
Da wirst du um ein wenig custom serialization wohl nicht herum kommen. Die gute Nachricht ist das es auch dafür natürlich schon fix&fertig Implementierungen online zu finden gibt
 
  • Gefällt mir
Reaktionen: BAGZZlash
Oma Erna schrieb:
Die gute Nachricht ist das es auch dafür natürlich schon fix&fertig Implementierungen online zu finden gibt

Okay, kannst Du mir diesbezüglich etwas auf die Sprünge helfen? Wonach suche ich da?
 
Okay, cool, da hab' ich ja erstmal was zu tun. Danke. 😎
 
Alternativ könnte man auch die Datenstruktur einfach in eigens erstellte Objekte kopieren. Dazu einfach eine 1:1 Kopie von allen Klassen anlegen und diese dann serialisieren und deserialisieren. Zum Kopieren könnte man dann z. B. AutoMapper verwenden. Die Klassen könnte man ggf. mit einem SourceGenerator oder T4-Template generieren lassen.

Alternativ kann man eine Shapefile doch bestimmt auch in/von GeoJSON ex-/importieren. Wenn mich meine Erinnerungen aus der Vorlesung nicht täuschen.
 
  • Gefällt mir
Reaktionen: BAGZZlash
Zurück
Oben