将一个类转换为动态并添加属性我有一个类MyClass。我想把它变成一个动态对象,这样我就可以添加属性。这就是我所希望的:dynamicdto=Factory.Create(id);dto.newProperty="123";我收到错误消息:WEB.Models.MyClass不包含“newProperty”的定义这不可能吗?以下对我有用:它允许您将任何对象转换为Expando对象。publicstaticdynamicToDynamic(thisTobj){IDictionaryexpando=newExpandoObject();foreach(varpropertyInfointypeof(T).GetProperties()){varcurrentValue=propertyInfo.GetValue(obj);expando.Add(propertyInfo.Name,currentValue);}返回expando作为ExpandoObject;基于:http://geekswithblogs.net/Nettuce/archive/2012/06/02/convert-dynamic-to-type-and-convert-type-to-dynamic.aspx您不能在运行时向类型添加属性。但是,有一个例外:ExpandoObject。所以如果你需要在运行时添加属性,你应该使用ExpandoObject,其他类型不支持这个特性。您不能动态地将成员添加到类实例。但是您可以使用ExpandoObject。使用工厂创建新的并使用MyClass属性对其进行初始化:publicstaticExpandoObjectCreate(intid){dynamicobj=newExpandoObject();obj.Id=id;obj.CreatedAt=DateTime.Now;//等等返回对象;然后你可以添加新成员:dynamicdto=Factory.Create(id);dto.newProperty="123";由于我的对象具有特定于JSON的命名,因此我想出了一个替代方案:返回JsonConvert.DeserializeObject(json,typeof(ExpandoObject));对我来说,结果非常好:Model:publicpartialclassSettings{[JsonProperty("id")]publicintId{get;放;}[JsonProperty("runTime")]publicTimeSpanRunTime{get;放;}[JsonProperty("retryInterval")]publicTimeSpanRetryInterval{get;放;}[JsonProperty("retryCutoffTime")]publicTimeSpanRetryCutoffTime{get;放;}[JsonProperty("cjisUrl")]publicstringCjisUrl{get;放;}[JsonProperty("cjisUserName")]publicstringCjisUserName{get;放;}[JsonIgnore]publicstringCjisPassword{get;放;}[J}[JsonProperty("exportFilename")]publicstringExportFilename{get;放;}[JsonProperty("jMShareDirectory")]publicstringJMShareDirectory{get;放;}[JsonIgnore]公共字符串数据库{get;放;我这样使用它:privatestaticdynamicDynamicSettings(Settingssettings){varsettingsDyn=settings.ToDynamic();如果(settingsDyn==null)返回设置;settingsDyn.guid=Guid.NewGuid();返回设置动态;}结果收到了这个:{“id”:1,“runTime”:“07:00:00”,“retryInterval”:“00:05:00”,“retryCutoffTime”:“09:00:00”,“cjisUrl”:“xxxxxx”,“cjisUserName”:“xxxxx”,“importDirectory”:“导入”,“exportDirectory”:“输出”,“exportFilename”:“xxxx.xml”,“jMShareDirectory”:“xxxxxxxx”,"guid":"210d936e-4b93-43dc-9866-4bbad4abd7e7"}我不知道速度,我的意思是它是序列化和反序列化,但对于我的使用来说它非常灵活,比如使用JsonIgnore隐藏属性。注:以上xxxxx已编辑。?以上就是C#学习教程:将类转为动态并添加属性的全部内容分享给大家。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
