Gavin
Gavin

Reputation: 1233

Exposing properties to an implementation of IList

I am having trouble with a piece of old code that I need to amend, I have added the Metadata property but cannot expose it, the code is simple.

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

When I inspect the app or serialize to json, the Metadata is ignored and can only be accessed if explicitly called.

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

Im sure I am missing something simple, can anyone help please?

Upvotes: 0

Views: 82

Answers (1)

Gusdor
Gusdor

Reputation: 14332

Add the [DataMember] attribute to the property definition in IBigThing. The serialization framework only analyses the types that you tell it about and therefore will not see any declarations in BigThing.

Upvotes: 1

Related Questions