C# asp.net core 3.1 HttpClient,Json序列化两次

C# asp.net core 3.1 HttpClient,Json序列化两次,c#,json,asp.net-core,.net-core,C#,Json,Asp.net Core,.net Core,我正在尝试使用一个需要JSON的API来处理post请求 在这里,您可以看到我正在尝试做什么: using(var client = new HttpClient()) { var jsonSettings = new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true }; var c

我正在尝试使用一个需要JSON的API来处理post请求

在这里,您可以看到我正在尝试做什么:

using(var client = new HttpClient())
{
    var jsonSettings = new JsonSerializerOptions
    {
        Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
        WriteIndented = true
    };
    var content = new StringContent(JsonSerializer.Serialize(new MyObject(data), jsonSettings), Encoding.UTF8, "application/json");
    var request = new HttpRequestMessage
    {
        RequestUri = new Uri(URL),
        Content = content,
        Method = HttpMethod.Post
    };
    request.Headers.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json"));
    var response = await client.SendAsync(request);
}
当我发送请求时,我得到以下JSON:

{
    "email": "Tester \\u003Ctest@test.test\\u003E",
    "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \\r\\nAenean commodo ligula eget dolor. Aenean Massa."
}
正如您所看到的,我得到了\\u003C这样的东西,而它需要是\u003C

我不知道这是怎么发生的。我只能认为内容cat序列化了两次。因此\变成\这打破了我的请求,因为电子邮件不符合标准


如果您需要更多信息,请询问。:)

使用
JsonConvert.SerializeObject
而不是JsonSerializer.Serialize

我创建了一个类:

  public class Test
    {
        public string email { get; set; }
        public string text { get; set; }
    }
以下是代码:

      Test data= new Test()
                 {
                      email="Tester \u003Ctest@test.test\u003E",
                       text=@"Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aenean commodo ligula eget dolor. Aenean Massa."

                 }; 

 using (var client = new HttpClient())
            {
                var jsonSettings = new JsonSerializerOptions
                {
                    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
                    WriteIndented = true
                };
                var content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
                var request = new HttpRequestMessage
                {
                    RequestUri = new Uri(url),
                    Content = content,
                    Method = HttpMethod.Post
                };
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response = await client.SendAsync(request);


 }

使用
JsonConvert.SerializeObject
代替JsonSerializer.Serialize

我创建了一个类:

  public class Test
    {
        public string email { get; set; }
        public string text { get; set; }
    }
以下是代码:

      Test data= new Test()
                 {
                      email="Tester \u003Ctest@test.test\u003E",
                       text=@"Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aenean commodo ligula eget dolor. Aenean Massa."

                 }; 

 using (var client = new HttpClient())
            {
                var jsonSettings = new JsonSerializerOptions
                {
                    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
                    WriteIndented = true
                };
                var content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
                var request = new HttpRequestMessage
                {
                    RequestUri = new Uri(url),
                    Content = content,
                    Method = HttpMethod.Post
                };
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response = await client.SendAsync(request);


 }

我解决了我的问题。我忘了在对象类中创建无参数构造函数。这导致了我奇怪的JSON输出

public class Data
{
    public string Email { get; set; }
    public string Text { get; set; }

//  Added code
    public Data() {}

    public Data(string email, string text)
    {
        this.Email = email;
        this.Text = text;
    }
}

我解决了我的问题。我忘了在对象类中创建无参数构造函数。这导致了我奇怪的JSON输出

public class Data
{
    public string Email { get; set; }
    public string Text { get; set; }

//  Added code
    public Data() {}

    public Data(string email, string text)
    {
        this.Email = email;
        this.Text = text;
    }
}

我想,这些反斜杠已经逃过了,仅此而已。这当然不是双重序列化JSON,如果是的话,看起来会更糟。你不能正确地反序列化它吗?嗯,我发布的JSON文本就是我得到的。我的输入文本如下:电子邮件:“Tester”和文本:“text\r\n text”Ok。但是我问,你不能正确地反序列化它吗?如果您向我展示JSON,这很好,但是它不是反序列化的。那么如果你尝试反序列化它会发生什么呢?所以我发现我不能反序列化它,因为我没有无参数构造函数。反斜杠已经被转义了,我想,仅此而已。这当然不是双重序列化JSON,如果是的话,看起来会更糟。你不能正确地反序列化它吗?嗯,我发布的JSON文本就是我得到的。我的输入文本如下:电子邮件:“Tester”和文本:“text\r\n text”Ok。但是我问,你不能正确地反序列化它吗?如果您向我展示JSON,这很好,但是它不是反序列化的。如果你尝试反序列化它会发生什么呢?所以我发现我不能反序列化它,因为我没有无参数构造函数。