Объект С# для строки и обратно

Моя проблема: У меня есть динамический 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();
        }
    }