.NET中非常简单的JSON序列化

时间:2010-05-10 03:54:21

标签: .net json serialization

我有一些简单的.NET对象,我想将其序列化为JSON并再次返回。要序列化的对象集非常小,我控制实现,因此我不需要一个适用于所有内容的通用解决方案。由于我的程序集将作为库分发,我真的想避免依赖某些第三方DLL:我只想给用户一个他们可以引用的程序集。

我已经阅读了在.NET中转换为JSON时可以找到的其他问题。当然,推荐的JSON.NET解决方案确实有效,但它需要分发额外的DLL。

我不需要JSON.NET的任何奇特功能。我只需要处理一个简单的对象(甚至字典),它包含字符串,整数,DateTimes以及字符串和字节数组。在反序列化时,我很高兴回到字典 - 它不需要再次创建对象。

是否有一些非常简单的代码可以编译到我的程序集中来完成这个简单的工作?

我也试过了System.Web.Script.Serialization.JavaScriptSerializer,但它倒下的是字节数组:我想对它进行base64编码,甚至注册转换器也不能让我轻松实现这一点,因为API的方式工作(它不传递字段的名称)。

2 个答案:

答案 0 :(得分:4)

Json.NET已获得MIT许可,您只需下载源代码并仅包含应用程序所需的文件。

答案 1 :(得分:4)

允许使用.NET框架JavaScriptSerializer的可能解决方法是将base-64编码字节数组的转换器注册到子字段中,如下所示:

class ByteArrayBase64Converter : JavaScriptConverter
{
    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        return Convert.FromBase64String((string)dictionary["b64"]);
    }

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        return new Dictionary<string, object> { { "b64", Convert.ToBase64String((byte[])obj) } };
    }

    public override IEnumerable<Type> SupportedTypes
    {
        get { return new[] { typeof(byte[])}; }
    }
}


var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new JavaScriptConverter[] { new ByteArrayBase64Converter() });