[CSHARP-120] ToJson() serialization of Abstract classes Created: 02/Dec/10  Updated: 02/Apr/15  Resolved: 03/Dec/10

Status: Closed
Project: C# Driver
Component/s: None
Affects Version/s: 0.9
Fix Version/s: 0.9

Type: Bug Priority: Major - P3
Reporter: Justin Dearing Assignee: Robert Stam
Resolution: Done Votes: 0
Labels: None
Σ Remaining Estimate: Not Specified Remaining Estimate: Not Specified
Σ Time Spent: Not Specified Time Spent: Not Specified
Σ Original Estimate: Not Specified Original Estimate: Not Specified

Sub-Tasks:
Key
Summary
Type
Status
Assignee
CSHARP-122 JSON/BSON Serialization of child obje... Sub-task Closed Robert Stam  

 Description   

If I do this:
using System;

using MongoDB.Bson;

namespace BsonTest
{
internal sealed class Program
{
private static void Main(string[] args)
{
Payload payload = new ChildOfPayLoad

{ name="Justin", email="justin@domain.com" }

;

payload.ToJson();

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}

public abstract class Payload
{
private static readonly string _myId = "something";
public string myId
{
get

{ return _myId; }

set { }
}
public abstract string someType

{ get; set; }
}

public class ChildOfPayLoad : Payload
{

public string name { get; set; }

public string email

{ get; set; }

public override string someType
{
get

{ return "Something"; }

set { }
}
}

}
I get:

System.ArgumentException: An item with the same key has already been added.
at static void System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at void System.Collections.Generic.Dictionary`2[System.String,MongoDB.Bson.DefaultSerializer.BsonMemberMap].Insert(String key, BsonMemberMap value, Boolean add)
at void System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon].Add(__Canon key, __Canon value)
at void MongoDB.Bson.DefaultSerializer.BsonClassMap.Freeze() in d:\justin's projects\mongo-csharp\Bson\DefaultSerializer\BsonClassMap.cs:line 303
at static BsonClassMap MongoDB.Bson.DefaultSerializer.BsonClassMap.LookupClassMap(Type classType) in d:\justin's projects\mongo-csharp\Bson\DefaultSerializer\BsonClassMap.cs:line 186
at void MongoDB.Bson.DefaultSerializer.BsonClassMapSerializer.Serialize(BsonWriter bsonWriter, Type nominalType, Object value, Boolean serializeIdFirst) in d:\justin's projects\mongo-csharp\Bson\DefaultSerializer\BsonClassMapSerializer.cs:line 160
at static void MongoDB.Bson.Serialization.BsonSerializer.Serialize(BsonWriter bsonWriter, Type nominalType, Object value, Boolean serializeIdFirst) in d:\justin's projects\mongo-csharp\Bson\Serialization\BsonSerializer.cs:line 257
at static void MongoDB.Bson.Serialization.BsonSerializer.Serialize(BsonWriter bsonWriter, Object value, Boolean serializeIdFirst) in d:\justin's projects\mongo-csharp\Bson\Serialization\BsonSerializer.cs:line 232
at static String MongoDB.Bson.BsonExtensionMethods.ToJson(Object obj, Boolean serializeIdFirst, BsonJsonWriterSettings settings) in d:\justin's projects\mongo-csharp\Bson\BsonExtensionMethods.cs:line 110
at static String MongoDB.Bson.BsonExtensionMethods.ToJson(Object obj, BsonJsonWriterSettings settings) in d:\justin's projects\mongo-csharp\Bson\BsonExtensionMethods.cs:line 120
at static String MongoDB.Bson.BsonExtensionMethods.ToJson(Object obj) in d:\justin's projects\mongo-csharp\Bson\BsonExtensionMethods.cs:line 93
at static void BsonTest.Program.Main(String[] args) in c:\Users\DearingJ\Documents\SharpDevelop Projects\BsonTest\BsonTest\Program.cs:line 16



 Comments   
Comment by Robert Stam [ 03/Dec/10 ]

For serialization purposes ignore any overridden properties because they will already be serialized by the base class.

Generated at Wed Feb 07 21:35:52 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.