Как сериализовать объект в текст с информацией о типе? - PullRequest
0 голосов
/ 20 января 2010

Я хочу сериализовать объекты в текст, но я хочу сохранить информацию о типе, чтобы можно было десериализовать без ссылки на объект типа.

Сериализация XML дает мне нужный текст, но не сохраняет информацию о типе. Что я читал о двоичной сериализации, так это то, что она хранит информацию о типе, но ее нельзя прочитать. Похоже, что SoapFormater может делать то, что я хочу, но я не уверен, что это уместно.

Моя цель - вставить сериализованную строку в строковый объект, который в конечном итоге будет сохранен в столбце в базе данных (в данный момент это вне моего контроля).

Например, у меня есть базовый класс:

public class PluginSettings
{
    private string name;
    public string Name { ... }
}

и каждый плагин может извлекать из него свои собственные настройки.

public class ACBPluginSettings : PluginSettings
{
    private string mySetting;
    ...
}

Возможное решение, которое я придумал: Используйте BinaryFormatter, затем преобразуйте в строку Base64. Это выполнит работу, но она не читается человеком.

Ответы [ 2 ]

0 голосов
/ 21 января 2010

Я думаю , что System.Runtime.Serialization.NetDataContractSerializer может сделать то, что вы ищете.

Из MSDN:

Отличается NetDataContractSerializer из DataContractSerializer в одном Важный способ: NetDataContractSerializer включает в себя CLR введите информацию в сериализованный XML , тогда как DataContractSerializer не имеет. Следовательно NetDataContractSerializer можно использовать только если и сериализация и десериализация заканчивается тем же CLR типы.

0 голосов
/ 20 января 2010

Даже BinaryFormatter возвращает объект (или граф объектов на самом деле), который вам все равно придется преобразовывать в соответствующий тип. Из примера MSDN :

BinaryFormatter formatter = new BinaryFormatter();
Hashtable addresses = (Hashtable) formatter.Deserialize(fs);

Полагаю, вы хотели бы сделать что-то вроде:

CustomObject obj = new CustomObject();
formatter.Serialize(fs, obj);
var deserializedObj = formatter.Deserialize(source);

И deserializedObj напечатан как CustomObject. К сожалению, я не верю, что это возможно (или, по крайней мере, я не могу придумать, как это сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...