C# asp.net core 3.1 HttpClient,Json序列化两次
我正在尝试使用一个需要JSON的API来处理post请求 在这里,您可以看到我正在尝试做什么: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
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,这很好,但是它不是反序列化的。如果你尝试反序列化它会发生什么呢?所以我发现我不能反序列化它,因为我没有无参数构造函数。