有没有一种方法可以用属性控制JsonResult的JSON输出,类似于使用XmlElementAttribute及其brethern来控制XML序列化的输出?

例如,给定以下类:

public class Foo
{
    [SomeJsonSerializationAttribute("bar")]
    public String Bar { get; set; }

    [SomeJsonSerializationAttribute("oygevalt")]
    public String Oygevalt { get; set; }
}

然后我想得到以下输出:

{ bar: '', oygevalt: '' }

As opposed to:

{ Bar: '', Oygevalt: '' }

推荐答案

I wanted something a bit more baked into the framework than what Jarrett suggested, so here's what I did:

JsonDataContractActionResult:

public class JsonDataContractActionResult : ActionResult
{
    public JsonDataContractActionResult(Object data)
    {
        this.Data = data;
    }

    public Object Data { get; private set; }

    public override void ExecuteResult(ControllerContext context)
    {
        var serializer = new DataContractJsonSerializer(this.Data.GetType());
        String output = String.Empty;
        using (var ms = new MemoryStream())
        {
            serializer.WriteObject(ms, this.Data);
            output = Encoding.Default.GetString(ms.ToArray());
        }
        context.HttpContext.Response.ContentType = "application/json";
        context.HttpContext.Response.Write(output);
    }
}

JsonContract() method, added to my base controller class:

    public ActionResult JsonContract(Object data)
    {
        return new JsonDataContractActionResult(data);
    }

Sample Usage:

    public ActionResult Update(String id, [Bind(Exclude="Id")] Advertiser advertiser)
    {
        Int32 advertiserId;
        if (Int32.TryParse(id, out advertiserId))
        {
            // update
        }
        else
        {
            // insert
        }

        return JsonContract(advertiser);
    }

Note:如果您正在寻找比JsonDataContractSerializer性能更好的东西,那么可以使用JSON做同样的事情.而不是网.而JSON.NET似乎没有利用DataMemberAttribute,它有自己的JsonPropertyAttribute,可以用来完成同样的事情.

Json相关问答推荐

JOLT拉平数组

如何形成正确的JQ表达式以从JSON文件中获得准确的输出数据?

解析SQL中的嵌套JSON

如何在VB6中将字符串转换或解码为可读格式?

Jolt 不打印任何东西

Groovy JsonBuilder 在for循环中添加数组元素

在 NX 工作区中跨多个应用共享 ngx-translate 翻译文件

如何使用 jq 将字符串数组转换为对象?

如何从 json 中获取单个元素?

通过 xslt 将内部 json 转换为 xml 时遇到问题

为什么根据其他工具,来自 aws rds 的 JSON 在 Docker 中格式错误运行?

使用 ConvertFrom-Json 后,Powershell 访问 JSON 中的嵌套对象

如果有 1 个元素,如何防止 ConvertFrom-Json 折叠嵌套数组

在 Flutter 中将对象转换为可编码对象失败

如何为包含一些固定值并可能具有其他附加值的数组字符串创建数组 json 架构

如何解决名为 null 的map值

使用 jq,将对象数组转换为具有命名键的对象

IE10/11 Ajax XHR 错误 - SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3

从动态 json 数据更新力有向图上的链接

无法解析 JSON 文件中的 TAB