首页 新闻 会员 周边

json 还原的问题.

0
悬赏园豆:100 [待解决问题]

我有一个需求.需要序列化字符串

        static byte[] Serialize(object data)
        {
            byte[] body;
            var serializer = new Newtonsoft.Json.JsonSerializer();

            using (var ms = new MemoryStream())
            {
                using (var sw = new StreamWriter(ms, Encoding.UTF8))
                {
                    using (Newtonsoft.Json.JsonWriter writer = new Newtonsoft.Json.JsonTextWriter(sw))
                    {
                        writer.Formatting = Newtonsoft.Json.Formatting.Indented;
                        serializer.Serialize(writer, data);
                        sw.Flush();
                        body = ms.ToArray();
                    }
                }
            }

            return body;

            //BinaryFormatter formatter = new BinaryFormatter();
            //MemoryStream rems = new MemoryStream();
            //formatter.Serialize(rems, data);
            //return rems.GetBuffer();
        }

 

然后.怎么再把这个 byte[] 还原成对像呢??

以下代码不可以还原.....

复制代码
static object Deserialize(byte[] data)
        {

            using (var ms = new MemoryStream(data))
            {
                using (var sw = new StreamReader(ms, Encoding.UTF8))
                {
                    using (Newtonsoft.Json.JsonReader jr = new Newtonsoft.Json.JsonTextReader(sw))
                    {
                        var t = serializer.Deserialize(jr);
                        return t;
                    }
                }
            }

 



// var serializer = new Newtonsoft.Json.JsonSerializer(); // serializer.Deserialize() //BinaryFormatter formatter = new BinaryFormatter(); //MemoryStream rems = new MemoryStream(data); //data = null; //return formatter.Deserialize(rems); }
复制代码

 

 

 

luckdv的主页 luckdv | 初学一级 | 园豆:102
提问于:2016-08-04 01:49
< >
分享
所有回答(5)
0

通过data参数得到一个JsonReader对象,然后JSONSerializer.Deserialize<T>(JsonReader);

jello chen | 园豆:7306 (大侠五级) | 2016-08-04 08:38
0

高分蹭分,有Serialize,找相应的Deserialize。。。

顾晓北 | 园豆:10844 (专家六级) | 2016-08-04 08:54
0

var serializer = new Newtonsoft.Json.JsonSerializer();


BinaryFormatter formatter = new BinaryFormatter();
MemoryStream rems = new MemoryStream(data);
data = null;
return serializer.Deserialize(formatter.Deserialize(rems));

刘宏玺 | 园豆:14020 (专家六级) | 2016-08-04 09:53

这个是不行的.

不能直接反序列化 object 

支持(0) 反对(0) luckdv | 园豆:102 (初学一级) | 2016-08-04 12:02

@luckdv: return serializer.Deserialize<T>(formatter.Deserialize(rems));

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-08-05 15:35
0

想的有点儿多~,先用下面方法转成json。

String json=Newtonsoft.Json.JsonConvert.SerializeObject(value);

然后把字符串json转为byte[]。之后把byte[]转为字符串,再用

Person p=Newtonsoft.Json.JsonConvert.DeserializeObject<Person>(json);

 

 

ensleep | 园豆:1682 (小虾三级) | 2016-08-04 17:52
0

body = ms.ToArray();

反写回去,就可以了

jgig11 | 园豆:338 (菜鸟二级) | 2016-08-15 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册