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