c# dynamic实现动态实体,不用定义实体就能序列化为标准json
发布时间:2020-12-16 01:25:14 所属栏目:百科 来源:网络整理
导读:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Dynamic; namespace SelfDynamicObj{ public delegate object DeleDynamic( dynamic sender, params object [] pramas); public class DynObj : Dynam
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Dynamic; namespace SelfDynamicObj { public delegate object DeleDynamic(dynamic sender,params object[] pramas); public class DynObj : DynamicObject { public Dictionary<string,object> _values; public DynObj() { _values = new Dictionary<string,object>(); } public object GetPropertyValue(string propertyName) { if (_values.ContainsKey(propertyName) == true) { return _values[propertyName]; } return null; } public void SetPropertyValue(string propertyName,object value) { if (_values.ContainsKey(propertyName) == true) { _values[propertyName] = value; } else { _values.Add(propertyName,value); } } public override bool TryGetMember(GetMemberBinder binder,out object result) { result = GetPropertyValue(binder.Name); return result == null ? false : true; } public override bool TrySetMember(SetMemberBinder binder,object value) { SetPropertyValue(binder.Name,value); return true; } public override bool TryInvokeMember(InvokeMemberBinder binder,object[] args,out object result) { var deleObj = GetPropertyValue(binder.Name) as DelegateObj; if (deleObj == null || deleObj.CallMethod == null) { result = null; return false; } result = deleObj.CallMethod(this,args); return true; } public override bool TryInvoke(InvokeBinder binder,out object result) { return base.TryInvoke(binder,args,out result); } } public class DelegateObj { private DeleDynamic _deleDynamic; public DeleDynamic CallMethod { get { return _deleDynamic; } } public DelegateObj(DeleDynamic deleDynamic) { this._deleDynamic = deleDynamic; } public static DelegateObj Function(DeleDynamic deleDynamic) { return new DelegateObj(deleDynamic); } } } List<string> names = new List<string>() { "a00","b00","c00","d00" };
? 序列化后的结果如下: { "date": "2019-02-26","stories": ["a00","d00"]} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |