[英]Json array Deserialization Issue in C#
我有一个 Web API 方法来将 Json 数组映射到 C# 对象。
我的参数应该如下所示:
[{"event":"inbound","msg":"TestMEssage","ts":123456}]
我的代码是
var events = JsonConvert.DeserializeObject<IEnumerable<MailEvent>>(mandrill_inbound);
public class MailEvent
{
[JsonProperty(PropertyName = "event")]
public string Event { get; set; }
[JsonProperty(PropertyName = "msg")]
public string Msg { get; set; }
[JsonProperty(PropertyName = "ts")]
public string TimeStamp { get; set; }
}
但是当我尝试反序列化 JSON 时,它显示异常。
但是如果我试图在方法中设置一个变量,比如
Public const string mandrill_inbound = @"[
{
""event"": ""inbound"",
""msg"": ""tewst"",
""ts"": 1368214102
},
{
""event"": ""inbound"",
""msg"": ""test2"",
""ts"": 1368214102
}
]";
这段代码对我来说很完美。
请注意,它以@""
开头,并且所有键值都用多个双引号 ( ""event""
) 括起来。
其实这两种格式有什么区别。
任何帮助将不胜感激。
这实际上是相同的字符串,无需转义任何内容。
那就是@
表示字符串按原样声明,忽略在正常字符串中表示某种转义的任何和所有字符。
唯一的例外是双箭头报价。 当字符串以@ 为前缀时,需要对双引号进行转义。 这样做的方法是使用""
所以没有@的相同字符串将是
Public const string mandrill_inbound = "[\n" +
"{\n" +
"\"event\": \"inbound\",\n" +
"\"msg\": \"tewst\",\n" +
"\"ts\": 1368214102\n" +
"},\n" +
"{\n" +
"\"event\": \"inbound\",\n" +
"\"msg\": \"test2\",\n" +
"\"ts\": 1368214102\n" +
"}]";
上面的字符串也应该有效。 你得到的例外是什么?
最后,我找到了问题,
看来我收到的 JSON 已被序列化两次,不知道这是从哪里发生的。第一个双引号可能是您的调试器添加的,但第二个(转义的\\"
)似乎确实是您的数据的一部分'正在处理。错误消息也以这种方式有意义,它反序列化一个字符串,然后尝试将其转换为 ApiResult。
"\"{\\"event\\":\\"Inbound\\",\\"msg\\":...
尝试将数据反序列化为字符串,然后将其结果反序列化为 ApiResult
var content = response.Content;
var jsonResult = JsonConvert.DeserializeObject(content).ToString();
var result= JsonConvert.DeserializeObject<Model>(jsonResult);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.