簡體   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