4

Web サイトの領域をコンテンツ管理できるように、一部の JSON を複製する必要がある状況に遭遇しました。複製する必要があるjsonファイルがあります。サイトの分類法は複雑であり、残念ながら私はこれを変更する立場にありません.

Umbraco でテンプレートを設定し、必要なデータがページに表示されていますが、これを変換して JSON として出力する方法がわかりません。

かみそりは次のようになります。

    @{
    dynamic memberships = Library.NodeById(1081);
    var packageGroups =  memberships.Descendants("Price");
    foreach(var package in packageGroups) {
        var top = package.AncestorOrSelf("Type");
        var Description = (@top.HasValue("Blurb")) ? @top.Blurb : @top.Description;
        var Locations = "";

        foreach(var item in package.UserLocation.ToString().Split(',')) {
            Locations += @Model.NodeById((@item)).Name;
            Locations += ",";
        }

        <ul>
            <li>Maintitle: @top.Parent().Title</li>
            <li>Title: @top.Title</li>
            <li>SubTitle: @SubTitle</li>
            <li>Description: @Description</li>
            <li>Link: @top.Url</li>
            <li>Location: @Locations</li>
            <li>Render: true</li>
        </ul>
    }
}

以下のように JSON ファイルを複製するには、これを出力する必要があります。

   {
       "items":[
          {
             "MainTitle":"Package Top Level Title",
             "Title":"Package Title",
             "SubTitle":"Additional Details",
             "Description":"We wil provide you with some great products and services.",
             "Link":"/path/to/package/",
             "Location":[
                "Saturn"
             ],
             "Render":true
          },
       ]
}

ポインターを高く評価しました。

4

1 に答える 1

9

プロパティを匿名オブジェクトにロードして、シリアル化できます。このようなものは動作するはずです(テストされていません):

@{
    var items = new List<dynamic>();
    dynamic memberships = Library.NodeById(1081);
    var packageGroups =  memberships.Descendants("Price");
    foreach(var package in packageGroups)
    {
        var top = package.AncestorOrSelf("Type");
        var Description = (top.HasValue("Blurb")) ? top.Blurb : top.Description;
        var Locations = new List<string>();

        foreach(var item in package.UserLocation.ToString().Split(','))
        {
            Locations.Add(Model.NodeById(item).Name);
        }

        items.Add(new
        {
            Maintitle = top.Parent().Title,
            Title = top.Title,
            SubTitle = SubTitle,
            Description = Description,
            Link = top.Url,
            Location = Locations,
            Render = true
        });
    }

    var o = new {
        items = items
    };

    string json = Json.Encode(o);
    Response.ContentType = "application/json";
}
@Html.Raw(json)

匿名オブジェクトに代わるものは、Dictionary を使用することです。しかし、この場合、匿名オブジェクトはかなりうまく機能すると思います。

于 2012-10-10T17:04:37.090 に答える