Json.Net を使用した PagedResult のシリアル化
Json.Net は、IEnumerable を実装するクラスを配列として扱います。派生クラスを [JsonObject] で修飾すると、リストは省略され、派生クラスのメンバーのみがシリアル化されます。
解決策 1: リスト プロパティを公開する
Konrad が提案したように、リストを公開するための派生クラスのパブリック プロパティ:
class PagedResult<T> : List<T> { public IEnumerable<T> Items { get { return this; } } }
ソリューション2: カスタム JsonConverter
または、カスタム JsonConverter を作成してオブジェクト全体をシリアル化します:
class PagedResultConverter<T> : JsonConverter { // ... (implementation as provided in the answer) ... }
コンバーターを JsonSerializerSettings に追加します:
JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new PagedResultConverter<T>());
例使用法
コンバータの使用例を示します:
PagedResult<string> result = new PagedResult<string> { "foo", "bar", "baz" }; // ... (populate other properties) ... string json = JsonConvert.SerializeObject(result, settings);
出力:
{ "PageSize": 10, "PageIndex": 0, "TotalItems": 3, "TotalPages": 1, "Items": [ "foo", "bar", "baz" ] }
以上がJson.Net で PagedResult オブジェクトをシリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。