0

別の MVC/ノックアウトの問題で立ち往生しています..

今回は連載・辞書集めの関係です。

次のビューモデルがあります

public class ListViewModel
{
    public Dictionary<ItemViewModel, List<ItemViewModel>> Events { get; set; }

    public ListViewModel()
    {
        Events = new Dictionary<ItemViewModel, List<ItemViewModel>>();
    }
}

public class ItemViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

および cshtml ファイル:

<h2>Events</h2>
<div data-bind="template: { name: 'events-template', foreach: Events }"></div>

<script type="text/html" id="events-template">
    <ul>
        <li>
            <div><span data-bind='text: Events().length'/></div>
            <ul data-bind="foreach: Events">
                <li><span data-bind="text: $data"> </span></li>
            </ul>
        </li>
    </ul>     
</script>

<script type="text/javascript">

    var ListViewModel = function(model) {
        var self = this;

        self.Events = ko.observableArray(ko.utils.arrayMap(model.Events, function(itemViewModel) {
            var item = new ItemViewModel(itemViewModel);
            return item;
        }));
    };

    var ItemViewModel = function(itemViewModel) {
        var self = this;
        self.Name = ko.observable(itemViewModel.name);
        self.Id = ko.observable(itemViewModel.Id);
    };

    $(function() {
        var data = @(Html.Raw(Json.Encode(Model)));        
        ko.applyBindings(new ListViewModel(data));
    });

</script>

var data = @(Html.Raw(Json.Encode(Model))); でスタックしているようです。

エラーメッセージには、「Type Generic Dictionary ... is not supported for serialization/deserialization of a dictionary.key must be string or objects.」のような内容が記載されています。

4

1 に答える 1

0

例外として、.NETは辞書のシリアル化をサポートしていません。次の3つのオプションを検討する必要があります。

  • 可能であればdictionary、シリアル化可能なデータ構造に置き換えてください。
  • jsonのシリアル化可能な辞書を作成するか、既存の辞書を見つけます。
  • javaScriptSerializer辞書をシリアル化する書き込み。
于 2012-12-07T10:48:24.937 に答える