Объект С# для строки и обратно
Моя проблема:
У меня есть динамический codecompiler. Можно скомпилировать фрагмент кода. Остальная часть кода. (импорт, пространство имен, класс, основная функция) уже существует. Snippit вставляется в это, а затем он компилируется в сборку и выполняется. Таким образом, пользователь может выполнять фрагмент кода. Основная функция (где выполняется snippit) имеет тип возвращаемого объекта. Этот снипп выполняется на удаленном компьютере. Код отправляется клиентом на веб-сервер. Удаленный компьютер считывает код с веб-сервера и выполняет его. На удаленном компьютере я могу
легко просмотреть тип возвращаемого объекта и его значение. Hower я могу отправлять строки только на веб-сервер.
Вопрос: как мне преобразовать объект в строку, независимо от того, какой тип и как его преобразовать?
Пробовал: я попытался использовать ToString(), который отлично работает при использовании int, string, double и bool. Но с изображением или другим типом это не работает, потому что мне также нужно его вернуть:)
Я был бы рад, если бы кто-нибудь мог мне помочь:)
Привет
Ответы
Ответ 1
Сериализуйте объект с помощью BinaryFormatter, а затем верните байты в виде строки (кодировка Base64). Выполняя это назад, вы возвращаете свой объект.
public string ObjectToString(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
new BinaryFormatter().Serialize(ms, obj);
return Convert.ToBase64String(ms.ToArray());
}
}
public object StringToObject(string base64String)
{
byte[] bytes = Convert.FromBase64String(base64String);
using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length))
{
ms.Write(bytes, 0, bytes.Length);
ms.Position = 0;
return new BinaryFormatter().Deserialize(ms);
}
}
Ответ 2
Вам нужно будет сделать способ преобразования, чтобы отобразить его и сериализовать его, чтобы он мог конвертировать его назад и вперед.
Например:
public static string ConvertToDisplayString(object o)
{
if (o == null)
return "null";
var type = o.GetType();
if (type == typeof(YourType))
{
return ((YourType)o).Property;
}
else
{
return o.ToString();
}
}