【问题标题】:How to execute an action link by passing an object as parameter in Asp.Net MVC 4?如何通过在 Asp.Net MVC 4 中将对象作为参数传递来执行操作链接?
【发布时间】: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&lt;Product&gt;(MyString);
  • 感谢@freedomn-m `var prodObject = JsonConvert.DeserializeObject(MyString);'为我工作。

标签: c# asp.net json asp.net-mvc asp.net-mvc-4


【解决方案1】:

添加评论作为答案:

直接反序列化为正确的类型:

var prodObject = JsonConvert.DeserializeObject<Product>(MyString);

【讨论】:

    【解决方案2】:

    试试这个:

    Product prodObject = JsonConvert.DeserializeObject<Product>(MyString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多