Я хотел бы сериализовать классы, которые реализуют несколько интерфейсов, некоторые из которых наследуются от одного базового интерфейса. В настоящее время я использую BinaryFormatter, но я бы хотел использовать Proto-Buf .NET. Но я думаю, что в настоящее время я столкнулся бы с проблемами, подобными этой описанной проблеме:
как сериализовать класс реализует два интерфейса с одинаковым интерфейсом
Единственное возможное решение, о котором я сейчас думаю, - это обертка вокруг моих классов, которая сериализует более простой класс данных, который я использую для создания своих сложных классов.
Позвольте мне попытаться объяснить это далее, как в приведенном примере, у меня есть такая структура:
public interface IProduct
{
string SomeMethod();
}
public interface ISimpleProduct : IProduct
{
int SomeProperty { get; }
}
public interface IConstructionProduct : IProduct
{
int AnotherProperty {get;
}
public class ConcreteProduct : ISimpleProduct , IConstructionProduct
{
int SomeProperty {get; set;}
int AnotherProperty {get; set;}
string SomeMethod()
{
return "A concrete Product";
}
}
Теперь я хочу сериализовать ConcreteProduct, так как я думал, что это невозможно в настоящее время в proto-buf .net, который я рассматривал, чтобы иметь класс данных-обертки, например:
public class ProductData
{
int[] PropertyValues { get; set;}
}
и добавить в IProductInterface метод для построения каждого конкретного продукта, например
public interface IProduct
{
string SomeMethod();
IProduct BuildProduct(ProductData data);
ProductData ToData();
}
Конечно, ProductData будет более сложным в реальности, но только для концепции. Я бы сейчас сериализовал ProductData. Я не хотел бы изменять настройку интерфейса в классе Product ConcreteProduct, так как эти интерфейсы необходимы для дальнейшей работы в дальнейшем. Что мне нравится в этом подходе, так это то, что проблемы с расширениями могут решаться в реализациях BuildProduct.
И снова, я новичок, так что если что-то просто глупость, извините за это и поправьте меня.
@ Marc, я знаю, что вы автор, спасибо за эти вещи, но больше за другие посты (хотя я пока не использую proto-buf), например на DataTable, уже ваш пост о автоматически сгенерированных столбцах сохранил много времени для меня.