title: Serializer that sees private data, has parsable output, supports generic collections, and supports custom serialization
body: <p>I need a very specific kind of .NET serializer.</p>
  
  <p>My requirements:</p>
  
  <ol>
  <li>shouldn't skip private data</li>
  <li>output should be human-readable (or at least, easily parsable), preferably XML</li>
  <li>should support generic collections (no need to be easy, but it should be possible)</li>
  <li>should support custom-implemented serialization for specific classes.</li>
  </ol>
  
  <p>I need (2) for my elaborate version-tolerance scheme and (4) because I need to implement custom optimized serialization for a huge object (array) that I need to serialize.</p>
  
  <p>XmlSerializer fails (1).<br>
  BinaryFormatter fails (2).<br>
  SoapFormatter fails (3) and seems to be deprecated.<br>
  DataContractSerializer fails (4) AFAIK.<br>
  NetDataContractSerializer seems to fail (2) because I read it's not "interoperable" (though it does use XML??)<br>
  Protobuf-net fails (2).</p>
  
  <p><strong>Could you recommend a serializer to use?</strong><br>
  Also: <em>How is NetDataContractSerializer not interoperable?</em> Please give me an example where it breaks interoperability.</p>
  
  <p>Note: all of those serializers support version tolerance in one way or another, but I need more advanced version tolerance features. See <a href="https://stackoverflow.com/questions/3583694/backwards-compatibility-in-net-with-binaryformatter">this question of mine</a> if you care about why.</p>
  
  <p><strong>Edit:</strong> It turns out that both DataContractSerializer and NetDataContractSerializer support both (2) and (4) so my question is solved.</p>