2012-06-22 1 views
0

Я использую Newtonsoft JSON.NET 4.5r7 в проекте MVC4 non-api.Как изменить данные во время сериализации с помощью JSON.NET?

Ниже я переименую «id» в DT_RowId для DataTables «mDataProp», но также хочу изменить данные, например. 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

Благодарим за отзыв. Это действительно сработало бы, хотя бы связало бы контроллер с деталями реализации модели, что похоже на то, чего я пытался избежать. Возможно, я могу использовать отражение для добавления свойств любого модельного класса, хотя это звучит так, будто это может быть ухабистая дорога (что исключить и т. Д.), –