从nuget包序列化不可序列化的自定义对象,并将其存储在SQLite数据库中

时间:2018-07-16 04:12:05

标签: c# xamarin serialization sqlite nuget-package

我正在使用nuget包中的一些高度自定义的对象,这些对象需要使用Xamarin存储在本地SQLite数据库中。我尝试使用此代码

public static byte[] Serialize(ComplexType c)
    {
        byte[] arrayData;

        using(MemoryStream stream = new MemoryStream())
        {               
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize( stream, c );
            arrayData = stream.ToArray();
            stream.Close();
        }

        return arrayData;
    }

public static ComplexType Deserialize(byte[] arrayData)
    {
        ComplexType c;

        using(MemoryStream stream = new MemoryStream())
        {
            stream.Write( arrayData, 0, arrayData.Length );
            stream.Seek( 0, SeekOrigin.Begin );
            BinaryFormatter formatter = new BinaryFormatter();
            c = (ComplexType) formatter.Deserialize( stream );
        }

        return c;
    }

序列化和存储对象,然后检索它并反序列化它。似乎可以很好地进行序列化,但是现在事实证明该对象未标记为可序列化。我无法向其中添加SerializableAttribute属性,因为它来自nuget。我尝试在nuget中编辑对象定义,但是当然它已被锁定。

是否有任何简便的方法可以将未标记为可序列化的对象序列化,或者可以使用其他简单方法在SQLite数据库中存储不可序列化的自定义对象?还是我应该简单地写一些子句,并编写非常复杂的setter和getter来存储所有自定义对象的各个自定义属性,这些属性分解为各自的标准属性列表,并在每次来往数据库时对对象进行解构和重构?

我看到关于ISerializable和派生类的混合报告。在自定义对象的派生类上实现ISerializable会允许派生类被序列化吗? IXMLSerializable呢?这些都可以吗?我只是想在走错兔子洞之前弄清楚一些问题。

0 个答案:

没有答案