我正在使用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呢?这些都可以吗?我只是想在走错兔子洞之前弄清楚一些问题。