序列化派生自DynamicObject类的类的实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化派生自DynamicObject类的类的实例相关的知识,希望对你有一定的参考价值。

我有一个派生自DynamicObject类的类。在调用JsonConvert.SertializeObject时,没有动态属性被序列化。

类被定义为,

        public class Component : DynamicObject
        {
        // The inner dictionary.
        public Dictionary<string, object> dictionary
            = new Dictionary<string, object>();

        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }

        // If you try to get a value of a property 
        // not defined in the class, this method is called.
        public override bool TryGetMember (
            GetMemberBinder binder, out object result)
            {
            // Converting the property name to lowercase
            // so that property names become case-insensitive.
            string name = binder.Name.ToLower();

            // If the property name is found in a dictionary,
            // set the result parameter to the property value and return true.
            // Otherwise, return false.
            return dictionary.TryGetValue(name, out result);
            }

        // If you try to set a value of a property that is
        // not defined in the class, this method is called.
        public override bool TrySetMember (
            SetMemberBinder binder, object value)
            {
            // Converting the property name to lowercase
            // so that property names become case-insensitive.
            dictionary[binder.Name.ToLower()] = value;

            // You can always add a value to a dictionary,
            // so this method always returns true.
            return true;
            }
        }

然后我这样做,

dynamic component = new Component();
component.test = "123";

JsonConvert.SerializeObject(component);
答案

你需要覆盖DynamicObject.GetDynamicMemberNames

public override IEnumerable<string> GetDynamicMemberNames()
{
    return dictionary.Keys;
}

以上是关于序列化派生自DynamicObject类的类的实例的主要内容,如果未能解决你的问题,请参考以下文章

自定义 __repr__ 作为从 Enum 派生的类的类方法

C++ 包含两个派生自同一个基类的类

拥有所有从同一个基类派生的类实例集合的最佳方法是啥?

第五周学习总结

C# 自定义 DynamicObject 强制转换为派生对象

派生自std :: exception的类的赋值运算符