Как я могу произвести JSON без странного символа sh от JsonSerializer? - PullRequest
0 голосов
/ 06 февраля 2020

JsonSerializer, который я использую, System.Text.Json; in. net core 3.1

Вот два проекта, один - проект A, другой - проект B.

Здесь это код проекта A:

namespace WebApplication1.Controllers
{
    [Route("api/")]
    public class TestController : Controller
    {            
        [HttpGet]
        [Route("Get")]
        public async Task<string> Get()
        {
            Models.TestModel TestModel = new Models.TestModel() { Success = "1" };            
            string Content = JsonSerializer.Serialize(TestModel, typeof(Models.TestModel), new JsonSerializerOptions() { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All) });            
            return Content;
        }                      
    }
}

А вот код проекта B:

namespace WebApplication2
{
    [Route("api/")]
    public class TestController : Controller
    {
        private readonly IHttpClientFactory _clientFactory;
        public TestController(IHttpClientFactory clientFactory)
        {
            _clientFactory = clientFactory;
        }
        [HttpGet]
        [Route("TestGet")]
        public async Task TestGet()
        {
            var request = new HttpRequestMessage(HttpMethod.Get,
                string.Format("https://localhost:44345/api/Get"));

            var client = _clientFactory.CreateClient();
            client.Timeout = TimeSpan.FromSeconds(5);
            var response = await client.SendAsync(request);
            string Content = "";
            if (response.IsSuccessStatusCode)
            {
                Content = await response.Content.ReadAsStringAsync();
                Models.TestModel TestModel = new Models.TestModel();
                TestModel = (Models.TestModel)JsonSerializer.Deserialize(Content, typeof(Models.TestModel));
            }
        }
    }
}

Оба они используют одну и ту же модель:

public class TestModel
    {
        public string Success { get; set; } = "";
        public string SuccessRemark { get; set; } = "";
    }

Теперь проблема в том, что проект А всегда будет выдавать JSON, содержащий странный символ '\'.

Например, право JSON равно

{"Success":"1","SuccessRemark":""}

И оно будет Оказывается, это так:

"{\"Success\":\"1\",\"SuccessRemark\":\"\"}"

Этот странный символ '\' делает проект B не может быть правильно десериализован.

Я рассмотрел использование метода замены для удаления символа '\ '.

Я следовал за всеми ответами в Замена backsla sh в строке , чтобы удалить символ' \ '. Между тем, ни один из них не работает.

Я знал другой способ получения json без странного символа '\':

        [Produces("application/json")]
        [HttpGet]
        [Route("Get")]
        public async Task<Models.TestModel> Get()
        {
            Models.TestModel TestModel = new Models.TestModel() { Success = "1" };            
            return TestModel;
        }   

Ну, таким образом, можно вернуть только модель stati c пока: Мне нужно вернуть модель успеха, если все коды работают успешно. Мне нужно вернуть модель ошибки, если код работает с ошибкой. Этот способ не может решить эту проблему. Не могли бы вы помочь мне? Спасибо.

1 Ответ

1 голос
/ 06 февраля 2020

Попробуйте это

try
        {
            if (success)
                return Json(new TestModel() { Success = "1" });
            else
                return Json(new TestModel() { Success = "0", SuccessRemark = "error" });
        }
        catch (Exception ex)
        {
            return Json(new TestModel() { Success = "0", SuccessRemark = ex.Message });
        }
...