簡體   English   中英

可以將哪種String格式附加到此JSON輸出?

[英]What String format is acceptable to append to this JSON output?

我有一個現有的“黑盒” Web服務。 我需要在該輸出的末尾附加一個會話ID,以便Javascript和類似的客戶端可以恢復有狀態會話。

給定以下輸出,什么是追加或添加任意GUID的正確語法,以便可以將其正確反序列化為有效JSON?

注意以下數據是完美的。 如果我能以某種方式使用JSON.NET字符串GUID添加“可移動”的信息,那將是理想的。

REST調用的輸出

“{\\” SA \\ “:[\\” BHDQ9TLPeaeVuSSgXv9bsOIVFUWbOpivMKhGki7YPLzIXEyHuxRAZhDgts2sEcBQpLBuKJZCtcmSlzWZ9iK0AAA = \\” \\ “BAhyo7T0Wq1WBLXnyN4vo1L94rWLhCCv4DqROi + p9XHO6UeS0Gw6xh1JAKOtXBU2fA432LkNqng8cUt1eAX0bqs = \\” \\ “BGFmyTreWY5pICAcf3itoqbfhs5brOmIDLNF3V7p7slPYdCSVhwWUT5mHD6Lb5kNi \\ / Qy9tracNUtVgvo3f51FrI = \\” \\ “BMV7RIwoz + LdFgD2fq7UZ7E88KFq \\ / 03381NDYFIKYgUKxEzuXoj6hZfSB0slX5fdaL44Lf6i \\ / UjDzPQt2XUG8NE = \\”, \\ “BL8BnU5WvFn7vIlKi14dWsqykNf1 \\ / nmE55YXFGwLx9Qu3VvDblULt \\ / U8CXPI1vD8 + wMXCRnkunXqxlsFqgghf8w = \\”],\\ “SB \\”:[\\ “BInTtgTAn \\ / zkmrkporhV5DvPZRq5YWm8e \\ / m02oq55UfY3RxIhOplJgwLjgKMHKYDthYEBcqNNNuVbbWnbtKVAqA = \\” \\ “BJbh5y95wHGjmAPDFNqgewnBxtqVke0sloDD2S3IdrWZ95JfP77rtXZ4lTG8g9PuTLJbl4exZUnM16260WxJ9wU = \\” \\“BKevE9i2J8CicXHX3elCoQPEpTOmJyGOlBskIbFMFGQFhJ5TD7N1221rhhH9HY6DsfRojmefozsQYzo7Pokp +汞柱= \\ “\\ ”BJbVTRyh8WwCxfR7jRXnran4td7k5 + vEfM + HWxeAibneSjdMRQ1Fg6QxKLu + Zu1aPdXqD8M29kABOTAiYopVuQE = \\“ \\ ”BFv3alDqjo7ckdB2vuxJ15Gur1xsgATjLe9drt \\ / XU9AkbN + AELCv + mF1Xy8 + 83L2A1p8aGxF4b7dsrMed27u1j4 = \\“],\\ ”SZ \\“:\\” BF1IiqMz0KmT4gZN6euJquWFt2UmVjyOE daX0jH8uQMAPG8DBoyneT2PJ9NQTE2xBOP9TtAb1d2O + iCojFqzkvI = \\ “}”

上面的輸出來自Chrome。 我不確定Chrome是否添加了其他引號等,但是當我在服務器上調試System.String時,會看到相同的內容發送到WCF服務。

最終用途將是Chrome和Firefox插件

好吧,如果我正確理解:

您從blackbox服務獲取JSON。 它包含一些屬性和值。 您要添加帶有一些GUID的新屬性並將其發送到瀏覽器。

如果正確,請嘗試以下操作:

var json=<WHAT YOU GET FROM SERVICE>;
var converter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json, converter);
obj.sid="this is the new session id"; //ADD NEW PROPERTY


var j=JsonConvert.SerializeObject(obj); //GET BACK JSON STRING WITH NEW PROPERTY

如果您只是想在客戶端(插件內部)添加會話ID,請利用JSON2 JavaScript庫並使用以下代碼(Josh也在評論中建議):

var o = JSON.parse(<REST OUTPUT>);
o.sid = <YOUR SESSION ID>;

轉換回JSON字符串。

