【问题标题】:How do I change data during serialization with JSON.NET?如何在使用 JSON.NET 进行序列化期间更改数据?
【发布时间】:2012-06-22 16:18:36
【问题描述】:

我在一个 MVC4 非 api 项目中使用Newtonsoft JSON.NET4.5r7。

下面我将DataTables“mDataProp”的“id”重命名为DT_RowId,但也想更改数据,例如42 becomes "row_42" 序列化期间。

sealed public class Species
{
    [JsonProperty("DT_RowId")]
    public long id { get; private set; } // Change me to row_{n}

    public int amu { get; private set; }

    public string chemicalFormula { get; private set; }
...
}

对于不熟悉该库的人来说,文档有点难以理解,并且缺少示例。

我可以为每个类添加一个“row_n”属性,但是将视图与模型耦合是邪恶的™

问题是:如何使用 JSON.net 更改序列化数据以实现此结果?

【问题讨论】:

标签: .net asp.net-mvc json datatables json.net


【解决方案1】:

通过操作而不是返回模型,您可以使用 linq 查询轻松创建一个匿名对象并返回它。

public JsonNetResult TestAction()
{
     ...

     var query = species.Select(s => new // species is a collection
     {  
        DT_RowId = .. you can change data as you need from s.id,
        amu = s.amu,
        chemicalFormula = s.chemicalFormula 
        ...
     });

     return new JsonNetResult{ Data = query.ToList() };

 }

【讨论】:

  • 感谢您的回复。这确实可行,尽管会将控制器与模型的实现细节耦合起来,这就像我试图避免的那样。也许我可以使用反射来添加任何模型类的属性,尽管这听起来可能是一条崎岖不平的道路(排除什么等)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多