将属性公开给IList的实现

时间:2014-01-21 12:00:14

标签: c#

我遇到了一段需要修改的旧代码,我添加了Metadata属性,但是无法公开它,代码很简单。

public interface IBigThing : IList<ILittleThing>
{
    string Metadata { get; set; }
}   

[Serializable]
    public class BigThing: List<ILittleThing>, IBigThing , ISerializable
    {
        string m_Metadata;

        [DataMember]
        public string Metadata
        {
            get { return m_Metadata; }
            set { m_Metadata = value; }
        }

        #region Constructors
        public BigThing()
        { }

        public BigThing(string p_Metadata)
        {
            Metadata = p_Metadata;
        }
        #endregion



        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Metadata", Metadata);
        }
    }

当我检查应用程序或序列化为json时,元数据将被忽略,只有在显式调用时才能访问。

IBigThing toReturn = new BigThingFactory.Manufacture();
string strJson = new JavaScriptSerializer().Serialize(toReturn);

我确定我错过了一些简单的事情,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

[DataMember]属性添加到IBigThing中的属性定义中。序列化框架仅分析您告诉它的类型,因此不会在BigThing中看到任何声明。