151

I am using .NET 3.5SP1 and DataContractSerializer to serialize a class. In SP1, they changed the behavior so that you don't have to include DataContract/DataMember attributes on the class and it will just serialize the entire thing. This is the behavior I am using, but now I need to ignore one property from the serializer. I know that one way to do this is to add the DataContract attribute to the class, and just put the DataMember attribute on all of the members that I want to include. I have reasons, though, that this will not work for me.

So my question is, is there an attribute or something I can use to make the DataContractSerializer ignore a property?

5 Answers 5

219

Additionally, DataContractSerializer will serialize items marked as [Serializable] and will also serialize unmarked types in .NET 3.5 SP1 and later, to allow support for serializing anonymous types.

So, it depends on how you've decorated your class as to how to keep a member from serializing:

  • If you used [DataContract], then remove the [DataMember] for the property.
  • If you used [Serializable], then add [NonSerialized] in front of the field for the property.
  • If you haven't decorated your class, then you should add [IgnoreDataMember] to the property.
Sign up to request clarification or add additional context in comments.

8 Comments

what did you mean by "decorated your class" pls explain ?
If you haven't used any attributes on your class, like [DataContract] or [Serializable], then you would add [IgnoreDataMember] to the property you don't want to serialize. See Paul's answer or checkoutall.com/Blog/Index/201410240204236271/…
This is much more informative than the accepted answer.
How about excluding a PROPERTY when [Serializable] was used ?
@Daniel: For auto-generated properties, use [field:NonSerialized].
|
193

You might be looking for IgnoreDataMemberAttribute.

6 Comments

My domain layer didn't have the proper assembly reference, then I miss-read the documentation and ended up thinking it was a new feature of .NET 4.5. Tried to find back this thread to delete my comment without success (was in a hurry). Besides, looking at this answer's date should have ringed a bell.... 2009 .NET 4.5 post...) Sorry for wasting your time.
On .NET 4.5 here: System.Runtime.Serialization.IgnoreDataMemberAttribute works for any thing
Even 3rd-party libraries have added support for [IgnoreDataMember], like JSON.NET.
Wouldn't a short example make this an answer actually worth of the votes?
This answer is incomplete and thus misleading. [IgnoreDataMember] would not work if the class has [Serializable] attribute. See details in the answer by Doug.
|
43

In XML Serializing, you can use the [XmlIgnore] attribute (System.Xml.Serialization.XmlIgnoreAttribute) to ignore a property when serializing a class.

This may be of use to you (Or it just may be of use to anyone who found this question when attempting to find out how to ignore a property when Serializing in XML, as I was).

4 Comments

Ah negative vote. Just thought I would post that because when I searched for how to ignore a property when serializing a class, this post came up. And I wanted to put it here if anyone found this post the same way I did.
[in meta] I think they voted negative because you should open another (more especific) question about XMLSerialization and answer it, so people would find that question more relevant in their search
This answer is exactly what I was looking for
This is precisely what I needed.
3

Try marking the field with [NonSerialized()] attribute. This will tell the serializer to ignore the field.

https://msdn.microsoft.com/en-us/library/system.nonserializedattribute(v=vs.110).aspx

2 Comments

Not when using DataContractSerializer
He asked about properties not fields!
0

What you are saying is in conflict with what it says in the MSDN library at this location:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

I don't see any mention of the SP1 feature you mention.

2 Comments

You can find the doc here (3rd paragraph, 2nd sentence): msdn.microsoft.com/en-us/library/ms733127.aspx
You're right about the link you posted though, I'm not sure why they don't mention it there, too.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.