首页 > 解决方案 > C#中的Json数组反序列化问题

问题描述

我有一个将 Json 数组映射到 C# 对象的 Web API 方法。

我的参数应该如下所示:

[{"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"")括起来。

其实这两种格式有什么区别。

任何帮助将不胜感激。

标签: c#asp.net-coreasp.net-mvc-5json.netasp.net-core-mvc

解决方案


这实际上是相同的字符串,无需转义任何内容。

@表示字符串按原样声明,忽略普通字符串中表示某种转义的任何和所有字符。

唯一的例外是双箭头报价。当字符串以@ 为前缀时,需要对双引号进行转义。做到这一点的方法是使用""

所以没有@的相同字符串将是

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" +
"}]";

上面的字符串也应该有效。你得到什么异常?


推荐阅读