次のオブジェクトを JSON として返す基本的な Web サービスがあります。
public class GetCustomerResponse
{
public Guid InteractionId { get; set; }
public string CustomerInfo { get; set; }
}
CustomerInfo メンバーも JSON であるため、呼び出し元に返される戻り値にはエスケープされた JSON が含まれます。
ただし、CustomerInfo JSON をエスケープせずに応答内に「埋め込む」必要があります。これが可能かどうか、また可能であればどのように知っていますか?
CustomerInfo を文字列として扱わなければならない理由は、これがオブジェクトに基づいていないサブシステムによって生成されるため、返されるのは生の JSON 文字列だけだからです。
サービス内に CustomerInfo クラスを作成することでこれを解決できることに気付きましたが、これは避けたいと思います。これは、多くのメンバーを持つ大きなクラスになるためです。さらに重要なことは、変更が加えられた場合にサービスを更新する必要があることです。
編集:これは機能するため、Sergey Kudriavtsevからの回答を受け入れましたが、最終的に別の解決策を選択しました。
json.net ライブラリをソリューションに追加し、GetCustomer クラスを次のように編集しました。
public Newtonsoft.Json.Linq.JObject CustomerInfo { get; set; }
次に、コードでサービス インターフェイスを次のように変更しました。
GetCustomerResponse GetCustomer(int customerId)
に:
void GetCustomer(int customerId)
次に、インターフェースの実装で、次のことを行っています
public void GetCustomer(int customerId)
{
var customerJson = ... code to get json string ...
var response = new GetCustomerResponse()
{
InteractionId = Guid.NewGuid(),
CustomerInfo = JObject.Parse(customerJson)
};
string json = JsonConvert.SerializeObject(response, Formatting.Indented);
HttpContext.Current.Response.ContentType = "application/json; charset=utf-8";
HttpContext.Current.Response.Write(json);
}