我有用户发送可能包含任何特殊字符的邮件。我把那些数据作为json字符串。我试图将字符串反序列化为一个对象,然后将其传递给我的webapi。
但是,我无法成功反序列化数据。我创建了一个简单的c#控制台应用程序来测试这个函数。
public class Program
{
public static void Main()
{
Console.WriteLine("Enter input:");
string data = Console.ReadLine();
// One of the SO article says,
// If the JSON is created using a JSON serializer, then all the
// special characters will be escaped properly
var sData = JsonConvert.SerializeObject(data);
MappedData mappedData = JsonConvert.DeserializeObject<MappedData>(dData.ToString());
Console.WriteLine(mappedData.PostData); //these need to be posted to webapi
Console.ReadKey();
}
}
public class MappedData
{
[JsonProperty("PostData")]
public string PostData { get; set; }
[JsonProperty("MessageQueueInformation")]
public string MessageQueueInformation { get; set; }
}
文章提到:enter link description here
有效的测试数据(无特殊字符):
{ "MessageQueueInformation": '{"EntityId":"13","Action":"Add"}', "PostData": '{"listMessage":[{"message":"Successful case 1"}]}'}
此操作失败,错误为:Bad JSON escape sequence: \,.
{ "MessageQueueInformation": '{"EntityId":"13","Action":"Add"}', "PostData": '{"listMessage":[{"message":"Unsuccessful case- aaa /, \, ^, &, %, #'/"\\\,''!~"}]}'}
答案 0 :(得分:0)
您的代码很好,但您的用户需要将他发送的消息更改为实际上是JSON。 JSON输入需要正确编码。
\
出现在字符串中,那么在JSON字符串中它将显示为\\
。 "
出现在字符串中,则它应显示为\"
。 '
出现在字符串中,则该字符应显示为\'
。 { "MessageQueueInformation": '{"EntityId":"13","Action":"Add"}', "PostData": '{"listMessage":[{"message":"Unsuccessful case- aaa /, \\, ^, &, %, #'/\"\\\\\\,\'\'!~"}]}'}