2012-06-22 41 views
0

我在MVC4非API項目中使用Newtonsoft JSON.NET 4.5r7。如何在使用JSON.NET進行序列化時更改數據?

下面我將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序列化的數據來實現這一結果?

+0

一些值得注意的是我使用的是MVC控制器「的ActionResult」替代類似於:http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json -net.aspx –

回答

0

從動作而不是返回模型,你可以很容易地創建一個匿名對象使用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() }; 

} 
+0

謝謝你的迴應。這確實會起作用,儘管將控制器與模型的實現細節耦合在一起,這就像我試圖避免的那樣。也許我可以使用反射來添加任何模型類的屬性,儘管聽起來它可能是一條崎嶇不平的道路(要排除什麼等) –

相關問題