Skip to content

Commit 0cd5bbf

Browse files
committed
Revert "Removed serialization domain from reader and added to deserializationContext"
This reverts commit 0a4bba3.
1 parent 0a4bba3 commit 0cd5bbf

File tree

7 files changed

+44
-40
lines changed

7 files changed

+44
-40
lines changed

src/MongoDB.Bson/IO/BsonBinaryReaderSettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ protected override BsonReaderSettings CloneImplementation()
137137
FixOldBinarySubTypeOnInput = _fixOldBinarySubTypeOnInput,
138138
FixOldDateTimeMaxValueOnInput = _fixOldDateTimeMaxValueOnInput,
139139
MaxDocumentSize = _maxDocumentSize,
140+
SerializationDomain = SerializationDomain
140141
};
141142

142143
return clone;

src/MongoDB.Bson/IO/BsonDocumentReaderSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public static BsonDocumentReaderSettings Defaults
6767
/// <returns>A clone of the settings.</returns>
6868
protected override BsonReaderSettings CloneImplementation()
6969
{
70-
var clone = new BsonDocumentReaderSettings();
70+
var clone = new BsonDocumentReaderSettings { SerializationDomain = SerializationDomain }; //TODO This can be improved
7171
return clone;
7272
}
7373
}

src/MongoDB.Bson/IO/BsonReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace MongoDB.Bson.IO
2525
/// <summary>
2626
/// Represents a BSON reader for some external format (see subclasses).
2727
/// </summary>
28-
public abstract class BsonReader : IBsonReader
28+
public abstract class BsonReader : IBsonReaderInternal
2929
{
3030
// private fields
3131
private bool _disposed = false;

src/MongoDB.Bson/IO/BsonReaderSettings.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public abstract class BsonReaderSettings
2525
{
2626
// private fields
2727
private bool _isFrozen;
28+
private IBsonSerializationDomain _serializationDomain;
2829

2930
// constructors
3031
/// <summary>
@@ -78,6 +79,16 @@ public BsonReaderSettings FrozenCopy()
7879
}
7980
}
8081

82+
internal IBsonSerializationDomain SerializationDomain
83+
{
84+
get => _serializationDomain;
85+
set
86+
{
87+
if (_isFrozen) { ThrowFrozenException(); }
88+
_serializationDomain = value;
89+
}
90+
}
91+
8192
// protected methods
8293
/// <summary>
8394
/// Creates a clone of the settings.

src/MongoDB.Bson/IO/IBsonReader.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
namespace MongoDB.Bson.IO
1919
{
20-
//FP This interface should have the settingg property as well, same way it's done for thr writer
2120
/// <summary>
2221
/// Represents a BSON reader.
2322
/// </summary>
@@ -257,4 +256,13 @@ public interface IBsonReader : IDisposable
257256
/// </summary>
258257
void SkipValue();
259258
}
259+
260+
internal interface IBsonReaderInternal : IBsonReader
261+
{
262+
//TODO I'm not sure why this was not already present, there is already an equivalent in IBsonWriter.
263+
/// <summary>
264+
/// Gets the settings of the reader.
265+
/// </summary>
266+
BsonReaderSettings Settings { get; }
267+
}
260268
}

src/MongoDB.Bson/IO/JsonReaderSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public static JsonReaderSettings Defaults
6868
/// <returns>A clone of the settings.</returns>
6969
protected override BsonReaderSettings CloneImplementation()
7070
{
71-
var clone = new JsonReaderSettings();
71+
var clone = new JsonReaderSettings { SerializationDomain = SerializationDomain }; //TODO This can be improved
7272
return clone;
7373
}
7474
}

src/MongoDB.Bson/Serialization/BsonDeserializationContext.cs

Lines changed: 20 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
*/
1515

1616
using System;
17-
using System.Net;
1817
using MongoDB.Bson.IO;
1918

