【发布时间】:2021-04-26 06:54:10
【问题描述】:
我有来自 AWS Lambda 的 JSON 字符串:
"body": "{'From': nemesises@live.com, 'To': suhomlin.eugene93@gmail.com}",
并尝试像这样反序列化它
var email = JsonConvert.DeserializeObject<SendEmailMessage>(emailRequest.Message);
这是我需要反序列化的类
public class SendEmailMessage
{
public string From { get; set; }
public string To { get; set; }
public object Data { get; set; }
public int TemplateId { get; set; }
public List<string> Attachments { get; set; }
}
但我得到了这个错误
Newtonsoft.Json.JsonReaderException:解析 JSON 时出现意外内容。路径“从”,第 1 行,位置 11。
我该如何解决这个问题?
【问题讨论】:
-
Json 结构要么封装在
{}中用于对象,要么封装在[]中用于数组。这里我们没有{}。结构也不匹配。属性body不匹配对象的任何属性。我建议使用像 quicktype.io 这样的自动类生成。一个简单的拷贝过去,类就生成了。 -
bodyproeprty{'From': nemesises@live.com, 'To': suhomlin.eugene93@gmail.com}中还有一个奇怪的 js 对象。使用单引号属性名称和不带引号的值。您是否要反序列化该部分?因为未引用的价值将是一场噩梦。电子邮件地址允许,;:在带引号的字符串中并且可以引用注释(单个)。给您留下一个未引用的未转义值,无论如何都不能引用。 -
我需要用单引号引用它,因为据我所知,这是在 AWS Lambda 正文 @Self 中发送 JSON 的唯一方法
-
我的评论是关于未引用的价值。单引号不是问题。如果您正确地单引号,例如
{'From': 'nemesises@live.com', 'To': 'suhomlin.eugene93@gmail.com'}。有用。 dotnetfiddle.net/5bMeGW -
正确的方法是对
"body": "{\"foo\":\"bar\"}",进行适当的序列化和适当的转义。