序列化从DynamicObject类派生的类的实例 [英] Serialize instance of a class deriving from DynamicObject class

查看:71
本文介绍了序列化从DynamicObject类派生的类的实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个从DynamicObject类派生的类.调用JsonConvert.SertializeObject时,不会动态化任何动态属性.

I have a class that derives from DynamicObject class. On calling JsonConvert.SertializeObject, none of the dynamic properties are serialized.

类定义为

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

推荐答案

您需要覆盖

You need to override DynamicObject.GetDynamicMemberNames:

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

这篇关于序列化从DynamicObject类派生的类的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