如何使用动态对象类创建 .net 核心 MVC 模型?

Posted

技术标签:

【中文标题】如何使用动态对象类创建 .net 核心 MVC 模型?【英文标题】:How create a .net core MVC Model using dynamic object class? 【发布时间】:2020-08-18 13:21:08 【问题描述】:

我正在寻找一个代码示例来说明如何使用 C# 在 .net 核心 MVC 中创建模型类,其中该类具有动态属性。我的 API 接收到一个 http POST 请求,我正在为我的 API 的 HeadersModel 类中的每个 HTTP 标头创建一个属性。

我正在使用 .net core 3.1

namespace HttpsHeaders.Models

    public class Headers : DynamicObject
    
        //public int ID  get; set; 
        //public string HeaderOne  get; set; 
//Instead of these properties, I want to add the properties dynamically
Dictionary<string, object> dictionary
            = new Dictionary<string, object>();
     

如果有更好的动态对象解决方案,请在我学习.net core C#时告诉我。

编辑: 如何将动态对象序列化为 JSON 字符串?

我可以在此处找到有关如何创建动态对象的说明: https://docs.microsoft.com/en-us/dotnet/api/system.dynamic.dynamicobject?view=netcore-3.1

但是,我无法将 Headers 对象序列化为字符串 json。 这些指令不起作用,序列化后我得到一个空字符串。

C# json object for dynamic properties How to serialize a dynamic object to a JSON string in dotnet core?

dynamic dynObjectInstance = new Headers ();
dynObjectInstance.Foo = "Bar"; 
string resultJson = JsonConvert.SerializeObject(dynObjectInstance);
\\ this returns ""
\\ I was expecting to get “\”Foo\”:\”Bar\””

【问题讨论】:

【参考方案1】:

我找到了一个比定义模型更好的解决方案,它使用的是 ExpandObject。

    // ExpandoObject supports IDictionary so we can extend it like this
    dynamic expando = new ExpandoObject();
    var expandoDict = expando as IDictionary<string, object>;
    if (expandoDict.ContainsKey(propertyName))
        expandoDict[propertyName] = propertyValue;
    else
        expandoDict.Add(propertyName, propertyValue);

【讨论】:

以上是关于如何使用动态对象类创建 .net 核心 MVC 模型?的主要内容,如果未能解决你的问题,请参考以下文章

在.net核心MVC中创建JSon

非因素 MVC 核心创建动态 html

在 View .NET CORE MVC 中动态显示组件和数据

java核心学习(四十) 使用反射生成JDK动态代理

如何使用 MVC 和使用 .Net 的实体框架在表中动态添加数据库字段?

如何在没有循环或jquery的mvc中使用模型类添加动态控件