5

私は Json.net を使用してシリアライズし、次のような JObject を作成しています。

 "RegistrationList": [
    {
      "CaseNumber": "120654-1330",
      "Priority": 5,
      "PersonId": 7,
      "Person": {
        "FirstName": "",
        "LastName": "",
      },
      "UserId": 7,
      "User": {
        "Id": 7,
        "CreatedTime": "2013-07-05T13:09:57.87",
        "Comment": "",
    },

これを新しいオブジェクトまたはリストに照会するにはどうすればよいですか。これは、いくつかの html テーブル/ビューに簡単に配置できます。CaseNumber、FirstName、および Comment のみを表示したい。

4

4 に答える 4

6

CaseNumber、FirstName、および Comment のみを表示したい。

ASP.NET MVC ではいつものように、要件に一致するビュー モデルを作成することから始めることができます。

public class MyViewModel
{
    public string CaseNumber { get; set; }
    public string FirstName { get; set; }
    public string Comment { get; set; }
}

次に、コントローラー アクションで、既に持っている JObject インスタンスからビュー モデルを構築します。

public ActionResult Index()
{
    JObject json = ... the JSON shown in your question (after fixing the errors because what is shown in your question is invalid JSON)

    IEnumerable<MyViewModel> model =
        from item in (JArray)json["RegistrationList"]
        select new MyViewModel
        {
            CaseNumber = item["CaseNumber"].Value<string>(),
            FirstName = item["Person"]["FirstName"].Value<string>(),
            Comment = item["User"]["Comment"].Value<string>(),
        };

    return View(model);
}

そして最後に、強く型付けされたビューに目的の情報を表示します。

@model IEnumerable<MyViewModel>

<table>
    <thead>
        <tr>
            <th>Case number</th>
            <th>First name</th>
            <th>Comment</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.CaseNumber</td>
                <td>@item.FirstName</td>
                <td>@item.Comment</td>
            </tr>
        }
    </tbody>
</table>
于 2013-07-22T07:42:48.057 に答える
2

いくつかの方法:

1) ドキュメント ' Using LINQ for JSON ' によると、LINQ の方法で JObject をクエリできます。

JObject o = JObject.Parse(@"{
  'CPU': 'Intel',
  'Drives': [
    'DVD read/writer',
    '500 gigabyte hard drive'
  ]
}");

string cpu = (string)o["CPU"];
// Intel

string firstDrive = (string)o["Drives"][0];
// DVD read/writer

IList<string> allDrives = o["Drives"].Select(t => (string)t).ToList();
// DVD read/writer
// 500 gigabyte hard drive

2) SelectToken を使用した JSON のクエリ

3) 次のように指定されたパスでクエリを実行するには、カスタム ヘルパー拡張メソッドを使用します。

public static class JsonHelpers
{
    public static JToken QueryJson(this object jsonObject, params string[] jsonPath)
    {
        const string separator = " -> ";

        if (jsonObject == null)
            throw new Exception(string.Format("Can not perform JSON query '{0}' as the object is null.",
                string.Join(separator, jsonPath ?? new string[0])));

        var json = (jsonObject as JToken) ?? JObject.FromObject(jsonObject);
        var token = json;
        var currentPath = "";

        if (jsonPath != null)
            foreach (var level in jsonPath)
            {
                currentPath += level + separator;
                token = token[level];
                if (token == null) break;
            }

        if (token == null)
            throw new Exception(string.Format("Can not find path '{0}' in JSON object: {1}", currentPath, json));

        return token;
    }
}
于 2014-09-15T15:16:46.287 に答える