簡體   English   中英

Json.NET 在返回 json 序列化字符串時添加反斜杠

[英]Json.NET adding backslash while returning json serialized string

我正在嘗試使用 Json.NET 將列表序列化為 json 字符串,但返回字符串中包含反斜杠,這反過來導致 json 解析失敗。

var x = from d in entities.Books.ToList()
        select new
        {
            ID = d.ID,
            BookName = d.BookName
        };
return JsonConvert.SerializeObject(x.ToList());

上面的代碼返回

"[{\"ID\":1,\"BookName\":\"MVC Music Store - Tutorial - v3.0\"},{\"ID\":2,\"BookName\":\"Pro.ASP.NET.MVC.3.Framework\"},{\"ID\":3,\"BookName\":\"Application Architecture Guide v2\"},{\"ID\":4,\"BookName\":\"Gang of Four Design Patterns\"},{\"ID\":5,\"BookName\":\"CS4 Pocket Reference\"}]"

所有 JSON 解析失敗。 我怎樣才能刪除這些。

不,它沒有

class Program
{
    class Book
    {
        public int ID;
        public string BookName;
    }

    static void Main()
    {
        var books = new List<Book> { new Book { ID = 1, BookName = "A" }, new Book { ID = 2, BookName = "B" } };

        var x = from d in books
        select new
        {
            ID = d.ID,
            BookName = d.BookName
        };

        string str = JsonConvert.SerializeObject(x.ToList());
        Console.WriteLine(str);
    }
}

可能有兩個問題:

A) 您正在查看調試器的結果。 為了檢查這一點,將JsonConvert放在一個臨時變量中(就像我所做的那樣)並使用調試器查看它。 單擊沙漏右側的箭頭並選擇Text Visualizer

或者

B) 調用方法再次將對象轉換為 Json,因此逃避了一切。

string str = "Your string with slashes";

str = JToken.Parse({your string here}).ToString();

JSON 對象被序列化兩次。

我解決了:

聲明方法響應格式的操作契約返回JSON。 我改變了方法來返回一個對象而不是一個字符串。

Jason 的序列化將在幕后自動完成。

我得到了相同的結果,但是當我對一些 json 序列化進行單元測試時,轉義字符增加了一倍。 查看我的代碼,我意識到我正在序列化“預期的”json 字符串而不是實際的 .net 對象。 因此,將 json 字符串傳遞給JsonConvert.SerializeObject(expectedJsonString)將簡單地將其轉義一次。 這就是我來到這里的方式,這就是我寫的答案,當我意識到我只是犯了一個編碼錯誤......你剛剛意識到你的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM