C# 使用&;反序列化JSON字符串;使用JSON.NET?
我在cookie中存储了一个JSON字符串,其中包含C# 使用&;反序列化JSON字符串;使用JSON.NET?,c#,json,cookies,serialization,C#,Json,Cookies,Serialization,我在cookie中存储了一个JSON字符串,其中包含&字符: {"Description":"The Livewire TS+ unlocks your vehicle's hidden performance by re-calibrating your vehicle's computer for Maximum Horsepower & Torque, Increased Throttle Response, Firmer Shifts and even Increased Fue
&
字符:
{"Description":"The Livewire TS+ unlocks your vehicle's hidden performance by re-calibrating your vehicle's computer for Maximum Horsepower & Torque, Increased Throttle Response, Firmer Shifts and even Increased Fuel Mileage.","Sku":"SCTLWTSP","Count":1}
当我尝试反序列化它时,它会抛出一个关于非法字符的错误。我已经把范围缩小到和字符。我通过执行.Replace(&“,“%26”)
解决了这个问题,但这会将值存储回cookie中%26
处理&
或任何其他可能出现问题的字符的最佳方法是什么?我试图在cookie中保留原始字符串(未编码)
我尝试了Html.Encode
,但这会在反序列化时导致更多非法字符问题,我尝试了Uri.EscapeDataString
,但没有任何效果
在某种意义上说:
当用户单击添加到购物车
时,它会将一个序列化对象添加到cookie
。当他们再次单击add to cart时,我将反序列化JSON字符串
,以便更新Count
变量,但这是因为和字符而发生错误的时候
我有一个自定义类ShoppingCartItem
,我正在cookie中存储一个ShoppingCartItem
数组。下面是一些代码:
此时,我想将cookie字符串读回列表中
Json数组示例:
ShoppingCartItems=[{"Name":"X4 Performance Programmer ","ShortDescription":"The X4 Power Flash arrives Pre-Loaded with DYNO Proven tune files that INCREASE HORSEPOWER and TORQUE! ","Sku":"SCTX4","Count":1},{"Name":"Livewire TS Plus","ShortDescription":"The Livewire TS+ unlocks your vehicle's hidden performance by re-calibrating your vehicle's computer for Maximum Horsepower & Torque, Increased Throttle Response, Firmer Shifts and even Increased Fuel Mileage.","Sku":"SCTLWTSP","Count":1}]
下面是准确的行和错误:
执行此行时会发生错误:
shoppingCartItems = JsonConvert.DeserializeObject<List<ShoppingCartItem>>(shoppingCartCookie["ShoppingCartItems"]);
shoppingCartItems=JsonConvert.DeserializeObject(shoppingCartCookie[“shoppingCartItems]”);
错误是:
未终止的字符串。预期的分隔符:“.Path'[1].ShortDescription”,第1行,位置359。
我认为,您的问题很可能与json序列化没有直接关系,但它与以下事实有关:&
不是放在cookie中的有效字符(请参见此)
您必须使用HttpUtility.UrlEncode
和HttpUtility.UrlDecode
。例如:
var json = JsonConvert.SerializeObject(myList);
var cookieString = HttpUtility.UrlEncode(json);
// write cookie
...
// later when reading the cookie
var cookieString = ...
var json = HttpUtility.UrlDecode(cookieString);
var myList = JsonConvert.DeserializeObject<List<ShoppingCartItem>>(json);
var json=JsonConvert.SerializeObject(myList);
var cookieString=HttpUtility.UrlEncode(json);
//写曲奇
...
//稍后阅读cookie时
变量cookieString=。。。
var json=HttpUtility.UrlDecode(cookieString);
var myList=JsonConvert.DeserializeObject(json);
我想象使用同一个库的序列化函数将为反序列化为原始字符串的字符串提供最佳结果。@chris-我正在这样做。我正在调用JsonConvert.SerializeObject
将字符串保存到cookie中,并且当我想取回对象时,我使用JsonConvert.DeserializeObject代码>您试图反序列化到什么类型?请包含一些代码。@ErenErsönmez-嗨,我添加了一些代码,希望能有所帮助。感谢您提供的json是一个对象,但您正在尝试将其反序列化到一个对象列表中?嗨,我想您可能是对的,我还没有测试您的解决方案,但我确实注意到我添加了其他对象在我的cookie中,er键/值对由&分隔,因此它看起来确实是一个有效字符,但我想知道,如果在我的JSON字符串中有它,它会被视为分隔符而不是文字字符。我已经用错误的确切行和错误消息更新了我的代码。我将尝试您的解决方案,并让您知道它是如何处理的去吧,再次谢谢。
shoppingCartItems = JsonConvert.DeserializeObject<List<ShoppingCartItem>>(shoppingCartCookie["ShoppingCartItems"]);
var json = JsonConvert.SerializeObject(myList);
var cookieString = HttpUtility.UrlEncode(json);
// write cookie
...
// later when reading the cookie
var cookieString = ...
var json = HttpUtility.UrlDecode(cookieString);
var myList = JsonConvert.DeserializeObject<List<ShoppingCartItem>>(json);