[英]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);
在不破壞現有客戶端的情況下,無法修改該特定響應。 如果可以破壞現有的客戶端,或者正在使用自己控制的客戶端,則可以將對象包裝在另一個對象中,並設置兩個鍵: GUID
和data
。 例如:
var json = JsonConvert.SerializeObject(new {
data = foo,
GUID = bar,
});
其中bar
是要使用的GUID,而foo
是兩件事之一:
響應中的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
(或等效的調用)來獲取數據。
JSON響應中的反序列化對象。 這將導致最終對象看起來像這樣(為了簡潔起見,刪除了大多數數據):
{ data: { sa: [], sb: [], sz: "" }, guid: "00000000-0000-0000-0000-000000000000" }
然后,您將通過response.data
訪問data
。
當前響應是一個對象,只有幾種方法可以修改它:
將密鑰注入對象。 這假定沒有客戶端使用Object.keys()
或以任何方式迭代鍵集(例如for (k in obj)
))。 盡管這可能是正確的,但這是一個假設。
在末尾添加另一個對象: }, {
。 這樣做需要將響應轉換為數組:
[{}, {}]
這會破壞任何假定響應是對象的客戶端。
將當前響應包裝在周圍物體中(如上所述)。 這也破壞了任何假定響應具有特定結構的客戶端。
{data:{}, guid: ""}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.