2017-10-21 86 views
0

我有這樣的Ajax:獲取數據,JSON在控制器

$.ajax({ 
     url: "/api/Values", 
     dataType: "json", 
     type: "POST", 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify({ 
      Id: "1", Name: "Name1", Family: "Family1" 
     }), 

不,我想data的控制器,以便我可以將它保存到log4net的一個文本文件。目前,我寫了這個代碼:

public void PostValues(Class1 cs) 
    { 
     var data = $"Id = {cs.Id}, Name = {cs.Name}, Family = {cs.Family}"; 
     Log.Debug($"POST Request, value = {data}"); 
    } 

隨着模型結合我可以綁定到類的屬性,如上面的數據,然後像上面將它們結合起來。但我不想用這種方式,因爲我必須通過所有的類屬性。有沒有辦法將數據發佈到控制器作爲JSON?我敢肯定這應該是一個辦法讓下面的行控制器:

Id: "1", Name: "Name1", Family: "Family1" 

回答

2

您可以使用序列化對象序列化到一個字符串版本。這裏是你將如何做到這一點與​​

public void Post(Class1 value) 
{ 
    var stringVersion = Newtonsoft.Json.JsonConvert.SerializeObject(value); 
    // use stringVersion now. 
} 

另一種選擇是覆蓋ToString()在你的類並使用它作爲必要的。您可以包括由toString()返回的字符串

public class MyClass 
{ 
    public int Id { set; get; } 
    public string Name { set; get; } 
    public string Family{ set; get; } 

    public override String ToString() 
    { 
     return $"Id:{Id},Name:{Name}"; 
    } 
} 

現在,你可以簡單地調用ToString()您MyClass的對象對相關屬性值。

public void Post(MyClass value) 
{ 
    if(value!=null) 
    { 
     var stringVersion = value.ToString(); 
    } 
} 
+0

預期它的工作。 –

+0

爲什麼要反序列化,然後序列化一個JSON。必須有一種方法來讀取json,因爲它來自請求。 (t可能與WCF,但我沒有使用webapi) –

+0

@LB,'Request.InputStream'給你一個控制器內的原始數據。在它之外,你可以使用'HttpContext.Current.Request.InputStream'獲取原始數據。但是,除了日誌記錄以外,可能會對此數據進行額外處理,因此將其作爲模型對象接受將是正確的方式。 –

0

可以使用JavaScriptSerializer序列化類對象爲JSON對象,這樣

var json = new JavaScriptSerializer().Serialize(cs);