【问题标题】:Dynamic Object's property set动态对象的属性集
【发布时间】:2017-05-23 08:41:08
【问题描述】:

下面是我的功能:

    public static StoreMetaData SetUpdateTime(dynamic myObject)
    {
        var storeMetaData = new StoreMetaData
        {
            Created = myObject["StoreMetaData"]["Created"], //Facing problem
            Updated = DateTime.Now
        };
        return storeMetaData;
    }

我有三个对象:

  1. 老师

    属性:

              public string id{get;set;}
              public string name{get;set;}
              public StoreMetaData storeMetaData{get;set;}
    
  2. 学生

    属性:

              public string id{get;set;}
              public string name{get;set;}
              public StoreMetaData storeMetaData{get;set;}
    
  3. 存储元数据

    属性:

              public DateTime? Created { get; set; }
              public DateTime? Updated { get; set; }
    

我的问题是如何获得“Created = myObject["StoreMetaData"]["CreatedDate"]"。

我想在该函数中传递我的对象,如下所示:

我的部分代码:

            teacherObj.StoreMetaData.Created = (currentObject.StoreMetaData != null ? currentObject.StoreMetaData.Created : null);
            teacherObj.storeMetaData = SetUpdateTime(teacherObj);

或,

            studentObj.StoreMetaData.Created = (currentObject.StoreMetaData != null ? currentObject.StoreMetaData.Created : null);
            studentObj.storeMetaData = SetUpdateTime(studentObj);

在 "Created = myObject["StoreMetaData"]["CreatedDate"]" 行显示错误。正确的格式是什么?

提前致谢。

【问题讨论】:

  • 听起来您应该有一个接口(或基类)来描述您需要访问的公共属性。我还强烈建议遵循 .NET 命名约定...

标签: c# asp.net dynamic asp.net-core


【解决方案1】:

纯粹基于您发布的代码,您的问题是 storeMetaData 属性是使用小写首字母定义的,但是当您尝试访问它时,您将其指定为大写。

试试Created = myObject["storeMetaData"]["CreatedDate"];

顺便说一句,我不确定索引器是否像在动态对象上那样工作。我认为他们会这样做,但以防我在处理属性时使用点语法。

Created = myObject.storeMetaData.CreatedDate;

【讨论】:

    【解决方案2】:

    希望您传递TeacherStudent 的对象,以便它包含storeMetaData 的定义,您可以从中访问Created,这是在StoreMetaData 类中定义的属性。索引器在这个阶段不会帮助你,你应该像这样使用:

    Created = myObject.StoreMetaData.Created;
    

    【讨论】:

      【解决方案3】:

      问题由我解决。感谢大家。 :) 以下是我的解决方案:

          public static StoreMetaData SetUpdateTime(dynamic myObject)
          {
              StoreMetaData oStoreMetaData = new StoreMetaData();
              oStoreMetaData = myObject.StoreMetaData;
              var storeMetaData = new StoreMetaData
              {
                  Created = oStoreMetaData.Created,
                  Updated = DateTime.Now
              };
              return storeMetaData;
          }
      

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 2020-05-25
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        相关资源
        最近更新 更多