Тесто! У меня действительно было несколько проблем в этом коде. Я исправлял это ... спасибо, не видел тот.

ел бы как можно проще сериализовать любой объект в JSON, а затем просто преобразовать его обратно в объект type = safe. Может кто-нибудь сказать мне, что я делаю неправильно в методе расширения "FromJSONString"?

редактировать

Для вашего удобства ниже представлен полный и функциональный метод расширения. Дай мне знать, если увидишь ошибки.

     public static string ToJSONString(this object obj)
    {
        using (var stream = new MemoryStream())
        {
            var ser = new DataContractJsonSerializer(obj.GetType());

            ser.WriteObject(stream, obj);

            return Encoding.UTF8.GetString(stream.ToArray());
        }
    }
    public static T FromJSONString<T>(this string obj)
    {  
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj)))
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            T ret = (T)ser.ReadObject(stream);
            return ret;
        }
    }

Ответы на вопрос(2)

частности, вы должны изменить:

   MemoryStream stream1 = new MemoryStream(); 

чтобы на самом деле получить строку байтов:

   MemoryStream stream1 = new MemoryStream(Encoding.UTF8.GetBytes(obj))

Тем не менее, я бы также удостоверился, что правильно произвел очистку памяти и удалил свои объекты ... кроме того, вместо использования StreamReader (который также должен быть утилизирован), просто перекодировал поток памяти в виде строки UTF-8. Смотрите ниже для очистки кода.

   public static String ToJSONString(this Object obj)
   {
     using (var stream = new MemoryStream())
     {
       var ser = new DataContractJsonSerializer(obj.GetType());

       ser.WriteObject(stream, obj);

       return Encoding.UTF8.GetString(stream.ToArray());
     }
   }

   public static T FromJSONString<T>(this string obj)
   {
     using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj)))
     {
       DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
       T ret = (T)ser.ReadObject(stream);
       return ret;
     }
   }
 random6553723 янв. 2011 г., 01:52
Тесто! У меня действительно было несколько проблем в этом коде. Я исправлял это ... спасибо, не видел тот.
Решение Вопроса

Десериализация возвращает только базовый объект, а не сериализованный объект. Изменение Сериализации, как показано ниже, решит эту проблему.

public static String ToJSONString(this Object obj)
        {
            using (var stream = new MemoryStream())
            {
                var ser = new DataContractJsonSerializer(typeof(object));
                ser.WriteObject(stream, obj);
                return Encoding.UTF8.GetString(stream.ToArray());
            }
        }

Ваш ответ на вопрос