Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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# 如何使用动态到法线模型?_C#_Asp.net Core - Fatal编程技术网

C# 如何使用动态到法线模型?

C# 如何使用动态到法线模型?,c#,asp.net-core,C#,Asp.net Core,我想将动态传入数据转换为普通模型并使用它。我该怎么办? 我在转换ConvertedModel时出错。您的模型变量不是JSON字符串,因此无法对其进行反序列化。它是一个动态对象-它是C#中的一种类型。如果数据与模型具有相同的结构,则可以将其转换为该类型 但无论如何这都不是必需的——为什么不直接在方法签名中使用模型类型呢?不清楚你为什么这样设置 如果您这样编写,则ASP.NET将自动尝试将传入数据直接反序列化到您的模型类型: public AjaxResponse AddFavourite(You

我想将动态传入数据转换为普通模型并使用它。我该怎么办?


我在转换ConvertedModel时出错。

您的
模型
变量不是JSON字符串,因此无法对其进行反序列化。它是一个
动态
对象-它是C#中的一种类型。如果数据与模型具有相同的结构,则可以将其转换为该类型

但无论如何这都不是必需的——为什么不直接在方法签名中使用模型类型呢?不清楚你为什么这样设置

如果您这样编写,则ASP.NET将自动尝试将传入数据直接反序列化到您的模型类型:

public AjaxResponse AddFavourite(YourModelClass model) {
你可以用 字符串strJSON=JsonConvert.SerilzeObject();
var model=JsonConvert.Deserialize(strJSON)

如果您想将动态数据转换为普通模型,这是可能的,但您需要传递数据以告知要转换的模型。您可以参考: 下面是一个演示:

 public class A { 
     public string userid { get; set; }
     public string symbol { get; set; }
    }
    public class B
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }
    public class C
    {
        public string Id { get; set; }
        public string Email { get; set; }
    }
控制器:

public IActionResult DynamicModel([FromBody]dynamic d,string modelName) {
            var model = new Object();
            switch (modelName)
            {
                case "A":
                    model = JsonConvert.DeserializeObject<A>(d.ToString());
                    break;
                case "B":
                    model = JsonConvert.DeserializeObject<B>(d.ToString());
                    break;
                case "C":
                    model = JsonConvert.DeserializeObject<C>(d.ToString());
                    break;
                default:
                    break;
            }
            return Ok(model);
        }
public IActionResult DynamicModel([FromBody]dynamic d,字符串modelName){
var model=新对象();
开关(型号名称)
{
案例“A”:

model=JsonConvert.DeserializeObject

这在任何方面都有什么关系?我想你还没有完全理解这个问题。实际上我的目标是学习一些新的东西,并尝试找到另一种简单的方法。但是……为什么?这不是一件有用的事情。我展示的方法已经是最简单的方法。我建议学习一些实际上会让我受益的东西改进你的代码。通过一个模型而不是编写多个模型来关注我的代码。我手头上有太多的方法,我需要对所有的方法都这样做。这就是为什么我要这样做的原因。这没有任何意义。每个动作方法都有一个单独的模型通常是一件好事,因为这样你只需要保存每种情况下所需的确切字段。有时,您可能会发现一个模型可以在几个操作之间共享(例如,一个操作获取一些数据,另一个操作更新相同的数据),但大多数情况下不是。这很好。此外,你的想法不会为你节省任何时间,因为你仍然需要深入研究所有的方法并编写代码来将它们转换为你真正想要的类型。你只是无缘无故地将其复杂化了。就像我说的,学习一些有用的东西,让.NET框架继续处理反序列化将模型类型放入方法签名的全部目的是为了避免您自己反序列化或强制转换数据的麻烦。您似乎想重新发明轮子。它不会帮助您,也不会节省您的时间,而且会导致额外的工作和额外的问题,正如您已经发现的那样。不要担心通过这个系统,它可以帮助你。