var jsn = JSON.stringify(o);

在不破壞現有客戶端的情況下,無法修改該特定響應。 如果可以破壞現有的客戶端,或者正在使用自己控制的客戶端,則可以將對象包裝在另一個對象中,並設置兩個鍵: GUIDdata 例如:

var json = JsonConvert.SerializeObject(new {
    data = foo,
    GUID = bar,
});

其中bar是要使用的GUID,而foo是兩件事之一:

  1. 響應中的JSON字符串。 這將導致最終對象看起來像這樣:

     { data: "{\\"sa\\":[\\"BHDQ9TLPeaeVuSSgXv9bsOIVFUWbOpivMKhGki7YPLzIXEyHuxRAZhDgts2sEcBQpLBuKJZCtcmSlzWZ9iK0AAA=\\",\\"BAhyo7T0Wq1WBLXnyN4vo1L94rWLhCCv4DqROi+p9XHO6UeS0Gw6xh1JAKOtXBU2fA432LkNqng8cUt1eAX0bqs=\\",\\"BGFmyTreWY5pICAcf3itoqbfhs5brOmIDLNF3V7p7slPYdCSVhwWUT5mHD6Lb5kNi\\/Qy9tracNUtVgvo3f51FrI=\\",\\"BMV7RIwoz+LdFgD2fq7UZ7E88KFq\\/03381NDYFIKYgUKxEzuXoj6hZfSB0slX5fdaL44Lf6i\\/UjDzPQt2XUG8NE=\\",\\"BL8BnU5WvFn7vIlKi14dWsqykNf1\\/nmE55YXFGwLx9Qu3VvDblULt\\/U8CXPI1vD8+wMXCRnkunXqxlsFqgghf8w=\\"],\\"sb\\":[\\"BInTtgTAn\\/zkmrkporhV5DvPZRq5YWm8e\\/m02oq55UfY3RxIhOplJgwLjgKMHKYDthYEBcqNNNuVbbWnbtKVAqA=\\",\\"BJbh5y95wHGjmAPDFNqgewnBxtqVke0sloDD2S3IdrWZ95JfP77rtXZ4lTG8g9PuTLJbl4exZUnM16260WxJ9wU=\\",\\"BKevE9i2J8CicXHX3elCoQPEpTOmJyGOlBskIbFMFGQFhJ5TD7N1221rhhH9HY6DsfRojmefozsQYzo7Pokp+Hg=\\",\\"BJbVTRyh8WwCxfR7jRXnran4td7k5+vEfM+HWxeAibneSjdMRQ1Fg6QxKLu+Zu1aPdXqD8M29kABOTAiYopVuQE=\\",\\"BFv3alDqjo7ckdB2vuxJ15Gur1xsgATjLe9drt\\/XU9AkbN+AELCv+mF1Xy8+83L2A1p8aGxF4b7dsrMed27u1j4=\\"],\\"sz\\":\\"BF1IiqMz0KmT4gZN6euJquWFt2UmVjyOEdaX0jH8uQMAPG8DBoyneT2PJ9NQTE2xBOP9TtAb1d2O+iCojFqzkvI=\\"}", guid: "00000000-0000-0000-0000-000000000000" } 

    然后您將通過兩次調用JSON.parse (或等效的調用)來獲取數據。

  2. JSON響應中的反序列化對象。 這將導致最終對象看起來像這樣(為了簡潔起見,刪除了大多數數據):

     { data: { sa: [], sb: [], sz: "" }, guid: "00000000-0000-0000-0000-000000000000" } 

    然后,您將通過response.data訪問data

為什么進行任何修改都會破壞現有客戶

當前響應是一個對象,只有幾種方法可以修改它:

  1. 將密鑰注入對象。 這假定沒有客戶端使用Object.keys()或以任何方式迭代鍵集(例如for (k in obj) ))。 盡管這可能是正確的,但這是一個假設。

  2. 在末尾添加另一個對象: }, { 這樣做需要將響應轉換為數組:

     [{}, {}] 

    這會破壞任何假定響應是對象的客戶端。

  3. 將當前響應包裝在周圍物體中(如上所述)。 這也破壞了任何假定響應具有特定結構的客戶端。

     {data:{}, guid: ""} 

暫無
暫無

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

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