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

ASP.NET MVC:使用JsonResult控制属性名称的序列化

韩瀚
2023-03-14
问题内容

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

例如,给定以下类别:

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

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

然后,我想获得以下输出:

{ bar: '', oygevalt: '' }

相对于:

{ Bar: '', Oygevalt: '' }

问题答案:

我想要的东西比Jarrett建议的要多一些,所以这就是我要做的:

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()方法,添加到我的基本控制器类中:

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

用法示例:

    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: If you’re looking for something more performant than
JsonDataContractSerializer, you can do the same thing using JSON.NET instead.
While JSON.NET doesn’t appear to utilize DataMemberAttribute, it does have its
own JsonPropertyAttribute which can be used to accomplish the same thing.




 类似资料:
  • 问题内容: 我想将一个简单的对象序列化为JSON: 但是只要我这样做: 属性名称不作为指定部分,但类似于那些直接定义在类如的情况下它不是,但。 我究竟做错了什么? 问题答案: 我通过使用此问题答案中提供的技术解决了这个问题: 这是我上的课: 用法: 我还必须修改初始类:

  • 问题内容: 我正在使用JSON.NET对对象进行序列化以连接到REST API。我对象中需要序列化为JSON的属性之一具有动态属性名称。如果此属性的struct中包含的值是数字值,则JSON属性为“ type_id”,但是,如果此值是字符串值,则JSON属性名称为“ type_code”。我尝试为此使用自定义,但是在尝试序列化时收到以下消息: “状态为Property的令牌PropertyName

  • 问题内容: 我使用不同的数据库,并且根据数据库,我需要将“ id”命名为不同的名称。因此,例如在id中被命名为“ @rid” 对于MongoDB,该ID名为“ _id” 我不知道现代数据库开发人员有什么问题,不仅仅是命名id字段“ id” ^^。但是现在我有一个问题。在某些情况下,如何将ID字段动态序列化/反序列化为“ @rid”,在另一种情况下,如何动态序列化/反序列化为“ _id”? 编辑:

  • 问题内容: 在我的课上,我有: 在通过重新运行System.Web.Mvc.JsonResult的控制器的Json(obj)传递对象之后:我已经序列化了json:{Member:…}但没有{jsonMemberName:…},所以它看起来不在DataMember(Name =“ jsonMemberName”)。 如果我使用System.Runtime.Serialization.Json的序列化

  • 假设我们有以下JSON, 在Java类中,我们有与上述JSON匹配的所有字段。 每次要反序列化的字段列表取决于发送信息的客户。 例如,对于customer 1,我们只想读回以下值,(并且跳过其他属性,即使在JSON中提供) 例如,对于客户2,我们希望读取以下值(并跳过其他属性,即使在JSON中提供) 使用Jackson反序列化JSON时,是否可以提供上面的数组,其中包括需要反序列化的字段, 更新:

  • 问题内容: 我的课有一个属性’PropertyA’,我希望它在序列化时在JSON对象中显示为’PropertyB’。我可以使用某种属性吗? 问题答案: 对于与使用: 确保您的课程也用属性修饰。 如果您使用的是JavaScriptSerializer,则需要创建派生的实现