2017-08-09 78 views
-3

我想此JSON發送到服務器:發送完整的JSON用asp.net MVC

{ 
    "id":123, 
    "person": {"name":"john", "surname":"john"}, 
    "qualities": ["gentle", "handsome"], 
    "friends": [{"name":"sam", "surname":"gamgee"}, {"name":"donald", "surname":"trump"}] 
} 

因此,所有可能的情況下(正常場,JSON場,場列表和JSON列表字段一個相當完整的JSON )。

我想在我的asp.net mvc服務器上發佈這種對象。我發佈HTTP頭「內容:應用程序/ JSON」,我不想改變。

我嘗試了很多東西,但最後總是遇到問題,特別是當我有一個json列表字段時。 爲什麼這種事情不起作用?

[HttpPost] 
public ActionResult SendJson(dynamic json) { 
    json.friends[0].name --> error 
} 

當我發送{"json": {#json above#} }

+0

你可以試試json.json.friends [0] .name?好奇,如果它只是一個關於如何將JSON作爲另一個json中的對象傳遞的問題。 –

+0

不工作。其實不包圍它的「json」字段不起作用,因爲asp.net似乎直接解析發送的json,因此參數是json字段。 – fazega

+0

json.json.friends [0] .name - 作品,有什麼麻煩嗎? – Immanuel

回答

0

使用混凝土類型。

public class Person { 
    public string name { get; set; } 
    public string surname { get; set; } 
} 

public class Friend { 
    public string name { get; set; } 
    public string surname { get; set; } 
} 

public class DataModel { 
    public int id { get; set; } 
    public Person person { get; set; } 
    public IList<string> qualities { get; set; } 
    public IList<Friend> friends { get; set; } 
} 

更新控制器以期待強類型。

[HttpPost] 
public ActionResult SendJson([FromBody] DataModel model) { 
    var name = model.friends[0].name; 
} 

最後發送時,發送所述第一片段爲是

{ 
    "id":123, 
    "person": {"name":"john", "surname":"john"}, 
    "qualities": ["gentle", "handsome"], 
    "friends": [{"name":"sam", "surname":"gamgee"}, {"name":"donald", "surname":"trump"}] 
} 

不包裹在另一個對象。否則,你就需要一個額外的對象

public class RootObject { 
    public DataModel json { get; set; } 
} 

符合此{"json": {#json above#} }

+0

我很確定它的工作原理。但是你一定明白,我無法爲我的所有請求創建數百個模型...... – fazega

+0

@fazega最終它會讓你受益。創建數百個模型然後必須爲每個模型解決問題更快。您可以使用像automapper這樣的工具來映射這些字段,儘管我從未使用它。 –

0

工作得很好..截圖包含郵遞員& .NET監視窗口..

enter image description here

+0

fazega發送{「json」:{#json above#}}不是{#json以上#} –

+0

json.json.friends [0] .name - 作品,有什麼麻煩嗎? – Immanuel

+0

你使用什麼標題? – fazega

0

MVC不能做自己解析動態參數,您必須創建自己的ModelBinder來捕獲輸入的數據流並自己創建動態對象。

參見方法here

+0

「MVC現在無法做到這一點」並不完全清楚您的意思。我們不應該依賴鏈接來理解你的意思。你的答案應該站在自己的優點,鏈接應該用來補充你的問題。它們不應該是理解它的關鍵。 – mason

+0

現在好點了嗎?我沒有開發,因爲它回答了我的問題:它不可能自動執行我想要的,你必須創建自己的粘合劑... – fazega

+0

有點。我修正了你的語法:MVC不是男性或女性的對象,因此不是「他」或「她」,而是「它」。另外,你應該清楚你的意思是「那個」。我編輯了你的答案來糾正這些問題。 – mason