Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在控制器中以JSON的形式获取数据_C#_Json - Fatal编程技术网

C# 在控制器中以JSON的形式获取数据

C# 在控制器中以JSON的形式获取数据,c#,json,C#,Json,我有一个Ajax: $.ajax({ url: "/api/Values", dataType: "json", type: "POST", contentType: 'application/json; charset=utf-8', data: JSON.stringify({ Id: "1", Name: "Name1", Family: "Family1" }), 不

我有一个Ajax:

$.ajax({
        url: "/api/Values",
        dataType: "json",
        type: "POST",
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({
            Id: "1", Name: "Name1", Family: "Family1"
        }),
不,我想在控制器中获取
数据
,以便使用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"

可以使用序列化程序将对象序列化为字符串版本。以下是您将如何使用

另一个选项是重写类中的
ToString()
,并根据需要使用它。您可以在ToString()返回的字符串中包含相关的属性值

现在,您只需在MyClass对象上调用
ToString()

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

可以使用序列化程序将对象序列化为字符串版本。以下是您将如何使用

另一个选项是重写类中的
ToString()
,并根据需要使用它。您可以在ToString()返回的字符串中包含相关的属性值

现在,您只需在MyClass对象上调用
ToString()

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

您可以使用
JavaScriptSerializer
将类对象序列化为json对象,如下所示

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

您可以使用
JavaScriptSerializer
将类对象序列化为json对象,如下所示

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

为什么要反序列化然后序列化json。必须有一种从请求中读取json的方法。(在WCF中是可能的,但我没有使用webapi)@LB,
Request.InputStream
提供控制器中的原始数据。在它之外,您可以使用
HttpContext.Current.Request.InputStream
获取原始数据。但是,除了日志记录之外,可能还会对该数据进行其他处理,将其作为模型对象接受是正确的方法。@JasonP,除非您使用web api,否则您不需要该属性。@JasonP
[FromBody]
不需要它工作。我刚刚从答案中删除了它。@MatJ在web api中它也可以工作。为什么要使用它?为什么要反序列化然后序列化json。必须有一种从请求中读取json的方法。(在WCF中是可能的,但我没有使用webapi)@LB,
Request.InputStream
提供控制器中的原始数据。在它之外,您可以使用
HttpContext.Current.Request.InputStream
获取原始数据。但是,除了日志记录之外,可能还会对该数据进行其他处理,将其作为模型对象接受是正确的方法。@JasonP,除非您使用web api,否则您不需要该属性。@JasonP
[FromBody]
不需要它工作。我刚刚从答案中删除了它。@MatJ在web api中它也可以工作。我为什么要用它?