2017-11-15 15 views
2

JSON(newtonsoftを使用)を返す必要がある.NETコア2.0 Web APIプロジェクトにPOSTメソッドがあります。私は、メソッドの最後に次のコードを持っている:私はポストマンを使用してこれをテストする場合Web APIがエスケープされたJSONを返します

ObjectResult objRes = new ObjectResult(JsonConvert.SerializeObject(result, settings)); 
objRes.ContentTypes.Add(new MediaTypeHeaderValue("application/json")); 
return objRes 

は、私のような結果を得る:あなたが見ることができるように

"{\"name\":\"test\",\"value\":\"test\"}" 

、JSONはまだ配達員にエスケープされます。私は.NETのコア1.0プロジェクトにまったく同じコードをテストするとき、私はポストマンに次のように取得する:

{ 
    "name": "test", 
    "value": "test" 
} 

は、どのように私は、.NETコア2.0プロジェクトで同じ結果を得ることができますか? 私はそれがNewtonsoftによるものだと考えていましたが、逆シリアル化を文字列にデバッグすると、デバッガは.NETコア1.0と2.0プロジェクトの両方で同じ(エスケープされた)値を正確に示します。

+0

[関連する可能性があります](https://stackoverflow.com/a/42214435/4137916)(同じフレームワークではありませんが、問題は同じ行にある可能性があります)。 –

+0

[Migrated Web Service to .NET Core 2.0とjsonを返す]の可能な複製(https://stackoverflow.com/questions/46785619/migrated-web-service-to-net-core-2-0-and-returning- json) – MichelZ

答えて

3

結果をコントローラに返すだけで、フレームワークによってシリアル化されます。

[HttpPost] 
public object Post() 
{ 
    var result = new MyObject { Name = "test", Value = "test" }; 
    return result; 
} 

またはあなたが行うことができます。

return new OkObjectResult(result); 

それとも、コントローラを継承場合:

return Ok(result); 
+0

はい、JSON.NETには.NETシリアライザに比べていくつかの利点がありますので、JSON.NETで動作させるにはstackoverflow.com/a/48335234/1317161ソリューションを参照してください。 – MichelZ

5

私はあなたがそれを送信する前に、あなたのオブジェクトをシリアル化する必要はないと思いますが。 .NET Coreでは、デフォルトでシリアライズされます。

+0

はい、JSON.NETは機能します.NETシリアライザに比べていくつかの利点がありますので、https://stackoverflow.com/a/48335234/1317161という解決策を参照してJSON.NETと連携させてください – MichelZ

関連する問題