繁体   English   中英

C#中的Json数组反序列化问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM