【问题标题】:asp.net core 3.1 HttpClient, Json serializes two timesasp.net core 3.1 HttpClient,Json序列化两次
【发布时间】:2020-05-15 14:51:45
【问题描述】:

我正在尝试使用需要 JSON 来进行发布请求的 API。

在这里你可以看到我想要做什么:

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

我不知道这是怎么发生的。我只能认为内容猫连载了两次。所以 \ 变成 \ 这打破了我的要求,因为电子邮件不符合标准。

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

【问题讨论】:

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

标签: c# json asp.net-core .net-core


【解决方案1】:

使用 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);


 }

【讨论】:

    【解决方案2】:

    我发现了我的问题。我忘了在我的对象类中创建一个无参数的构造函数。这导致了我奇怪的 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2020-06-27
      • 1970-01-01
      • 2020-06-24
      • 2021-01-20
      相关资源
      最近更新 更多