如何通过 JsonSerializer 生成 JSON 而没有奇怪的斜杠字符?

How can I produce JSON without strangely slash character by JsonSerializer?

我用的JsonSerializer是.net core 3.1System.Text.Json;

这里有两个项目,一个是项目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; } = "";
    }

现在的问题是项目 A 总是会生成 JSON 包含奇怪的字符 '\'。

比如右边的JSON就是

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

结果会是这样:

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

这个奇怪的字符'\'导致项目B无法正确反序列化。

我考虑过用替换的方法去掉字符'\'

我按照 Replacing backslash in a string 中的所有答案删除了字符“\”。同时,none 有效。

我知道另一种生成 json 的方法,没有奇怪的字符 '\':

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

嗯,这样只能return静态模型 while:

如果所有代码 运行 成功,我需要 return 一个成功模型。

如果代码 运行 有错误,我需要 return 一个错误模型。

这种方法不能解决这个问题。

你能帮帮我吗?谢谢。

试试这个

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 });
        }