将JSON响应转换为自定义C#对象

将JSON响应转换为自定义C#对象,c#,asp.net,json,json.net,deserialization,C#,Asp.net,Json,Json.net,Deserialization,我正在给一个Web服务打电话,并得到以下Json响应 {"handler":{"name":"abc"},"intent":{"name":"actions.intent.MAIN","params":{},"query":"Mit Google sprechen"},"scene":{"

我正在给一个Web服务打电话,并得到以下Json响应

{"handler":{"name":"abc"},"intent":{"name":"actions.intent.MAIN","params":{},"query":"Mit Google sprechen"},"scene":{"name":"actions.scene.START_CONVERSATION","slotFillingStatus":"UNSPECIFIED","slots":{},"next":{"name":"Start_Frage"}},"session":{"id":"ABwppHHVumDrliLJaLSikS6KnIlN7yYv6Z4XJCOYzEZt8Fr08RH6r0wtM2-E0v40lS2p1YosTDfpSCd5Lw","params":{},"typeOverrides":[],"languageCode":""},"user":{"locale":"de-DE","params":{},"accountLinkingStatus":"ACCOUNT_LINKING_STATUS_UNSPECIFIED","verificationStatus":"VERIFIED","packageEntitlements":[],"gaiamint":"","permissions":[],"lastSeenTime":"2021-04-01T10:06:59Z"},"home":{"params":{}},"device":{"capabilities":["SPEECH","RICH_RESPONSE","LONG_FORM_AUDIO"]}}
我曾经将Json字符串转换为C#类

公共类处理程序
{
公共字符串名称{get;set;}
}
公共类参数
{
}
公共阶级意图
{
公共字符串名称{get;set;}
公共参数@Params{get;set;}
公共字符串查询{get;set;}
}
公务舱舱位
{
}
下一节公共课
{
公共字符串名称{get;set;}
}
公共课堂场景
{
公共字符串名称{get;set;}
公共字符串slotFillingStatus{get;set;}
公共插槽插槽{get;set;}
公共下一个{get;set;}
}
公开课
{
公共字符串id{get;set;}
公共参数@Params{get;set;}
公共列表类型重写{get;set;}
公共字符串语言代码{get;set;}
}
公共类用户
{
公共字符串区域设置{get;set;}
公共参数@Params{get;set;}
公共字符串accountLinkingStatus{get;set;}
公共字符串验证状态{get;set;}
公共列表包元素{get;set;}
公共字符串gaiamint{get;set;}
公共列表权限{get;set;}
public DateTime lastSeenTime{get;set;}
}
公屋
{
公共参数@Params{get;set;}
}
公共类设备
{
公共列表功能{get;set;}
}
公共类根
{
公共处理程序{get;set;}
公共意图{get;set;}
公共场景场景{get;set;}
公共会话会话{get;set;}
公共用户{get;set;}
公共主页{get;set;}
公用设备设备{get;set;}
}
但如何将Json响应解析为C#对象呢?然后对其进行任何更改并最终返回响应?我是一个编程新手,这就是为什么一个循序渐进的例子会很有帮助

我现在的班级是这样的。变量体保存Json响应

public class GoogleController : ControllerBase
    {

        [HttpGet]
        public IActionResult Get()
        {
            var result = new Result();
            result.Value1 = 123;

            return Ok(result);
        }
        [HttpPost]
        public async Task<IActionResult> PostWebHook()
        {

            string body;
            using (var reader = new StreamReader(Request.Body))
            {
                body = await reader.ReadToEndAsync();

            }
            return Ok("Test123");
                
        }
    }
public类GoogleController:ControllerBase
{
[HttpGet]
public IActionResult Get()
{
var result=新结果();
result.Value1=123;
返回Ok(结果);
}
[HttpPost]
公共异步任务PostWebHook()
{
弦体;
使用(var reader=newstreamreader(Request.Body))
{
body=wait reader.ReadToEndAsync();
}
返回Ok(“Test123”);
}
}
在第一行添加一个命令,例如:

Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse); 
var myDeserializedClass = JsonConvert.DeserializeObject<Root>(body);
Root myDeserializedClass=JsonConvert.DeserializeObject(myJsonResponse);
此行用于反序列化文本。

你的应该是:

Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse); 
var myDeserializedClass = JsonConvert.DeserializeObject<Root>(body);
var myDeserializedClass=JsonConvert.DeserializeObject(body);

使用
FromBody
属性反序列化body

    [HttpPost]
    public async Task<IActionResult> PostWebHook([FromBody] Root root)
    {
        // root is deserialized body
        // modify root
        ...
        return Ok(root);
    }
[HttpPost]
公共异步任务PostWebHook([FromBody]根)
{
//根是反序列化的主体
//修改根
...
返回Ok(根);
}

使用如何?您不必显式地反序列化请求内容。如果操作接受一个与JSON主体匹配的对象,ASP.NET将自动反序列化它。运行一些基本的MVC教程是个好主意。这对于它的工作原理来说是非常基本的。这是非常手动的,并且依赖于JSON.Net的使用。相反,让框架为你做这件事,正如另一个答案所显示的那样。@DavidG你是对的,arther的答案更好