C# object to string and back

前端 未结 3 2014
梦毁少年i
梦毁少年i 2021-02-05 16:13

My problem:
I have a dynamic codecompiler which can compile a snippet of code. The rest of the code. (imports, namespace, class, main function) is already there. The snipp

相关标签:
3条回答
  • 2021-02-05 16:49

    You will have to make a conversion method to display it and serialize it to be able to convert it back and forth.

    For instance:

        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();
            }
        }
    
    0 讨论(0)
  • 2021-02-05 16:49

    It's an old question but I think that I have a solution that can work better for most of the times (it creates a shorter string and doesn't require the Serializable attribute).

    The idea is to serialize the object to JSON and then convert it to base64, see the extension function:

    public static string ToBase64(this object obj)
    {
        string json = JsonConvert.SerializeObject(obj);
    
        byte[] bytes = Encoding.Default.GetBytes(json);
    
        return Convert.ToBase64String(bytes);
    }
    

    In order to create the object, we need to convert the base64 to bytes, convert to string and deserialize the JSON to T

    public static T FromBase64<T>(this string base64Text)
    {
        byte[] bytes = Convert.FromBase64String(base64Text);
    
        string json = Encoding.Default.GetString(bytes);
    
        return JsonConvert.DeserializeObject<T>(json);
    }
    
    0 讨论(0)
  • 2021-02-05 17:07

    Serialize the object using the BinaryFormatter, and then return the bytes as a string (Base64 encoded). Doing it backwards gives you your object back.

    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);
       }
    }
    
    0 讨论(0)
提交回复
热议问题