优化的JSON串行器/解串器作为一个扩展的方法? [英] Optimized JSON serialiser / deserialiser as an extension method?

查看:110
本文介绍了优化的JSON串行器/解串器作为一个扩展的方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想尽可能轻松地任何对象序列化到JSON,然后简单地将其转换回类型=安全的对象。谁能告诉我什么,我在FromJSONString扩展方法做错了吗?



修改



为了您的方便,一个完整的,功能扩展方法如下。不要让我知道,如果你看到的错误。

 公共静态字符串ToJSONString(此对象OBJ)
{
按(VAR流=新的MemoryStream())
{
变种SER =新DataContractJsonSerializer(obj.GetType());

ser.WriteObject(流OBJ);

返回Encoding.UTF8.GetString(stream.ToArray());
}
}
公共静态牛逼FromJSONString< T>(此字符串OBJ)
{
使用(VAR流=新的MemoryStream(Encoding.UTF8.GetBytes(OBJ )))
{
DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof运算(T)); $ B $(B T)= RET(T)ser.ReadObject(流);
返回RET;
}
}


解决方案

这如预期在继承的对象的情况下是行不通的。



反序列化只返回基本对象,而不是序列化对象。更改如下序列化可以解决这个问题。

 公共静态字符串ToJSONString(此对象OBJ)
{
按(VAR流=新的MemoryStream())
{
变种SER =新DataContractJsonSerializer(typeof运算(对象));
ser.WriteObject(流OBJ);
返回Encoding.UTF8.GetString(stream.ToArray());
}
}


I'd like to serialize any object as easily as possible to JSON, and then convert it back to the type=safe object simply. Can anyone tell me what I'm doing wrong in the "FromJSONString" extension method?

Edit

For your convenience, a complete and functional extension method is below. Do let me know if you see errors.

     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;
        }
    }

解决方案

This is not working as expected in case of inherited objects.

The deserialization returns only the base object and not the serialized object. Changing Serialization as below will solve this issue.

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());
            }
        }

这篇关于优化的JSON串行器/解串器作为一个扩展的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