У меня есть рабочий XML-сериализатор, который сериализует объект C# для объекта в AutoCAD. Я хотел бы иметь возможность сделать то же самое, но с Binary Serialization для случаев, когда XML не работает. До сих пор мой метод сериализации выглядит следующим образом:Binary Serialization to ResultBuffer в C#
public static void BinarySave(Entity entityToWriteTo, Object objToSerialize, string key = "default")
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter serializer = new BinaryFormatter();
serializer.Serialize(stream, objToSerialize);
stream.Position = 0;
ResultBuffer data = new ResultBuffer();
/*Code to get binary serialization into result buffer*/
using (Transaction tr = db.TransactionManager.StartTransaction())
{
using (DocumentLock docLock = doc.LockDocument())
{
if (!entityToWriteTo.IsWriteEnabled)
{
entityToWriteTo = tr.GetObject(entityToWriteTo.Id, OpenMode.ForWrite) as Entity;
}
if (entityToWriteTo.ExtensionDictionary == ObjectId.Null)
{
entityToWriteTo.CreateExtensionDictionary();
}
using (DBDictionary dict = tr.GetObject(entityToWriteTo.ExtensionDictionary, OpenMode.ForWrite, false) as DBDictionary)
{
Xrecord xrec;
if (dict.Contains(key))
{
xrec = tr.GetObject(dict.GetAt(key), OpenMode.ForWrite) as Xrecord;
xrec.Data = data;
}
else
{
xrec = new Xrecord();
xrec.Data = data;
dict.SetAt(key, xrec);
tr.AddNewlyCreatedDBObject(xrec, true);
}
xrec.Dispose();
}
tr.Commit();
}
data.Dispose();
}
}
}
Это в значительной степени основан на моем XML Serializer только я понятия не имею, как получить сериализированный объект в resultbuffer быть добавлены к XRecord из entityToWriteTo.
Я просто собираюсь посоветовать: * регулярно * видеть жертв «BinaryFormatter» - кто из-за небольшого рефакторинга или ревизии не может десериализовать свои данные; Я не могу придумать очень много сценариев, когда я бы посоветовал людям использовать «BinaryFormatter». Двоичная сериализация * сама по себе - это хорошо - существует ряд совершенно хороших бинарных форматов сериализации; Я говорю * только * о 'самом BinaryFormatter' –
Я не уверен, если бы это сработало, и, возможно, @Marc Gravel мог бы позвонить в это. Но я считаю, что protobuf может справиться с этой задачей. Я считаю, что он имеет функциональность для сериализации внешних объектов. –
@Trae yep, protobuf-net будет работать для многих моделей - не все. Мне нужно будет подробнее ознакомиться с комментариями –