Skip to content

Commit 945f07b

Browse files
committed
Rebase commit
1 parent 3410015 commit 945f07b

File tree

127 files changed

+2650
-1061
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

127 files changed

+2650
-1061
lines changed

src/MongoDB.Bson/BsonDefaults.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public static IBsonSerializer DynamicArraySerializer
4242
{
4343
if (!__dynamicArraySerializerWasSet)
4444
{
45-
__dynamicArraySerializer = BsonSerializer.LookupSerializer<List<object>>();
45+
__dynamicArraySerializer = BsonSerializer.LookupSerializer<List<object>>(); //TODO Should we change this? Maybe all the classes that are using this should use the local domain if this is not set
4646
}
4747
return __dynamicArraySerializer;
4848
}
@@ -62,7 +62,7 @@ public static IBsonSerializer DynamicDocumentSerializer
6262
{
6363
if (!__dynamicDocumentSerializerWasSet)
6464
{
65-
__dynamicDocumentSerializer = BsonSerializer.LookupSerializer<ExpandoObject>();
65+
__dynamicDocumentSerializer = BsonSerializer.LookupSerializer<ExpandoObject>(); //TODO ??
6666
}
6767
return __dynamicDocumentSerializer;
6868
}

src/MongoDB.Bson/BsonExtensionMethods.cs

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,31 @@ public static byte[] ToBson(
6868
BsonBinaryWriterSettings writerSettings = null,
6969
IBsonSerializer serializer = null,
7070
Action<BsonSerializationContext.Builder> configurator = null,
71+
BsonSerializationArgs args = default,
72+
int estimatedBsonSize = 0) => ToBson(obj, nominalType, BsonSerializer.DefaultSerializationDomain, writerSettings,
73+
serializer, configurator, args, estimatedBsonSize);
74+
75+
/// <summary>
76+
/// //TODO
77+
/// </summary>
78+
/// <param name="obj"></param>
79+
/// <param name="nominalType"></param>
80+
/// <param name="domain"></param>
81+
/// <param name="writerSettings"></param>
82+
/// <param name="serializer"></param>
83+
/// <param name="configurator"></param>
84+
/// <param name="args"></param>
85+
/// <param name="estimatedBsonSize"></param>
86+
/// <returns></returns>
87+
/// <exception cref="ArgumentException"></exception>
88+
/// <exception cref="ArgumentNullException"></exception>
89+
public static byte[] ToBson(
90+
this object obj,
91+
Type nominalType,
92+
IBsonSerializationDomain domain,
93+
BsonBinaryWriterSettings writerSettings = null,
94+
IBsonSerializer serializer = null,
95+
Action<BsonSerializationContext.Builder> configurator = null,
7196
BsonSerializationArgs args = default(BsonSerializationArgs),
7297
int estimatedBsonSize = 0)
7398
{
@@ -84,7 +109,7 @@ public static byte[] ToBson(
84109

85110
if (serializer == null)
86111
{
87-
serializer = BsonSerializer.LookupSerializer(nominalType);
112+
serializer = domain.LookupSerializer(nominalType);
88113
}
89114
if (serializer.ValueType != nominalType)
90115
{
@@ -138,7 +163,28 @@ public static BsonDocument ToBsonDocument(
138163
Type nominalType,
139164
IBsonSerializer serializer = null,
140165
Action<BsonSerializationContext.Builder> configurator = null,
141-
BsonSerializationArgs args = default(BsonSerializationArgs))
166+
BsonSerializationArgs args = default) => ToBsonDocument(obj, nominalType,
167+
BsonSerializer.DefaultSerializationDomain, serializer, configurator, args);
168+
169+
/// <summary>
170+
/// //TODO
171+
/// </summary>
172+
/// <param name="obj"></param>
173+
/// <param name="nominalType"></param>
174+
/// <param name="domain"></param>
175+
/// <param name="serializer"></param>
176+
/// <param name="configurator"></param>
177+
/// <param name="args"></param>
178+
/// <returns></returns>
179+
/// <exception cref="ArgumentNullException"></exception>
180+
/// <exception cref="ArgumentException"></exception>
181+
public static BsonDocument ToBsonDocument(
182+
this object obj,
183+
Type nominalType,
184+
IBsonSerializationDomain domain,
185+
IBsonSerializer serializer = null,
186+
Action<BsonSerializationContext.Builder> configurator = null,
187+
BsonSerializationArgs args = default)
142188
{
143189
if (nominalType == null)
144190
{
@@ -165,7 +211,7 @@ public static BsonDocument ToBsonDocument(
165211
return convertibleToBsonDocument.ToBsonDocument(); // use the provided ToBsonDocument method
166212
}
167213

168-
serializer = BsonSerializer.LookupSerializer(nominalType);
214+
serializer = domain.LookupSerializer(nominalType);
169215
}
170216
if (serializer.ValueType != nominalType)
171217
{
@@ -226,6 +272,29 @@ public static string ToJson(
226272
JsonWriterSettings writerSettings = null,
227273
IBsonSerializer serializer = null,
228274
Action<BsonSerializationContext.Builder> configurator = null,
275+
BsonSerializationArgs args = default)
276+
=> ToJson(obj, nominalType, BsonSerializer.DefaultSerializationDomain, writerSettings, serializer, configurator, args);
277+
278+
/// <summary>
279+
/// //TODO
280+
/// </summary>
281+
/// <param name="obj"></param>
282+
/// <param name="nominalType"></param>
283+
/// <param name="domain"></param>
284+
/// <param name="writerSettings"></param>
285+
/// <param name="serializer"></param>
286+
/// <param name="configurator"></param>
287+
/// <param name="args"></param>
288+
/// <returns></returns>
289+
/// <exception cref="ArgumentNullException"></exception>
290+
/// <exception cref="ArgumentException"></exception>
291+
public static string ToJson(
292+
this object obj,
293+
Type nominalType,
294+
IBsonSerializationDomain domain,
295+
JsonWriterSettings writerSettings = null,
296+
IBsonSerializer serializer = null,
297+
Action<BsonSerializationContext.Builder> configurator = null,
229298
BsonSerializationArgs args = default(BsonSerializationArgs))
230299
{
231300
if (nominalType == null)
@@ -236,7 +305,7 @@ public static string ToJson(
236305

237306
if (serializer == null)
238307
{
239-
serializer = BsonSerializer.LookupSerializer(nominalType);
308+
serializer = domain.LookupSerializer(nominalType);
240309
}
241310
if (serializer.ValueType != nominalType)
242311
{

src/MongoDB.Bson/IO/BsonBinaryReaderSettings.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ protected override BsonReaderSettings CloneImplementation()
136136
Encoding = _encoding,
137137
FixOldBinarySubTypeOnInput = _fixOldBinarySubTypeOnInput,
138138
FixOldDateTimeMaxValueOnInput = _fixOldDateTimeMaxValueOnInput,
139-
MaxDocumentSize = _maxDocumentSize
139+
MaxDocumentSize = _maxDocumentSize,
140+
SerializationDomain = SerializationDomain, //TODO This can be improved
140141
};
141142

142143
return clone;

src/MongoDB.Bson/IO/BsonBinaryWriterSettings.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ protected override BsonWriterSettings CloneImplementation()
122122
Encoding = _encoding,
123123
FixOldBinarySubTypeOnOutput = _fixOldBinarySubTypeOnOutput,
124124
MaxDocumentSize = _maxDocumentSize,
125-
MaxSerializationDepth = MaxSerializationDepth
125+
MaxSerializationDepth = MaxSerializationDepth,
126+
SerializationDomain = SerializationDomain,
126127
};
127128
return clone;
128129
}

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/BsonReaderSettings.cs

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

1616
using System;
17+
using MongoDB.Bson.Serialization;
1718

1819
namespace MongoDB.Bson.IO
1920
{
@@ -24,6 +25,7 @@ public abstract class BsonReaderSettings
2425
{
2526
// private fields
2627
private bool _isFrozen;
28+
private IBsonSerializationDomain _serializationDomain;
2729

2830
// constructors
2931
/// <summary>
@@ -77,6 +79,19 @@ public BsonReaderSettings FrozenCopy()
7779
}
7880
}
7981

82+
/// <summary>
83+
/// //TODO
84+
/// </summary>
85+
public IBsonSerializationDomain SerializationDomain
86+
{
87+
get => _serializationDomain;
88+
set
89+
{
90+
if (_isFrozen) { ThrowFrozenException(); }
91+
_serializationDomain = value;
92+
}
93+
}
94+
8095
// protected methods
8196
/// <summary>
8297
/// Creates a clone of the settings.

src/MongoDB.Bson/IO/BsonWriterSettings.cs

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

1616
using System;
17+
using MongoDB.Bson.Serialization;
1718

1819
namespace MongoDB.Bson.IO
1920
{
@@ -25,6 +26,7 @@ public abstract class BsonWriterSettings
2526
// private fields
2627
private bool _isFrozen;
2728
private int _maxSerializationDepth = BsonDefaults.MaxSerializationDepth;
29+
private IBsonSerializationDomain _serializationDomain;
2830

2931
// constructors
3032
/// <summary>
@@ -92,6 +94,19 @@ public BsonWriterSettings FrozenCopy()
9294
}
9395
}
9496

97+
/// <summary>
98+
/// //TODO
99+
/// </summary>
100+
public IBsonSerializationDomain SerializationDomain
101+
{
102+
get => _serializationDomain;
103+
set
104+
{
105+
if (_isFrozen) { ThrowFrozenException(); }
106+
_serializationDomain = value;
107+
}
108+
}
109+
95110
// protected methods
96111
/// <summary>
97112
/// Creates a clone of the settings.

src/MongoDB.Bson/IO/IBsonReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public interface IBsonReader : IDisposable
6262
/// <summary>
6363
/// Pops the settings.
6464
/// </summary>
65-
void PopSettings();
65+
void PopSettings(); //TODO Why do we have push and pop methods? They are not used
6666

6767
/// <summary>
6868
/// Pushes new settings for the reader.

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/ObjectModel/BsonDocumentWrapper.cs

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,19 @@ public object Wrapped
9191
/// <typeparam name="TNominalType">The nominal type of the wrapped object.</typeparam>
9292
/// <param name="value">The wrapped object.</param>
9393
/// <returns>A BsonDocumentWrapper.</returns>
94-
public static BsonDocumentWrapper Create<TNominalType>(TNominalType value)
94+
public static BsonDocumentWrapper Create<TNominalType>(TNominalType value) =>
95+
Create(value, BsonSerializer.DefaultSerializationDomain);
96+
97+
/// <summary>
98+
/// //TODO
99+
/// </summary>
100+
/// <param name="value"></param>
101+
/// <param name="domain"></param>
102+
/// <typeparam name="TNominalType"></typeparam>
103+
/// <returns></returns>
104+
public static BsonDocumentWrapper Create<TNominalType>(TNominalType value, IBsonSerializationDomain domain)
95105
{
96-
return Create(typeof(TNominalType), value);
106+
return Create(typeof(TNominalType), value, domain);
97107
}
98108

99109
/// <summary>
@@ -102,9 +112,19 @@ public static BsonDocumentWrapper Create<TNominalType>(TNominalType value)
102112
/// <param name="nominalType">The nominal type of the wrapped object.</param>
103113
/// <param name="value">The wrapped object.</param>
104114
/// <returns>A BsonDocumentWrapper.</returns>
105-
public static BsonDocumentWrapper Create(Type nominalType, object value)
115+
public static BsonDocumentWrapper Create(Type nominalType, object value) =>
116+
Create(nominalType, value, BsonSerializer.DefaultSerializationDomain);
117+
118+
/// <summary>
119+
/// //TODO
120+
/// </summary>
121+
/// <param name="nominalType"></param>
122+
/// <param name="value"></param>
123+
/// <param name="domain"></param>
124+
/// <returns></returns>
125+
public static BsonDocumentWrapper Create(Type nominalType, object value, IBsonSerializationDomain domain)
106126
{
107-
var serializer = BsonSerializer.LookupSerializer(nominalType);
127+
var serializer = domain.LookupSerializer(nominalType); //TODO ??
108128
return new BsonDocumentWrapper(value, serializer);
109129
}
110130

@@ -114,14 +134,25 @@ public static BsonDocumentWrapper Create(Type nominalType, object value)
114134
/// <typeparam name="TNominalType">The nominal type of the wrapped objects.</typeparam>
115135
/// <param name="values">A list of wrapped objects.</param>
116136
/// <returns>A list of BsonDocumentWrappers.</returns>
117-
public static IEnumerable<BsonDocumentWrapper> CreateMultiple<TNominalType>(IEnumerable<TNominalType> values)
137+
public static IEnumerable<BsonDocumentWrapper> CreateMultiple<TNominalType>(IEnumerable<TNominalType> values) =>
138+
CreateMultiple(values, BsonSerializer.DefaultSerializationDomain);
139+
140+
/// <summary>
141+
/// //TODO
142+
/// </summary>
143+
/// <param name="values"></param>
144+
/// <param name="domain"></param>
145+
/// <typeparam name="TNominalType"></typeparam>
146+
/// <returns></returns>
147+
/// <exception cref="ArgumentNullException"></exception>
148+
public static IEnumerable<BsonDocumentWrapper> CreateMultiple<TNominalType>(IEnumerable<TNominalType> values, IBsonSerializationDomain domain)
118149
{
119150
if (values == null)
120151
{
121152
throw new ArgumentNullException("values");
122153
}
123154

124-
var serializer = BsonSerializer.LookupSerializer(typeof(TNominalType));
155+
var serializer = domain.LookupSerializer(typeof(TNominalType));
125156
return values.Select(v => new BsonDocumentWrapper(v, serializer));
126157
}
127158

@@ -131,7 +162,18 @@ public static IEnumerable<BsonDocumentWrapper> CreateMultiple<TNominalType>(IEnu
131162
/// <param name="nominalType">The nominal type of the wrapped object.</param>
132163
/// <param name="values">A list of wrapped objects.</param>
133164
/// <returns>A list of BsonDocumentWrappers.</returns>
134-
public static IEnumerable<BsonDocumentWrapper> CreateMultiple(Type nominalType, IEnumerable values)
165+
public static IEnumerable<BsonDocumentWrapper> CreateMultiple(Type nominalType, IEnumerable values) =>
166+
CreateMultiple(nominalType, values, BsonSerializer.DefaultSerializationDomain);
167+
168+
/// <summary>
169+
/// //TODO
170+
/// </summary>
171+
/// <param name="nominalType"></param>
172+
/// <param name="values"></param>
173+
/// <param name="domain"></param>
174+
/// <returns></returns>
175+
/// <exception cref="ArgumentNullException"></exception>
176+
public static IEnumerable<BsonDocumentWrapper> CreateMultiple(Type nominalType, IEnumerable values, IBsonSerializationDomain domain)
135177
{
136178
if (nominalType == null)
137179
{
@@ -142,7 +184,7 @@ public static IEnumerable<BsonDocumentWrapper> CreateMultiple(Type nominalType,
142184
throw new ArgumentNullException("values");
143185
}
144186

145-
var serializer = BsonSerializer.LookupSerializer(nominalType);
187+
var serializer = domain.LookupSerializer(nominalType);
146188
return values.Cast<object>().Select(v => new BsonDocumentWrapper(v, serializer));
147189
}
148190

0 commit comments

Comments
 (0)