2019
namespace MongoDB.Bson.Serialization
@@ -34,7 +33,6 @@ public class BsonDeserializationContext
3433
// constructors
3534
private BsonDeserializationContext(
3635
IBsonReader reader,
37-
IBsonSerializationDomain serializationDomain,
3836
bool allowDuplicateElementNames,
3937
IBsonSerializer dynamicArraySerializer,
4038
IBsonSerializer dynamicDocumentSerializer)
@@ -44,8 +42,12 @@ private BsonDeserializationContext(
4442
_dynamicArraySerializer = dynamicArraySerializer;
4543
_dynamicDocumentSerializer = dynamicDocumentSerializer;
4644

47-
_serializationDomain = serializationDomain; //FP Using this version to find error in an easier way for now
48-
//_serializationDomain = serializationDomain ?? BsonSerializer.DefaultSerializationDomain;
45+
if (reader is IBsonReaderInternal readerInternal)
46+
{
47+
_serializationDomain = readerInternal.Settings?.SerializationDomain;
48+
}
49+
50+
_serializationDomain ??= BsonSerializer.DefaultSerializationDomain;
4951

5052
_dynamicArraySerializer ??= _serializationDomain.BsonDefaults.DynamicArraySerializer;
5153
_dynamicDocumentSerializer ??= _serializationDomain.BsonDefaults.DynamicDocumentSerializer;
@@ -101,34 +103,20 @@ public IBsonReader Reader
101103
get { return _reader; }
102104
}
103105

104-
// //DOMAIN-API We should remove this version of the CreateRoot method, and use the one that takes a serialization domain.
105-
// // public static methods
106-
// /// <summary>
107-
// /// Creates a root context.
108-
// /// </summary>
109-
// /// <param name="reader">The reader.</param>
110-
// /// <param name="configurator">The configurator.</param>
111-
// /// <returns>
112-
// /// A root context.
113-
// /// </returns>
114-
// public static BsonDeserializationContext CreateRoot(
115-
// IBsonReader reader,
116-
// Action<Builder> configurator = null)
117-
// {
118-
// var builder = new Builder(null, reader, BsonSerializer.DefaultSerializationDomain);
119-
// if (configurator != null)
120-
// {
121-
// configurator(builder);
122-
// }
123-
// return builder.Build();
124-
// }
125-
126-
internal static BsonDeserializationContext CreateRoot(
106+
// public static methods
107+
/// <summary>
108+
/// Creates a root context.
109+
/// </summary>
110+
/// <param name="reader">The reader.</param>
111+
/// <param name="configurator">The configurator.</param>
112+
/// <returns>
113+
/// A root context.
114+
/// </returns>
115+
public static BsonDeserializationContext CreateRoot(
127116
IBsonReader reader,
128-
IBsonSerializationDomain serializationDomain,
129117
Action<Builder> configurator = null)
130118
{
131-
var builder = new Builder(null, reader, serializationDomain);
119+
var builder = new Builder(null, reader);
132120
if (configurator != null)
133121
{
134122
configurator(builder);
@@ -147,7 +135,7 @@ internal static BsonDeserializationContext CreateRoot(
147135
public BsonDeserializationContext With(
148136
Action<Builder> configurator = null)
149137
{
150-
var builder = new Builder(this, _reader, _serializationDomain);
138+
var builder = new Builder(this, _reader);
151139
if (configurator != null)
152140
{
153141
configurator(builder);
@@ -166,18 +154,16 @@ public class Builder
166154
private IBsonSerializer _dynamicArraySerializer;
167155
private IBsonSerializer _dynamicDocumentSerializer;
168156
private IBsonReader _reader;
169-
internal IBsonSerializationDomain _serializationDomain;
170157

171158
// constructors
172-
internal Builder(BsonDeserializationContext other, IBsonReader reader, IBsonSerializationDomain serializationDomain)
159+
internal Builder(BsonDeserializationContext other, IBsonReader reader)
173160
{
174161
if (reader == null)
175162
{
176163
throw new ArgumentNullException("reader");
177164
}
178165

179166
_reader = reader;
180-
_serializationDomain = serializationDomain;
181167
if (other != null)
182168
{
183169
_allowDuplicateElementNames = other.AllowDuplicateElementNames;
@@ -238,16 +224,14 @@ public IBsonReader Reader
238224
get { return _reader; }
239225
}
240226

241-
internal IBsonSerializationDomain SerializationDomain => _serializationDomain;
242-
243227
// public methods
244228
/// <summary>
245229
/// Builds the BsonDeserializationContext instance.
246230
/// </summary>
247231
/// <returns>A BsonDeserializationContext.</returns>
248232
internal BsonDeserializationContext Build()
249233
{
250-
return new BsonDeserializationContext(_reader, _serializationDomain, _allowDuplicateElementNames, _dynamicArraySerializer, _dynamicDocumentSerializer);
234+
return new BsonDeserializationContext(_reader, _allowDuplicateElementNames, _dynamicArraySerializer, _dynamicDocumentSerializer);
251235
}
252236
}
253237
}

0 commit comments

Comments
 (0)