【F# + ASP.NET MVC】 JSON形式からXML形式に変換するには

◆JSONファイル(test.json)

[
  {
    "id": 1,
    "name": "Taro",
    "age": 10
  },
  {
    "id": 2,
    "name": "Jaro",
    "age": 20
  }, 
  {
    "id": 3,
    "name": "Saburo",
    "age": 30
  }
]

◆ Controller

namespace Sample.Controllers

open System
open System.Web
open System.Web.Mvc
open System.Reflection
open System.IO
// #r "System.Runtime.Serialization.dll"
open System.Runtime.Serialization.Json
// #r "System.Xml.dll"
open System.Xml
// #r "System.Xml.Linq.dll"
open System.Xml.Linq

type HomeController() =
    inherit Controller()
    
    member this.Index() =
        // JSONファイルの読み込み
        let jsonFile = base.Server.MapPath("/App_Data/test.json")
        use stream = File.OpenRead(jsonFile)
        use reader = JsonReaderWriterFactory.CreateJsonReader(
                        stream, XmlDictionaryReaderQuotas.Max)
        // XML(XElement)へ変換(LINQ to XML が使用可能)
        let xml = XElement.Load(reader)
        let key value = XName.Get(value)
        let items = xml.Elements()
                    // 条件を設定して取得
                    |> Seq.where(fun s -> s.Element(key "age").Value >= "20")
                    // View用に IEnumerable<IEnumerable<string>> 形式へ変換
                    |> Seq.map(fun s -> seq [s.Element(key "id").Value;
                                            s.Element(key "name").Value;
                                            s.Element(key "age").Value])
                        
        this.View(items) :> ActionResult

◆ View

@model IEnumerable<IEnumerable<string>>

@{ Layout = null; }

<!DOCTYPE html>
<html>
<head>
    <title>F# + ASP.NET</title>
</head>
<body>
    <div>
        <table>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Age</th>
            </tr>
            @foreach (var items in Model)
            {
            <tr>
                @foreach (var item in items)
                {
                <td>@Html.DisplayFor(modelItem => item)</td>
                }
            </tr>
            }
        </table>
    </div>
</body>
</html>

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中