当前位置: 首页 > 面试题库 >

使用JavaScriptSerializer序列化字典

卫财
2023-03-14
问题内容

显然,IDictionary<string,object>被序列化为KeyValuePair对象数组(例如[{Key:"foo", Value:"bar"}, ...])。是否可以将其序列化为一个对象(例如{foo:"bar"})?


问题答案:

尽管我同意JavaScriptSerializer是胡扯,而Json.Net是更好的选择,但是您可以通过一种方法使JavaScriptSerializer序列化所需的方式。您将必须注册一个转换器,并使用如下方法覆盖Serialize方法:

    public class KeyValuePairJsonConverter : JavaScriptConverter
{
    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        var instance = Activator.CreateInstance(type);

        foreach (var p in instance.GetType().GetPublicProperties())
        {
            instance.GetType().GetProperty(p.Name).SetValue(instance, dictionary[p.Name], null);
            dictionary.Remove(p.Name);
        }

        foreach (var item in dictionary)
            (instance).Add(item.Key, item.Value);

        return instance;
    }
    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        var result = new Dictionary<string, object>();
        var dictionary = obj as IDictionary<string, object>;
        foreach (var item in dictionary)
            result.Add(item.Key, item.Value);
        return result;
    }
    public override IEnumerable<Type> SupportedTypes
    {
        get
        {
            return new ReadOnlyCollection<Type>(new Type[] { typeof(your_type) });
        }
    }
}

JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJsonConverter() });
jsonOfTest = javaScriptSerializer.Serialize(test);
// {"x":"xvalue","y":"\/Date(1314108923000)\/"}

希望这可以帮助!



 类似资料:
  • 问题内容: 我将反序列化的json文件的结构如下所示; 我创建了一个类,该类具有文件名作为JavaScriptSerializer的属性。我将用于反序列化json的代码如下; ``` using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) { ``` 最好的情况是什么? 问题答案: 您需要创建一个包含用户

  • 问题内容: 我正在使用JavaScriptSerializer将对象序列化到文件为JSON格式。但是结果文件没有可读的格式。如何允许格式化以获取可读文件? 问题答案: 似乎没有内置的工具可以格式化JSON-serializer的输出。 我认为发生这种情况的原因是使我们通过网络发送的数据最少。 您确定需要代码中的格式化数据吗?还是只想在调试期间分析JSON? 有很多的在线服务,提供这样的功能:1,2

  • 本文向大家介绍C#使用JavaScriptSerializer序列化时的时间类型处理,包括了C#使用JavaScriptSerializer序列化时的时间类型处理的使用技巧和注意事项,需要的朋友参考一下 最近在做一个数据交换服务接口,用的 .NET Web API 项目。需要监控每次请求的数据,也就是操作日志。请求数据为实体对象,所以我用了序列化将请求内容读取并写入日志。咋一看,好像并没有什么问题

  • 问题内容: 我正在尝试对a进行序列化/反序列化,如果对象是简单类型,这似乎很好,但是当对象更复杂时,它不起作用。 我有这个课: 在我的字典中,我添加了一个带有“重定向链”键的键和一些带有“状态”,“网址”,“父网址”键的简单字符串。我从JSON.Net返回的字符串如下所示: 我用来序列化的代码如下: 反序列化我正在做的事情: 字典恢复正常,所有字符串恢复正常,但是列表未正确反序列化。它只是作为 当

  • 问题内容: 有什么方法可以用Newtonsoft Json.Net json序列化程序替换内置的WCF服务应用程序JavascriptSerializer? 问题答案: WCF不使用。它使用DataContractJsonSerializer。是的,您可以通过编写自定义消息格式化程序来用Json.NET替换它,如以下博客文章所示。

  • 本文向大家介绍C# JavaScriptSerializer序列化时的时间处理详解,包括了C# JavaScriptSerializer序列化时的时间处理详解的使用技巧和注意事项,需要的朋友参考一下 最近被序列化困扰了一下下。原因看下面代码 输出如下图所示: 猜测这里是由于js初始化时间的时候往往是向 1970/01/01 添加毫秒数,JavaScriptSerializer进行序列化的时候也会格