2017-10-21 85 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);