Json을 반환하지만 원하지 않는 뒤로 슬래시 "\"를 포함합니다.
MVC4 web-api, c#을 사용하고 있으며, Json.net을 사용하여 Json을 반환하고 싶습니다.
문제는 "뒤로 가는 슬래시"가 있다는 것입니다.
Global.asax에도 이 코드를 추가했습니다.글로벌 설정배열.포메터XmlFormatter.지원되는 Media Types.클리어();
반환되는 내용은 다음과 같습니다.
"{\"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-11T 19:00:00" "time_out":2012-12T 13:08:50.5444555+07:00" "time_used_h:0"
여기는 JsonConvertor
string json = JsonConvert.SerializeObject(myObj);
저도 얼마 전까지만 해도 같은 문제가 있었어요.알고 보니 JSON 문자열을 "이중 직렬화"하고 있었습니다. jQuery를 합니다.$.getJson(
콜JsonResult
C Generic을 빌드하기 때문에 C# Generic은 C# Generic을 빌드합니다.List<t>
C# Generic JSON.net/NewtonSoft을 JSON.net/했습니다.List<t>
다음 명령을 사용하여 JSON을 반환하기 전에 JSON 개체로 이동합니다.
return Json(fake, JsonRequestBehavior.AllowGet);
될 것 같아요.JsonConvert.SerializeObject(
이 방법, 이 방법, 이 방법return
시리얼라이제이션이 변환됩니다.
당신이나 다른 사람에게도 도움이 되길 바랍니다.
나는 여기서 해결책을 찾았다.
return new HttpResponseMessage()
{
Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json")
};
using Newtonsoft.Json.Linq;
string str = "Your String with Back Slashes";
str = JToken.Parse(str).ToString(); `// Now You will get the Normal String with "NO SLASHES"`
대부분의 경우 슬래시는 VisualStudio 디버거에서 복사했기 때문에 아티팩트입니다.디버거는 모든 문자열을 C/C# 코드에 붙여넣을 수 있는 방식으로 표시합니다.전송된 데이터에는 실제로 존재하지 않습니다.
BTW: 이 슬라시는 뒤로 슬라시입니다.슬래시는 다음과 같습니다. /
「완전한」코드의 스니펫을 표시하기 위해서, 다음과 같이 솔루션을 실현했습니다.
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage GetAllMessages()
{
try
{
//Load Data Into List
var mm = new MessageManager();
List<Message> msgs = mm.GetAllMessages();
//Convert List Into JSON
var jsonmsgs = JsonConvert.SerializeObject(msgs);
//Create a HTTP response - Set to OK
var res = Request.CreateResponse(HttpStatusCode.OK);
//Set the content of the response to be JSON Format
res.Content = new StringContent(jsonmsgs, System.Text.Encoding.UTF8, "application/json");
//Return the Response
return res;
}
catch (Exception exc)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc);
}
}
대부분 이중 직렬화로 인해 발생합니다.이전에도 Json 문자열로 컬렉션을 시리얼화해야 하는 문제가 있었습니다.다양한 회피책을 시도해도 해결할 수 없었습니다.따라서 최종적으로 모든 시리얼화 코드를 삭제하고 컬렉션 오브젝트를 반환하기만 하면 시리얼화는 디폴트로 처리됩니다.따라서 시리얼화 코드를 삭제하고 반환 유형만 반환해 보십시오.비슷한 문제를 안고 있는 사람에게 도움이 되길 바랍니다.
몇 시간 동안 이것을 알아내려고 노력한 후, 이 질문에 대한 하나의 인기 있는 답변이 나에게 딱 맞는 것 같았다.하지만 내가 상상했던 방식은 아니야.
제 코드는 매우 단순했습니다.
this.Request.CreateResponse(HttpStatusCode.Accepted, new JavaScriptSerializer().Serialize(obj));
'이중 연재'라는 통속적인 반응은 나에게 적용되지 않는다고 확신했다.JSON에 오브젝트를 명시적으로 시리얼화한 것은 한 번뿐입니다.
이 토막을 써봤습니다.
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);
같은 문제가 발생했는데 응답에 "사용 시"가 포함되어 있습니다.
JObject res = processRequst(req);
String szResponse = res.ToString(Formatting.None);
return Request.CreateResponse<string>(HttpStatusCode.OK, szResponse);
이 백슬래시는 위의 코드를 다음과 같이 치환하면 삭제됩니다.
JObject res = processRequst(req);
return Request.CreateResponse<JObject>(HttpStatusCode.OK, res);
나는 그 대답의 조합이 나에게 효과가 있다는 것을 알았다.위에서 언급한 대로 이중 연재를 하고 있었어요.시리얼라이제이션에서 JsonProperty 속성을 인식하려면 JsonConvert 시리얼라이저를 사용해야 합니다.예를 들어 RealtTarget이라는 속성이 있는데 실제 타겟으로 시리얼화하려면 이 속성이 필요합니다.Json 결과는 시리얼화 시 JsonProperty를 인식하지 못하기 때문에 JsonConvert를 사용하여 시리얼화했고 다음과 같은 문자열을 반환했습니다.
return Content(JsonConvert.SerializeObject(myData));
솔루션을 찾았고, 나에게도 효과가 있었습니다.
var json = JsonConvert.SerializeObject(sb.ToString(), Formatting.Indented);
response.Content = new StringContent(json, Encoding.UTF8 , "application/json");
이건 나한테 효과가 있었어.Riseres 사용자가 위에 응답했습니다.
return new HttpResponseMessage()
{
Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json")
};
이 경우 백플래시를 포함한 서버로부터의 문자열은 다음과 같습니다.
{\"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을 사용하여 응답 값을 가져오면 백플래시가 계속 나타납니다.Push Back to Client(POSTMAN)를 실행하기 전에 서버에서 문자열을 포맷해야 합니다.MS Web 사이트에는, 「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://learn.microsoft.com/en-us/aspnet/core/web-api/advanced/formatting?view=aspnetcore-3.1
여기서 해결책을 찾았습니다.
response = response.replace("\"", "\\").replace("\\\\", "\"").replace("\\", "");
JSONArray PackageData = new JSONArray(response);
SelectSymbolList.clear();
for (int i = 0; i < PackageData.length(); i++) {
JSONObject jsonData = PackageData.getJSONObject(i);
// get your array here
}
내 경우 디버거에서 JSON 문자열을 보고 있었는데 탈출이 추가되어 있는 것을 발견했습니다.콘솔에 JSON을 출력했을 때 이스케이프 문자가 없었습니다.
var jsonContent = JsonConvert.SerializeObject(obj);
Console.WriteLine("HERE NO SLASHES"+ jsonContent);
오리지널 : https://stackoverflow.com/a/46836331/4654957
데이터 테이블을 json으로 변환하는 동안 .netcore 프로젝트에서 아래 코드를 사용하여 작동했습니다.
var lst = dt.AsEnumerable()
.Select(r => r.Table.Columns.Cast<DataColumn>()
.Select(c => new KeyValuePair<string, object>(c.ColumnName, r[c.Ordinal])
).ToDictionary(z => z.Key, z => z.Value)
).ToList();
범용 핸들러에서는 이것이 도움이 되었습니다.지정된 문자열이 json이면 try로 반환됩니다.그렇지 않으면 catch로 반환됩니다.
private static dynamic TryParseJSON(string message)
{
try
{
var serializer = new JavaScriptSerializer();
return serializer.Deserialize<dynamic>(message);
}
catch
{
return message;
}
}
Andrew Birks가 제안한 답변은 나에게 효과적이다.
//Convert List Into JSON
var jsonString = JsonConvert.SerializeObject(dataTable);
//Create a HTTP response - Set to OK
var response = Request.CreateResponse(HttpStatusCode.OK);
//Set the content of the response to be JSON Format
response.Content = new StringContent(jsonString, System.Text.Encoding.UTF8, "application/json");
//Return the Response
return response;
string jsonString = JsonConvert.SerializeObject(jsonMQTTPayLoad);
"{"이름": "존", "성", "도", "연령": 199 },
var stringwithoutbackslash = JObject.Parse(jsonString);
{ "이름" : "존", "성" : "도", "연령" : 199 }
솔루션을 찾아 나를 위해 일했습니다(Y)
var yourString = yourString.Replace("\\","");
여기서부턴 내가 맡을게
언급URL : https://stackoverflow.com/questions/13833900/return-json-but-it-includes-backward-slashes-which-i-dont-want
'programing' 카테고리의 다른 글
Postgre를 사용하여 데이터 소스를 생성할 때 예외 발생Spring Boot SQL 드라이버 (0) | 2023.02.23 |
---|---|
레일에서 JSON을 렌더링할 때 관련 모델 포함 (0) | 2023.02.23 |
WooCommerce - URL에서 제품 및 제품 카테고리를 삭제하는 방법 (0) | 2023.02.23 |
문자열 배열에서 Orderby 필터를 작동시키는 방법은 무엇입니까? (0) | 2023.02.23 |
oracle sqlplus에서 테이블 데이터를 보다 명확하게 표시하는 방법 (0) | 2023.02.23 |