From 1e03d90c07232ddd63e3eadf81e455802a6ee1dc Mon Sep 17 00:00:00 2001 From: rstam Date: Sat, 30 Oct 2010 15:02:26 -0400 Subject: [PATCH] Added no-argument constructor to BsonDiscriminatorAttribute. Modified SerializePolymorphicClassTests to test [BsonDiscriminatorOptions(Required = true)]. --- .../Attributes/BsonDiscriminatorAttribute.cs | 3 +++ Bson/DefaultSerializer/BsonClassMap.cs | 4 +++- .../DefaultSerializer/SerializePolymorphicClassTests.cs | 6 ++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Bson/DefaultSerializer/Attributes/BsonDiscriminatorAttribute.cs b/Bson/DefaultSerializer/Attributes/BsonDiscriminatorAttribute.cs index 04bf0ea630..902260a21b 100644 --- a/Bson/DefaultSerializer/Attributes/BsonDiscriminatorAttribute.cs +++ b/Bson/DefaultSerializer/Attributes/BsonDiscriminatorAttribute.cs @@ -27,6 +27,9 @@ namespace MongoDB.Bson.DefaultSerializer { #endregion #region constructors + public BsonDiscriminatorAttribute() { + } + public BsonDiscriminatorAttribute( string discriminator ) { diff --git a/Bson/DefaultSerializer/BsonClassMap.cs b/Bson/DefaultSerializer/BsonClassMap.cs index faa574b3a8..7ddea1b6d7 100644 --- a/Bson/DefaultSerializer/BsonClassMap.cs +++ b/Bson/DefaultSerializer/BsonClassMap.cs @@ -428,7 +428,9 @@ namespace MongoDB.Bson.DefaultSerializer { var discriminatorAttribute = (BsonDiscriminatorAttribute) classType.GetCustomAttributes(typeof(BsonDiscriminatorAttribute), false).FirstOrDefault(); if (discriminatorAttribute != null) { - discriminator = discriminatorAttribute.Discriminator; + if (discriminatorAttribute.Discriminator != null) { + discriminator = discriminatorAttribute.Discriminator; + } discriminatorIsRequired = discriminatorAttribute.Required; } diff --git a/BsonUnitTests/DefaultSerializer/SerializePolymorphicClassTests.cs b/BsonUnitTests/DefaultSerializer/SerializePolymorphicClassTests.cs index 11ad10dce8..001a09ed83 100644 --- a/BsonUnitTests/DefaultSerializer/SerializePolymorphicClassTests.cs +++ b/BsonUnitTests/DefaultSerializer/SerializePolymorphicClassTests.cs @@ -21,6 +21,7 @@ using System.Text; using NUnit.Framework; using MongoDB.Bson; +using MongoDB.Bson.DefaultSerializer; using MongoDB.Bson.IO; using MongoDB.Bson.Serialization; @@ -31,6 +32,7 @@ namespace MongoDB.BsonUnitTests.DefaultSerializer { public string FA { get; set; } } + [BsonDiscriminator(Required = true)] private abstract class B : A { public string FB { get; set; } } @@ -103,7 +105,7 @@ namespace MongoDB.BsonUnitTests.DefaultSerializer { public void TestSerializeDasD() { D d = new D { FA = "a", FB = "b", FD = "d" }; var json = d.ToJson(); - var expected = ("{ 'FA' : 'a', 'FB' : 'b', 'FD' : 'd' }").Replace("'", "\""); // no discriminator + var expected = ("{ '_t' : 'D', 'FA' : 'a', 'FB' : 'b', 'FD' : 'd' }").Replace("'", "\""); // has discriminator because B has DiscriminatorIsRequired true Assert.AreEqual(expected, json); var bson = d.ToBson(); @@ -139,7 +141,7 @@ namespace MongoDB.BsonUnitTests.DefaultSerializer { public void TestSerializeEasE() { E e = new E { FA = "a", FB = "b", FE = "e" }; var json = e.ToJson(); - var expected = ("{ 'FA' : 'a', 'FB' : 'b', 'FE' : 'e' }").Replace("'", "\""); // no discriminator + var expected = ("{ '_t' : 'E', 'FA' : 'a', 'FB' : 'b', 'FE' : 'e' }").Replace("'", "\""); // has discriminator because B has DiscriminatorIsRequired true Assert.AreEqual(expected, json); var bson = e.ToBson();