动态对象的属性集

时间:2017-01-09 06:19:25

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

以下是我的功能:

    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. StoreMetaData

    属性:

              public DateTime? Created { get; set; }
              public DateTime? Updated { get; set; }
    
  4. 我的问题是如何获得“Created = myObject [”StoreMetaData“] [”CreatedDate“]”。

    我想在下面的函数中传递我的对象:

    我的部分代码:

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

    OR,

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

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

    提前致谢。

3 个答案:

答案 0 :(得分:1)

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

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

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

Created = myObject.storeMetaData.CreatedDate;

答案 1 :(得分:0)

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

Created = myObject.StoreMetaData.Created;

答案 2 :(得分:0)

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

    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;
    }