- 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:
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.
// ...