【发布时间】:2015-09-28 20:43:20
【问题描述】:
我想通过传递一个对象作为参数来执行一个动作。为此,我将该对象序列化为 Json 字符串,然后将该字符串转换为十六进制字符串,将该十六进制字符串作为参数传递到操作链接中。
我有一个这样的对象,
Product prodObject = new Product { Categories = new Category { CategoryName = "Stationary" }, ProductName = "Book", Price = 250 };
像这样将上面的对象序列化为Json字符串,
var jsontString = JsonConvert.SerializeObject(prodObject);
我已经使用下面的代码将上面的 Json 字符串转换为十六进制字符串。
public string ConvertStringtoHex(string encodeMe, System.Text.Encoding encoding)
{
Byte[] stringBytes = encoding.GetBytes(encodeMe);
StringBuilder sbBytes = new StringBuilder(stringBytes.Length * 2);
foreach (byte b in stringBytes)
{
sbBytes.AppendFormat("{0:X2}", b);
}
return sbBytes.ToString();
}
在我的操作结果返回如下,
string hexString = ConvertStringtoHex(jsontString, System.Text.Encoding.Unicode);
return JavaScript(string.Format("document.location = '{0}';", Url.Action("Checkout", "PurchaseModule", new { pid= hexString })));
我再次在 ActionResult Post 方法中将该十六进制字符串转换为 Json 字符串,然后我尝试将 Json 字符串转换为我的原始对象。
string MyString = ConvertHextoString(pid, System.Text.Encoding.Unicode);
使用以下代码将十六进制字符串转换为 Json 字符串,
public static string ConvertHextoString(string decodeMe, System.Text.Encoding encoding)
{
int numberChars = decodeMe.Length;
byte[] bytes = new byte[numberChars / 2];
for (int i = 0; i < numberChars; i += 2)
{
bytes[i / 2] = Convert.ToByte(decodeMe.Substring(i, 2), 16);
}
return encoding.GetString(bytes);
}
像下面这样将序列化的字符串转换为 Json 字符串,
var JsonString = JsonConvert.DeserializeObject(MyString);
我在下面的行代码中遇到错误,
Product prodObject = (Product)JsonString;
在这里我收到如下错误。
Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Product'.
有人知道如何解决这个问题吗?
【问题讨论】:
-
您是否尝试过反序列化为正确的类型?
var prodObject = JsonConvert.DeserializeObject<Product>(MyString); -
感谢@freedomn-m `var prodObject = JsonConvert.DeserializeObject
(MyString);'为我工作。
标签: c# asp.net json asp.net-mvc asp.net-mvc-4