2012-04-12 10 views
1

シリアル化されたデータをビューに送信し、ノックアウトコードにバインドしようとしています。私はjson.netライブラリを直列化のために使用しています。なぜなら、Jsonデータを返すコントローラがどのように表示されるかわからないからです。ここではサンプルコードは次のとおりです。シリアライズされますJson.netライブラリでシリアル化されたデータをビューに渡し、ノックアウトでバインドします。

マイビューモデル:

public class FranchiseInfoViewModel 
    { 

     public string FolderName { get; set; } 

     [JsonConverter(typeof(StringEnumConverter))] 
     public LobbyTemplateOptions LobbyTemplate { get; set; } 

     public List<LobbyTemplateOptions> LobbyTemplates { get; set; } 

     public void Initialize() 
     { 
      FolderName = "Test"; 

      LobbyTemplate = LobbyTemplateOptions.G; 
      LobbyTemplates = new List<LobbyTemplateOptions> 
           { 
            LobbyTemplateOptions.G, 
            LobbyTemplateOptions.H, 
            LobbyTemplateOptions.I 
           }; 

列挙型:

[JsonConverter(typeof(StringEnumConverter))] 
    public enum LobbyTemplateOptions 
    { 
     G = 7, 
     H = 8, 
     I = 9 
    } 

マイノックアウトコード:

$(function() { 
    omega.FranchiseInfo = (function() { 
     var FolderName = ko.observable(); 
     var LobbyTemplates = ko.observableArray([]); 

     $.getJSON("FranchiseData", function (data) { 
      FolderName(data.FolderName); 

      for (var i = 0; i < data.LobbyTemplate.length; i++) { 
       LobbyTemplates.push(data.LobbyTemplate[i]); 
      } 
     }); 

     return { 
      folderName: FolderName, 

      lobbyTemplates: LobbyTemplates 
     } 
    }()); 
    ko.applyBindings(omega.FranchiseInfo); 
}) 

     } 

が、私はどのように私の疑問に思ってシリアル化されたJsonデータをビューに渡すコントローラは、json.netを使用していないため、私は相対的ですビューにJSONデータを渡す

コントローラー:プログラミングのLY新しい

public JsonResult FranchiseData() 
      { 
       FranchiseInfoViewModel franchiseInfoViewModel = new FranchiseInfoViewModel(); 
       franchiseInfoViewModel.MapFranchiseInfoToFranchiseInfoViewModel(); 
       string json = JsonConvert.SerializeObject(franchiseInfoViewModel); 

       // this is how I do it with the default Json serializer 
       // return Json(franchiseInfoViewModel, JsonRequestBehavior.AllowGet); 
      } 

誰かが私のコントローラの実施例を投稿することができます場合、私は非常にgratefullだろう。ありがとうございました!

答えて

-1

JsonNetResultを実装する必要があります。

public class JsonNetResult : ActionResult 
{ 
    public Encoding ContentEncoding { get; set; } 
    public string ContentType { get; set; } 
    public object Data { get; set; } 

    public JsonSerializerSettings SerializerSettings { get; set; } 
    public Formatting Formatting { get; set; } 

    public JsonNetResult() 
    { 
    SerializerSettings = new JsonSerializerSettings(); 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
    if (context == null) 
     throw new ArgumentNullException("context"); 

    HttpResponseBase response = context.HttpContext.Response; 

    response.ContentType = !string.IsNullOrEmpty(ContentType) 
     ? ContentType 
     : "application/json"; 

    if (ContentEncoding != null) 
     response.ContentEncoding = ContentEncoding; 

    if (Data != null) 
    { 
     JsonTextWriter writer = new JsonTextWriter(response.Output) { Formatting = Formatting }; 

     JsonSerializer serializer = JsonSerializer.Create(SerializerSettings); 
     serializer.Serialize(writer, Data); 

     writer.Flush(); 
    } 
    } 
} 

それを使用するには、あなたのケースであなたは、このように、コントローラメソッドを書き換える必要があります。

public ActionResult FranchiseData() 
{ 
    FranchiseInfoViewModel franchiseInfoViewModel = new FranchiseInfoViewModel(); 
    franchiseInfoViewModel.MapFranchiseInfoToFranchiseInfoViewModel(); 

    JsonNetResult jsonNetResult = new JsonNetResult(); 
    jsonNetResult.Formatting = Formatting.Indented; 
    jsonNetResult.Data = franchiseInfoViewModel; 

    return jsonNetResult; 
} 

(このブログの記事 http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspxを取られた上記JsonNetResultの実装)

+0

はありがとうございました。私はJsonNetResultを実装すべきであることを知らなかった。それは今働く。 – Mdb

関連する問題