博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExpandoObject对象的JSON序列化
阅读量:6978 次
发布时间:2019-06-27

本文共 2003 字,大约阅读时间需要 6 分钟。

如果:

dynamic expando = new ExpandoObject();

d.SomeProp=SomeValueOrClass;

然后,我们在控制器中:

return new JsonResult(expando);

那么,我们的前台将会得到:

[{"Key":"SomeProp", "Value": SomeValueOrClass}]

而实际上,我们知道,JSON 格式的内容,应该是这样的:

{SomeProp: SomeValueOrClass}

于是乎,我们需要一个自定义的序列化器,它应该如下:

public class ExpandoJSONConverter : JavaScriptConverter

{
    public override IEnumerable<Type> SupportedTypes
    {
        get
        {
            return new ReadOnlyCollection<Type>(new Type[] { typeof(System.Dynamic.ExpandoObject) });
        }
    }

    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)

    {
        throw new NotImplementedException();
    }

    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 ContentResult GetSomeThing(string categores)

{
    return ControllProctector.Do1(() =>
        {

            …

            var serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJSONConverter() });
            var json = serializer.Serialize(expando);
            return new ContentResult
            {
                Content = json,
                ContentType = "application/json"
            };
        });
}

我们的浏览器就能得到正确的 JSON 字符串了。

 

备注:其它的方法还有

一:

dynamic expando = new ExpandoObject();

expando.Blah = 42;
expando.Foo = "test";
...

var d = expando as IDictionary<string, object>;

d.Add("SomeProp", SomeValueOrClass);

// After you've added the properties you would like.

d = d.ToDictionary(x => x.Key, x => x.Value);
return new JsonResult(d);

二: JSON.NET

dynamic expando = new ExpandoObject();

expando.name = "John Smith";
expando.age = 30;

var json = JsonConvert.SerializeObject(expando);

三:Content-method:

public ActionResult Data()

{
    dynamic expando = new ExpandoObject();
    expando.name = "John Smith";
    expando.age = 30;

    var json = JsonConvert.SerializeObject(expando);

    return Content(json, "application/json");

}

参考:

转载地址:http://ggkpl.baihongyu.com/

你可能感兴趣的文章
Mybatis缓存机制理解及配置
查看>>
【Python 第8课】while
查看>>
spring boot 临时文件过期
查看>>
Num55 boss09(activiti安装以及API)
查看>>
通过响应式web设计,使本站支持手机浏览
查看>>
awk的基本⽤法
查看>>
js控制视频播放
查看>>
python 利用模板文件生成配置文件
查看>>
如何产生签名applet能让applet能够访问本地资源
查看>>
Hadoop集群安全性:Hadoop中Namenode单点故障的解决方案及详介AvatarNode
查看>>
查询表空间使用情况
查看>>
在Java SE中使用Hibernate处理数据
查看>>
kubernetes Helm
查看>>
SpringMVC注解整理
查看>>
NandFlash系列之一:NorFlash与NandFlash对比
查看>>
server 2003登录界面黑屏的解决办法
查看>>
ASP.NET技巧:两个截取字符串的实用方法
查看>>
linux中登录类型及配置文件
查看>>
javascript this用法小结
查看>>
TCP/IP详解学习笔记(9)-TCP协议概述
查看>>