簡體   English   中英

如何將json作為對象傳遞給ASP.NET MVC控制器?

[英]How to pass json as object to ASP.NET MVC controller?

我有動作

[HttpGet]
public ActionResult Index(MyObject obj)
{
   return View(obj);
}

和一個對象:

 [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
 public class MyObject
 {
    [JsonProperty(PropertyName = "someString")]
    public String SomeString
    {
        get { return _someString; }
        set { _someString = value; }
    }

    [JsonProperty(PropertyName = "someDictionary")]
    public IDictionary SomeDictionary
    {
        get { return _someDictionary; }
        set { _someDictionary = value; }
    }

    public MyObject()
    {
    }

    private String _someString;
    private IDictionary _someDictionary;
  }

我想通過url將該對象傳遞給動作。 所以我創建網址:

String url =  controller.Url.Action("Index", "SomeController");
url += "?obj=" + JsonConvert.SerializeObject(myObjectInstance);

它使用json創建了一個URL,但是當我使用它時-url中的對象為null。

有誰能夠幫助我?

謝謝!

更新:共享我的MyObject實例作為對評論的反應:

MyObject myObjectInstance = new MyObject ();
myObjectInstance.SomeString = "Hello";
myObjectInstance.SomeDictionary = new Dictionary<String, Object> 
{
   {"firstKey","value"}, 
   {"secondValue",5}
}

modelbinder能夠反序列化JSON。 換句話說,您不需要做任何特別的事情。 如果您的請求主體由JSON組成(請注意,您不是JSON 字符串 ,而是具有JSON mimetype的實際JSON對象),則只要它可以將數據綁定到action參數,它就可以。 換句話說,您要做的就是構造一個或多個C#類來表示JSON對象。 例如,給定一個JSON對象,例如:

{
    'foo': 'bar',
    'bar': 1
}

您需要一個類似的課程:

public class MyClass
{
    public string Foo { get; set; }
    public int Bar { get; set; }
}

然后,進入您的動作簽名:

public ActionResult MyAction(MyClass foo)

modelbinder將更新MyClass的實例,並將JSON數據綁定到相關屬性上。

除了絕對不要進行這種殘酷的行為(您應該僅在鏈接中傳遞對象的ID)之外……從技術上講,您可以通過以下方式進行操作:

public ActionResult Index(string myObjectJson)
{
     var myObject = Json.Deserialize<MyObject>(myObjectJson);

暫無
暫無

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

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