我遇到了一段需要修改的旧代码,我添加了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);
我确定我错过了一些简单的事情,有人可以帮忙吗?
答案 0 :(得分:1)
将[DataMember]
属性添加到IBigThing
中的属性定义中。序列化框架仅分析您告诉它的类型,因此不会在BigThing
中看到任何声明。