45

MVC4 web-api、c#を使用しており、Json.netを使用してJsonを返したい。

問題は、「バックスラッシュ」が付属していることです。

このコードもGlobal.asaxに追加しました。GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

返される内容は次のとおりです。

"{\"cid\":1,\"model\":\"WT50JB\",\"detail\":\"sdf??\",\"unit\":2,\"time_in\":\"2012-12-11T19:00:00\",\"time_out\":\"2012-12-12T13:00:06.2774691+07:00\",\"time_used_dd\":0.0,\"time_used_hh\":0.0}"

だから私が見たいのはこれです:{"cid":1、 "model": "WT50JB"、 "detail": "sdf ??"、 "unit":2、 "time_in": "2012-12-11T19 :00:00 "、" time_out ":" 2012-12-12T13:08:50.5444555 + 07:00 "、" time_used_dd ":0.0、" time_used_hh ":0.0}

これがJsonConvertorです

string json = JsonConvert.SerializeObject(myObj);
4

18 に答える 18

28

ここで解決策を見つけました

return new HttpResponseMessage() 
{
    Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json")
};
于 2012-12-13T18:28:02.767 に答える
11

ほとんどの場合、スラッシュは VisualStudio デバッガーからコピーしたため、アーティファクトです。デバッガーは、C/C# コードに貼り付けることができる方法ですべての文字列を表示します。それらは実際には送信されたデータには含まれていません。

ところで: これらのスラッシュはバックスラッシュです。スラッシュは次のようになります: /.

于 2012-12-12T06:49:01.207 に答える
4

これを理解しようと何時間も試みた後、この質問に対する一般的な回答の 1 つは、私にとっては正しかったようです。しかし、私が想像していた方法ではありません。

私のコードは非常に単純でした:

this.Request.CreateResponse(HttpStatusCode.Accepted, new JavaScriptSerializer().Serialize(obj));

「二重連載」という評判は、私には当てはまらないと確信していました。結局、オブジェクトを明示的に JSON にシリアル化していたのは 1 回だけでした。

このスニペットを試しました:

new StringContent(json, System.Text.Encoding.UTF8, "application/json")

私のデータが含まれているようには見えませんでした。代わりに、これは私が受け取ったものです:

{
  "Headers": [
    {
      "Key": "Content-Type",
      "Value": [
        "application/json; charset=utf-8"
      ]
    }
  ]
}

うーん...しかし、見よ!Swagger UI で元の応答をよく見て、それをコピーして JSON ビューティファイアーに貼り付けた後、実際にはどういうわけか「二重シリアル化」していました。次のコードを使用すると、正しい JSON 応答が得られます

 this.Request.CreateResponse(HttpStatusCode.Accepted, obj);

それは正しい!シリアル化可能なオブジェクトを直接送信するだけで、JSON にシリアル化する必要はありません! 応答は、オブジェクトを JSON に自動的にシリアル化するようです。お役に立てれば!

編集:データベースからのように、JSON文字列で始める場合、文字列をオブジェクトに逆シリアル化し、そのオブジェクトを返すことができます-次のように:

object obj = new JavaScriptSerializer().DeserializeObject(json);
this.Request.CreateResponse(HttpStatusCode.Accepted, obj);
于 2017-10-24T14:03:19.627 に答える
1

これは私にとってはうまくいきました。上記のriseresユーザーによる回答。

return new HttpResponseMessage() 
{
Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json")
};
于 2020-10-06T06:12:12.383 に答える
1

私の場合、バックスプラッシュを含むサーバーからの文字列は次のようになります。

{\"cid\":1,\"model\":\"WT50JB\",\"detail\":\"sdf??\",\"unit\":2,\"time_in\":\"2012-12-11T19:00:00\",\"time_out\":\"2012-12-12T13:00:06.2774691+07:00\",\"time_used_dd\":0.0,\"time_used_hh\":0.0}"

API が POSTMAN を使用して応答値を取得すると、バックスプラッシュが引き続き表示されます。クライアント(POSTMAN)にプッシュバックする前に、サーバーで文字列をフォーマットする必要があることがわかりました。MS の Web サイトには、その方法が示されています。 return Ok(JSON_string);

マイクロソフトのガイドに従ってください。問題は解決しました

public ActionResult Get (int id, int id1)
{
     JSON_string = "your backsplash string"
     return Ok(JSON_string); //it will automatically format in JSON (like eliminate backsplash)

}

https://docs.microsoft.com/en-us/aspnet/core/web-api/advanced/formatting?view=aspnetcore-3.1

于 2020-10-21T08:05:54.313 に答える
-3

私は解決策を見つけて、私のために働きました (Y)

var yourString = yourString.Replace("\\","");

私はここからそれを手に入れました

于 2016-08-18T09:24:45.827 に答える