循環参照モデルが原因かも

リレーションシップを増やすとAのプロパティにB、BのプロパティにAが存在する循環的なモデルになってしまう場合があります。
これをJSONでクライアントに渡そうとすると、変換の際に例外が発生してしまいます。

解決方法

解決方法は簡単です。ASP.NETの場合、WebApiConfig.csファイルを開き次のように編集します。

[csharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace QaramellChat
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// 循環参照の際には無視する
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
}
}
}
[/csharp]

たったこれだけす。簡単ですね^^

ちなみに次のように設定することでJSONをキャメルケースにすることができます。

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

今回の設定だけだとJsonにしか対応されてないので、次回XML対応を行いたいと思います。

CATEGORIES