From 3ea20fcec23d65bb999f70c2da14410bfc7e6fa3 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 18 Jun 2023 16:54:54 +0200 Subject: [PATCH 01/17] Update * Stream serializer version is now **3** * Changed write extension methods to be non-generic where possible + Added `SerializerException.Wrap(Async)` + Added non-generic read extensions where possible + Reduced reflection usage where possible to improve performance + Using cached reflection to improve reflection performance + Lots of code refactoring + Added more fine grained tests - Fixed some bugs --- ...Extensions.AutoStreamSerializerBase-1.html | 47 +- ...tensions.AutoStreamSerializerConfig-1.html | 48 +- ...alizerInfo.AsyncDeserializer_Delegate.html | 8 +- ...rializerInfo.AsyncSerializer_Delegate.html | 8 +- ...mSerializerInfo.Deserializer_Delegate.html | 6 +- ...eamSerializerInfo.Serializer_Delegate.html | 6 +- ...erExtensions.AutoStreamSerializerInfo.html | 72 +- ...erExtensions.DefaultSerializerOptions.html | 2 +- ....DisposableAutoStreamSerializerBase-1.html | 133 +- ...nsions.DisposableStreamSerializerBase.html | 164 +- ...numerator.StreamAsyncEnumeratorBase-1.html | 143 +- ...ons.Enumerator.StreamEnumeratorBase-1.html | 151 +- ...merator.StreamNumberAsyncEnumerator-1.html | 110 +- ...s.Enumerator.StreamNumberEnumerator-1.html | 110 +- ...tor.StreamSerializerAsyncEnumerator-1.html | 102 +- ...umerator.StreamSerializerEnumerator-1.html | 106 +- ...numerator.StreamStringAsyncEnumerator.html | 118 +- ...ons.Enumerator.StreamStringEnumerator.html | 118 +- ...lizerExtensions.IAutoStreamSerializer.html | 2 +- ...xtensions.IAutoStreamSerializerConfig.html | 4 +- ...rializerExtensions.ISerializerOptions.html | 2 +- ...erializerExtensions.IStreamSerializer.html | 2 +- ...erExtensions.IStreamSerializerVersion.html | 2 +- ...treamSerializerExtensions.NumberTypes.html | 4 +- ...treamSerializerExtensions.ObjectTypes.html | 6 +- ...lizerExtensions.SerializerEventArgs-1.html | 2 +- ...ializerExtensions.SerializerException.html | 261 +- ...SerializerExtensions.SerializerHelper.html | 128 +- ...lizerExtensions.SerializerOptionsBase.html | 34 +- ...SerializerExtensions.StreamExtensions.html | 10682 +++++++++------- ...mSerializer.AsyncDeserialize_Delegate.html | 6 +- ...eamSerializer.AsyncSerialize_Delegate.html | 6 +- ...StreamSerializer.Deserialize_Delegate.html | 6 +- ...alizer.FindAsyncDeserializer_Delegate.html | 6 +- ...rializer.FindAsyncSerializer_Delegate.html | 6 +- ...ializer.FindSyncDeserializer_Delegate.html | 6 +- ...erializer.FindSyncSerializer_Delegate.html | 6 +- ...nsions.StreamSerializer.Init_Delegate.html | 6 +- ...ns.StreamSerializer.LoadType_Delegate.html | 6 +- ...s.StreamSerializer.Serialize_Delegate.html | 6 +- ...SerializerExtensions.StreamSerializer.html | 172 +- ...ute.SerializerOptionsFactory_Delegate.html | 2 +- ...lizerAttribute.StreamFactory_Delegate.html | 2 +- ...rExtensions.StreamSerializerAttribute.html | 10 +- ...alizerExtensions.StreamSerializerBase.html | 110 +- ...lizerExtensions.StreamSerializerModes.html | 2 +- ...erializerExtensions.TypeLoadEventArgs.html | 2 +- docs/manifest.json | 102 +- docs/xrefmap.yml | 1932 +-- .../Stream-Serializer-Extensions Docs.csproj | 1 + .../Stream-Serializer-Extensions Tests.csproj | 2 + .../StreamExtensions_Tests.Basic.cs | 63 + .../StreamExtensions_Tests.cs | 7 + src/Stream-Serializer-Extensions.sln | 25 +- .../AutoStreamSerializerConfig.cs | 106 +- .../AutoStreamSerializerInfo.cs | 67 +- .../DisposableStreamSerializerBase.cs | 7 +- .../NumberTypes.cs | 2 +- .../ObjectTypes.cs | 4 +- .../SerializerException.cs | 95 +- .../SerializerHelper.cs | 67 +- .../SerializerOptionsBase.cs | 43 +- .../Stream-Serializer-Extensions.csproj | 11 +- .../StreamExtensions.Read.Any.cs | 550 +- .../StreamExtensions.Read.Array.cs | 194 +- .../StreamExtensions.Read.Basic.cs | 877 +- .../StreamExtensions.Read.Bytes.cs | 67 +- .../StreamExtensions.Read.Dictionary.cs | 167 +- .../StreamExtensions.Read.Enum.cs | 199 +- .../StreamExtensions.Read.List.cs | 164 +- .../StreamExtensions.Read.Number.cs | 396 + .../StreamExtensions.Read.Object.cs | 410 +- .../StreamExtensions.Read.Serialized.cs | 274 +- .../StreamExtensions.Read.Stream.cs | 284 +- .../StreamExtensions.Read.String.cs | 184 +- .../StreamExtensions.Read.Struct.cs | 56 +- .../StreamExtensions.Read.cs | 134 +- .../StreamExtensions.Write.Any.cs | 78 +- .../StreamExtensions.Write.Array.cs | 96 +- .../StreamExtensions.Write.Basic.cs | 720 +- .../StreamExtensions.Write.Bytes.cs | 34 +- .../StreamExtensions.Write.Dictionary.cs | 78 +- .../StreamExtensions.Write.Enum.cs | 119 +- .../StreamExtensions.Write.List.cs | 72 +- .../StreamExtensions.Write.Number.cs | 198 + .../StreamExtensions.Write.Object.cs | 205 +- .../StreamExtensions.Write.Serialized.cs | 31 +- .../StreamExtensions.Write.Stream.cs | 107 +- .../StreamExtensions.Write.String.cs | 123 +- .../StreamExtensions.Write.Struct.cs | 97 +- .../StreamExtensions.Write.cs | 204 +- .../StreamSerializer.cs | 202 +- .../StreamSerializerAttribute.cs | 70 +- .../StreamSerializerBase.cs | 6 +- 94 files changed, 11050 insertions(+), 10821 deletions(-) create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Basic.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html index 3ff2e83..e9e34e8 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html @@ -79,14 +79,11 @@

Inheritance
System.Object
-
wan24.ObjectValidation.ValidatableObjectBase
-
StreamSerializerBase
-
AutoStreamSerializerBase<T>
+
StreamSerializerBase
+
AutoStreamSerializerBase<T>
Implements
-
wan24.ObjectValidation.IObjectValidatable
-
System.ComponentModel.DataAnnotations.IValidatableObject
IAutoStreamSerializer
IStreamSerializerVersion
IStreamSerializer
@@ -117,42 +114,12 @@
Inherited Members
StreamSerializerBase.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken)
-
- wan24.ObjectValidation.ValidatableObjectBase.Validate(System.ComponentModel.DataAnnotations.ValidationContext) -
-
- wan24.ObjectValidation.ValidatableObjectBase.System.ComponentModel.DataAnnotations.IValidatableObject.Validate(System.ComponentModel.DataAnnotations.ValidationContext) -
-
- wan24.ObjectValidation.ValidatableObjectBase.ObjectValidatable(wan24.ObjectValidation.IObjectValidatable) -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions
Assembly: StreamSerializerExtensions.dll
Syntax
-
public abstract class AutoStreamSerializerBase<T> : StreamSerializerBase, IObjectValidatable, IValidatableObject, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : AutoStreamSerializerBase<T>
+
public abstract class AutoStreamSerializerBase<T> : StreamSerializerBase, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : AutoStreamSerializerBase<T>
Type Parameters
@@ -455,12 +422,6 @@
Returns

Implements

-
- wan24.ObjectValidation.IObjectValidatable -
-
- System.ComponentModel.DataAnnotations.IValidatableObject -
IAutoStreamSerializer
@@ -481,7 +442,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
SerializerHelper.ToBytes(IStreamSerializer, Boolean) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html index 071e093..dbefc8f 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html @@ -135,10 +135,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

AutoStreamSerializerConfig(Boolean)

@@ -171,10 +171,10 @@

Properties

| - Improve this Doc + Improve this Doc - View Source + View Source

Attribute

@@ -202,10 +202,10 @@
Property Value
| - Improve this Doc + Improve this Doc - View Source + View Source

DefaultValues

@@ -233,10 +233,10 @@
Property Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Infos

@@ -257,17 +257,17 @@
Property Value
- wan24.Core.OrderedDictionary<System.String, AutoStreamSerializerInfo> + OrderedDictionary<System.String, AutoStreamSerializerInfo> | - Improve this Doc + Improve this Doc - View Source + View Source

Type

@@ -297,10 +297,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Deserialize(T, Stream, Int32)

@@ -343,10 +343,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

DeserializeAsync(T, Stream, Int32, CancellationToken)

@@ -410,10 +410,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

InitDefaultValues()

@@ -426,10 +426,10 @@
Declaration
| - Improve this Doc + Improve this Doc - View Source + View Source

Serialize(T, Stream)

@@ -466,10 +466,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializeAsync(T, Stream, CancellationToken)

@@ -540,7 +540,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -550,10 +550,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html index 3f4c955..eb065e0 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html @@ -123,7 +123,7 @@
Parameters
- CancellationToken + System.Threading.CancellationToken cancellationToken

Cancellation token

@@ -157,7 +157,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -167,10 +167,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html index bc83791..7bf9488 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html @@ -123,7 +123,7 @@
Parameters
- CancellationToken + System.Threading.CancellationToken cancellationToken

Cancellation token

@@ -156,7 +156,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -166,10 +166,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html index d9068e4..0215ef7 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html @@ -151,7 +151,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -161,10 +161,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html index 8d98e00..7983c39 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html @@ -135,7 +135,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -145,10 +145,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html index d2e0132..d86454f 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html @@ -115,19 +115,19 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source -

AutoStreamSerializerInfo(PropertyInfo)

+

AutoStreamSerializerInfo(PropertyInfoExt)

Constructor

Declaration
-
public AutoStreamSerializerInfo(PropertyInfo property)
+
public AutoStreamSerializerInfo(PropertyInfoExt property)
Parameters
@@ -140,7 +140,7 @@
Parameters
- + @@ -151,10 +151,10 @@

Properties

| - Improve this Doc + Improve this Doc - View Source + View Source

AsyncDeserializer

@@ -182,10 +182,10 @@
Property Value
System.Reflection.PropertyInfoPropertyInfoExt property

Property

| - Improve this Doc + Improve this Doc - View Source + View Source

AsyncSerializer

@@ -213,10 +213,10 @@
Property Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Attribute

@@ -244,10 +244,10 @@
Property Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Deserializer

@@ -275,10 +275,10 @@
Property Value
| - Improve this Doc + Improve this Doc - View Source + View Source

IsNullable

@@ -306,10 +306,10 @@
Property Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Property

@@ -318,7 +318,7 @@

Declaration
-
public PropertyInfo Property { get; }
+
public PropertyInfoExt Property { get; }
Property Value
@@ -330,17 +330,17 @@
Property Value
- +
System.Reflection.PropertyInfoPropertyInfoExt
| - Improve this Doc + Improve this Doc - View Source + View Source

Serializer

@@ -370,10 +370,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Deserialize<T>(IAutoStreamSerializerConfig, T, Stream, Int32)

@@ -439,13 +439,13 @@
Type Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source -

DeserializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken)

+

DeserializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken)

Deserialize

@@ -489,7 +489,7 @@
Parameters
- CancellationToken + System.Threading.CancellationToken cancellationToken

Cancellation token

@@ -529,10 +529,10 @@
Type Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

Serialize<T>(IAutoStreamSerializerConfig, T, Stream)

@@ -592,13 +592,13 @@
Type Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source -

SerializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, CancellationToken)

+

SerializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, CancellationToken)

Serialize

@@ -636,7 +636,7 @@
Parameters
- CancellationToken + System.Threading.CancellationToken cancellationToken

Cancellation token

@@ -685,7 +685,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -695,10 +695,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html index d4bbbe3..3dda6f7 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html @@ -191,7 +191,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html index b36bc43..15d1e95 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html @@ -79,17 +79,12 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
DisposableStreamSerializerBase
-
DisposableAutoStreamSerializerBase<T>
+
DisposableStreamSerializerBase
+
DisposableAutoStreamSerializerBase<T>
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
-
wan24.ObjectValidation.IObjectValidatable
-
System.ComponentModel.DataAnnotations.IValidatableObject
+
IObjectValidatable
IAutoStreamSerializer
IStreamSerializerVersion
IStreamSerializer
@@ -120,84 +115,12 @@
Inherited Members
DisposableStreamSerializerBase.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken)
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.Dispose(System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions
Assembly: StreamSerializerExtensions.dll
Syntax
-
public abstract class DisposableAutoStreamSerializerBase<T> : DisposableStreamSerializerBase, IDisposableObject, IDisposable, IAsyncDisposable, IObjectValidatable, IValidatableObject, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : DisposableAutoStreamSerializerBase<T>
+
public abstract class DisposableAutoStreamSerializerBase<T> : DisposableStreamSerializerBase, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : DisposableAutoStreamSerializerBase<T>
Type Parameters
@@ -219,10 +142,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

DisposableAutoStreamSerializerBase()

@@ -237,10 +160,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

AutoStreamSerializerConfig

Auto stream serializer configuration

@@ -269,10 +192,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Deserialize(Stream, Int32)

@@ -311,10 +234,10 @@
Overrides
DisposableStreamSerializerBase.Deserialize(Stream, Int32)
| - Improve this Doc + Improve this Doc - View Source + View Source

DeserializeAsync(Stream, Int32, CancellationToken)

@@ -374,10 +297,10 @@
Overrides
DisposableStreamSerializerBase.DeserializeAsync(Stream, Int32, CancellationToken)
| - Improve this Doc + Improve this Doc - View Source + View Source

Serialize(Stream)

@@ -410,10 +333,10 @@
Overrides
DisposableStreamSerializerBase.Serialize(Stream)
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializeAsync(Stream, CancellationToken)

@@ -469,10 +392,10 @@

Explicit Interface Implementations

| - Improve this Doc + Improve this Doc - View Source + View Source

IAutoStreamSerializer.AutoStreamSerializerConfig

@@ -500,19 +423,7 @@
Returns

Implements

- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
-
- wan24.ObjectValidation.IObjectValidatable -
-
- System.ComponentModel.DataAnnotations.IValidatableObject + IObjectValidatable
IAutoStreamSerializer @@ -534,7 +445,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
SerializerHelper.ToBytes(IStreamSerializer, Boolean) @@ -547,10 +458,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html index 9b2979f..031cd4c 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html @@ -79,109 +79,29 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
DisposableStreamSerializerBase
- +
DisposableStreamSerializerBase
+
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
IStreamSerializerVersion
IStreamSerializer
-
wan24.ObjectValidation.IObjectValidatable
-
System.ComponentModel.DataAnnotations.IValidatableObject
-
-
-
Inherited Members
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.Dispose(System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
+
IObjectValidatable
Namespace: wan24.StreamSerializerExtensions
Assembly: StreamSerializerExtensions.dll
Syntax
-
public abstract class DisposableStreamSerializerBase : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable, IStreamSerializerVersion, IStreamSerializer, IObjectValidatable, IValidatableObject
+
public abstract class DisposableStreamSerializerBase : DisposableBase, IStreamSerializerVersion, IStreamSerializer

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

DisposableStreamSerializerBase(Stream, Int32, Nullable<Int32>)

@@ -224,10 +144,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

DisposableStreamSerializerBase(Nullable<Int32>)

@@ -260,10 +180,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

BASE_VERSION

Base object version

@@ -292,10 +212,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Deserialize(Stream, Int32)

@@ -332,10 +252,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

DeserializeAsync(Stream, Int32, CancellationToken)

@@ -393,10 +313,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

Serialize(Stream)

@@ -427,10 +347,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializeAsync(Stream, CancellationToken)

@@ -484,10 +404,10 @@

Explicit Interface Implementations

| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.Deserialize(Stream, Int32)

@@ -524,10 +444,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken)

@@ -585,10 +505,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.Serialize(Stream)

@@ -619,10 +539,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.SerializeAsync(Stream, CancellationToken)

@@ -674,10 +594,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializerVersion.ObjectVersion

@@ -705,10 +625,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializerVersion.SerializedObjectVersion

@@ -736,10 +656,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializerVersion.SerializerVersion

@@ -766,15 +686,6 @@
Returns

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
IStreamSerializerVersion
@@ -782,10 +693,7 @@

Implements

IStreamSerializer
- wan24.ObjectValidation.IObjectValidatable -
-
- System.ComponentModel.DataAnnotations.IValidatableObject + IObjectValidatable

Extension Methods

@@ -798,7 +706,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
SerializerHelper.ToBytes(IStreamSerializer, Boolean) @@ -811,10 +719,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html index c8e7fa0..7073c29 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html @@ -79,96 +79,20 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
StreamAsyncEnumeratorBase<T>
- - - +
StreamAsyncEnumeratorBase<T>
+ + +
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
IAsyncEnumerator<T>
-
-
Inherited Members
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
-
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public abstract class StreamAsyncEnumeratorBase<T> : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable
+
public abstract class StreamAsyncEnumeratorBase<T> : DisposableBase
Type Parameters
@@ -190,10 +114,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamAsyncEnumeratorBase(Stream, Nullable<Int32>, CancellationToken)

@@ -238,10 +162,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

_Current

Current object

@@ -268,10 +192,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Cancellation

Cancellation token

@@ -298,10 +222,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializerVersion

Serializer version

@@ -328,10 +252,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Stream

Stream

@@ -360,10 +284,10 @@

Properties

| - Improve this Doc + Improve this Doc - View Source + View Source

Current

@@ -392,10 +316,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Dispose(Boolean)

@@ -422,14 +346,12 @@
Parameters
-
Overrides
-
wan24.Core.DisposableBase.Dispose(System.Boolean)
| - Improve this Doc + Improve this Doc - View Source + View Source

EnumerateAsync<tEnumerator>(Stream, Nullable<Int32>, CancellationToken)

@@ -505,10 +427,10 @@
Type Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

MoveNextAsync()

@@ -535,10 +457,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObjectAsync()

@@ -566,15 +488,6 @@
Returns

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
IAsyncEnumerator<>
@@ -589,7 +502,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -599,10 +512,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html index eb20f47..05510f5 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html @@ -79,96 +79,20 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
StreamEnumeratorBase<T>
- - - +
StreamEnumeratorBase<T>
+ + +
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
System.Collections.IEnumerator<T>
-
-
Inherited Members
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
-
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public abstract class StreamEnumeratorBase<T> : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable
+
public abstract class StreamEnumeratorBase<T> : DisposableBase
Type Parameters
@@ -190,10 +114,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamEnumeratorBase(Stream, Nullable<Int32>)

@@ -232,10 +156,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

_Current

Current object

@@ -262,10 +186,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializerVersion

Serializer version

@@ -292,10 +216,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

StartPosition

Stream start position

@@ -322,10 +246,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Stream

Stream

@@ -354,10 +278,10 @@

Properties

| - Improve this Doc + Improve this Doc - View Source + View Source

Current

@@ -386,10 +310,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Dispose(Boolean)

@@ -416,14 +340,12 @@
Parameters
-
Overrides
-
wan24.Core.DisposableBase.Dispose(System.Boolean)
| - Improve this Doc + Improve this Doc - View Source + View Source

Enumerate<tEnumerator>(Stream, Nullable<Int32>)

@@ -493,10 +415,10 @@
Type Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

MoveNext()

@@ -523,10 +445,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObject()

@@ -555,10 +477,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

Reset()

@@ -572,10 +494,10 @@

Explicit Interface Implementations

| - Improve this Doc + Improve this Doc - View Source + View Source

IEnumerator.Current

@@ -601,15 +523,6 @@
Returns

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
System.Collections.IEnumerator<>
@@ -624,7 +537,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -634,10 +547,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html index 628ace1..87068f0 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html @@ -79,15 +79,11 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
- -
StreamNumberAsyncEnumerator<T>
+ +
StreamNumberAsyncEnumerator<T>
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
IAsyncEnumerator<T>
@@ -116,81 +112,12 @@
Inherited Members
StreamAsyncEnumeratorBase<T>.EnumerateAsync<tEnumerator>(Stream, Nullable<Int32>, CancellationToken)
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public class StreamNumberAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : struct, IConvertible
+
public class StreamNumberAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T> where T : struct, IConvertible
Type Parameters
@@ -212,10 +139,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamNumberAsyncEnumerator(Stream, Nullable<Int32>, CancellationToken)

@@ -258,10 +185,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

StreamNumberAsyncEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

@@ -312,10 +239,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

Pool

Array pool

@@ -344,10 +271,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObjectAsync()

@@ -377,15 +304,6 @@
Returns
Overrides
wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<T>.ReadObjectAsync()

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
IAsyncEnumerator<>
@@ -400,7 +318,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -410,10 +328,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html index 114f2a1..cfc7ae7 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html @@ -79,15 +79,11 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
StreamEnumeratorBase<T>
-
StreamNumberEnumerator<T>
+
StreamEnumeratorBase<T>
+
StreamNumberEnumerator<T>
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
System.Collections.IEnumerator<T>
@@ -122,81 +118,12 @@
Inherited Members
StreamEnumeratorBase<T>.Enumerate<tEnumerator>(Stream, Nullable<Int32>)
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public class StreamNumberEnumerator<T> : StreamEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : struct, IConvertible
+
public class StreamNumberEnumerator<T> : StreamEnumeratorBase<T> where T : struct, IConvertible
Type Parameters
@@ -218,10 +145,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamNumberEnumerator(Stream, Nullable<Int32>)

@@ -258,10 +185,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

StreamNumberEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>)

@@ -306,10 +233,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

Pool

Array pool

@@ -338,10 +265,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObject()

@@ -371,15 +298,6 @@
Returns
Overrides
wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<T>.ReadObject()

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
System.Collections.IEnumerator<>
@@ -394,7 +312,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -404,10 +322,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html index cd25305..643280b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html @@ -79,15 +79,11 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
StreamAsyncEnumeratorBase<T>
-
StreamSerializerAsyncEnumerator<T>
+
StreamAsyncEnumeratorBase<T>
+
StreamSerializerAsyncEnumerator<T>
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
IAsyncEnumerator<T>
@@ -116,81 +112,12 @@
Inherited Members
StreamAsyncEnumeratorBase<T>.EnumerateAsync<tEnumerator>(Stream, Nullable<Int32>, CancellationToken)
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public class StreamSerializerAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : class, IStreamSerializer
+
public class StreamSerializerAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T> where T : class, IStreamSerializer
Type Parameters
@@ -212,10 +139,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamSerializerAsyncEnumerator(Stream, Nullable<Int32>, CancellationToken)

@@ -260,10 +187,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObjectAsync()

@@ -293,15 +220,6 @@
Returns
Overrides
wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<T>.ReadObjectAsync()

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
IAsyncEnumerator<>
@@ -316,7 +234,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -326,10 +244,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html index 35f0dc6..bb284d9 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html @@ -79,15 +79,11 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
StreamEnumeratorBase<T>
-
StreamSerializerEnumerator<T>
+
StreamEnumeratorBase<T>
+
StreamSerializerEnumerator<T>
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
System.Collections.IEnumerator<T>
@@ -119,81 +115,12 @@
Inherited Members
StreamEnumeratorBase<T>.Enumerate<tEnumerator>(Stream, Nullable<Int32>)
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public class StreamSerializerEnumerator<T> : StreamEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : class, IStreamSerializer
+
public class StreamSerializerEnumerator<T> : StreamEnumeratorBase<T> where T : class, IStreamSerializer
Type Parameters
@@ -215,10 +142,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamSerializerEnumerator(Stream, Nullable<Int32>)

@@ -257,10 +184,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Dispose(Boolean)

@@ -291,10 +218,10 @@
Overrides
wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<T>.Dispose(System.Boolean)
| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObject()

@@ -324,15 +251,6 @@
Returns
Overrides
wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<T>.ReadObject()

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
System.Collections.IEnumerator<>
@@ -347,7 +265,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -357,10 +275,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html index 34eb6bc..def5506 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html @@ -79,15 +79,11 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
StreamAsyncEnumeratorBase<System.String>
-
StreamStringAsyncEnumerator
+
StreamAsyncEnumeratorBase<System.String>
+
StreamStringAsyncEnumerator
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
IAsyncEnumerator<System.String>
@@ -116,90 +112,21 @@
Inherited Members
StreamAsyncEnumeratorBase<String>.EnumerateAsync<tEnumerator>(Stream, Nullable<Int32>, CancellationToken)
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase<string>, IDisposableObject, IDisposable, IAsyncDisposable
+
public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase<string>

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamStringAsyncEnumerator(Stream, Nullable<Int32>, CancellationToken)

@@ -242,10 +169,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

StreamStringAsyncEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

@@ -308,10 +235,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

MaxLen

Maximum UTF-8 string bytes length

@@ -338,10 +265,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

MinLen

Minimum UTF-8 string bytes length

@@ -368,10 +295,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Pool

Array pool

@@ -400,10 +327,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObjectAsync()

@@ -433,15 +360,6 @@
Returns
Overrides
wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<System.String>.ReadObjectAsync()

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
IAsyncEnumerator<>
@@ -456,7 +374,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -466,10 +384,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html index b9be2f8..c5a14aa 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html @@ -79,15 +79,11 @@

Inheritance
System.Object
-
wan24.Core.DisposableBase
-
StreamEnumeratorBase<System.String>
-
StreamStringEnumerator
+
StreamEnumeratorBase<System.String>
+
StreamStringEnumerator
Implements
-
wan24.Core.IDisposableObject
-
System.IDisposable
-
System.IAsyncDisposable
System.Collections.IEnumerator<System.String>
@@ -122,90 +118,21 @@
Inherited Members
StreamEnumeratorBase<String>.Enumerate<tEnumerator>(Stream, Nullable<Int32>)
-
- wan24.Core.DisposableBase.DisposeSyncObject -
-
- wan24.Core.DisposableBase.AsyncDisposing -
-
- wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
-
- wan24.Core.DisposableBase.DisposeCore() -
-
- wan24.Core.DisposableBase.DisposeAttributes() -
-
- wan24.Core.DisposableBase.DisposeAttributesAsync() -
-
- wan24.Core.DisposableBase.Dispose() -
-
- wan24.Core.DisposableBase.DisposeAsync() -
-
- wan24.Core.DisposableBase.IsDisposing -
-
- wan24.Core.DisposableBase.IsDisposed -
-
- wan24.Core.DisposableBase.OnDisposing -
-
- wan24.Core.DisposableBase.OnDisposed -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
Namespace: wan24.StreamSerializerExtensions.Enumerator
Assembly: StreamSerializerExtensions.dll
Syntax
-
public class StreamStringEnumerator : StreamEnumeratorBase<string>, IDisposableObject, IDisposable, IAsyncDisposable
+
public class StreamStringEnumerator : StreamEnumeratorBase<string>

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamStringEnumerator(Stream, Nullable<Int32>)

@@ -242,10 +169,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

StreamStringEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

@@ -302,10 +229,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

MaxLen

Maximum UTF-8 string bytes length

@@ -332,10 +259,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

MinLen

Minimum UTF-8 string bytes length

@@ -362,10 +289,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Pool

Array pool

@@ -394,10 +321,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

ReadObject()

@@ -427,15 +354,6 @@
Returns
Overrides
wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<System.String>.ReadObject()

Implements

-
- wan24.Core.IDisposableObject -
-
- System.IDisposable -
-
- System.IAsyncDisposable -
System.Collections.IEnumerator<>
@@ -450,7 +368,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -460,10 +378,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html index 14b0cf1..0301e56 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html @@ -150,7 +150,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
SerializerHelper.ToBytes(IStreamSerializer, Boolean) diff --git a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html index d3a653b..5f2e68d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html +++ b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html @@ -172,7 +172,7 @@
Property Value
- wan24.Core.OrderedDictionary<System.String, AutoStreamSerializerInfo> + OrderedDictionary<System.String, AutoStreamSerializerInfo> @@ -219,7 +219,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
diff --git a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html index 60159a1..8287e79 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html @@ -359,7 +359,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
diff --git a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html index 581118a..80e580b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html @@ -285,7 +285,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
SerializerHelper.ToBytes(IStreamSerializer, Boolean) diff --git a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html index da6f6c7..2cd006a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html +++ b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html @@ -203,7 +203,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
SerializerHelper.ToBytes(IStreamSerializer, Boolean) diff --git a/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html b/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html index 272629b..281f492 100644 --- a/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html +++ b/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html @@ -104,7 +104,7 @@

Fields Default -

Enumeration default value (for enumeration writing/reading)

+

Enumeration default value (for enumeration writing/reading) or default nullable numeric writing action

@@ -206,7 +206,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo()
- SerializerHelper.ValidateObject<NumberTypes>() + SerializerHelper.ValidateDeserializedObject<NumberTypes>()
diff --git a/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html b/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html index 17b2355..06a03dd 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html +++ b/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html @@ -99,7 +99,7 @@

Fields Bool -

Boolean

+

Boolean (boolean true)

@@ -129,7 +129,7 @@

Fields Empty -

Empty (or zero)

+

Empty (or zero or boolean false)

@@ -222,7 +222,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo()
- SerializerHelper.ValidateObject<ObjectTypes>() + SerializerHelper.ValidateDeserializedObject<ObjectTypes>()
diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html b/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html index a2d203d..382bb07 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html @@ -214,7 +214,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html index e2fd927..089a024 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html @@ -91,10 +91,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

SerializerException()

@@ -107,10 +107,10 @@
Declaration
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializerException(String)

@@ -141,10 +141,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializerException(String, Exception)

@@ -175,6 +175,249 @@
Parameters
Exception inner

Inner exception

+ + + + +

Methods +

+ + | + Improve this Doc + + + View Source + + +

Wrap(Action, String)

+

Wrap an exception in a serializer exception

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static void Wrap(Action action, string message = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Actionaction

Action

+
System.Stringmessage

Message

+
+ + | + Improve this Doc + + + View Source + + +

Wrap<T>(Func<T>, String)

+

Wrap an exception in a serializer exception

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static T Wrap<T>(Func<T> func, string message = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Func<T>func

Function

+
System.Stringmessage

Message

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
T
+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T

Return type

+
+ + | + Improve this Doc + + + View Source + + +

WrapAsync(Func<Task>, String)

+

Wrap an exception in a serializer exception

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task WrapAsync(Func<Task> action, string message = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Func<Task>action

Action

+
System.Stringmessage

Message

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task
+ + | + Improve this Doc + + + View Source + + +

WrapAsync<T>(Func<Task<T>>, String)

+

Wrap an exception in a serializer exception

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<T> WrapAsync<T>(Func<Task<T>> func, string message = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Func<Task<T>>func

Function

+
System.Stringmessage

Message

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<T>
+
Type Parameters
+ + + + + + + + + + + @@ -190,7 +433,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -200,10 +443,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html index 9fb871b..15f18f2 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -115,10 +115,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

EnsureNotNull(Object)

@@ -166,10 +166,10 @@
Returns
NameDescription
T

Return type

| - Improve this Doc + Improve this Doc - View Source + View Source

EnsureValidLength(Int32, Int32, Int32)

@@ -229,10 +229,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

EnsureValidLength(Int64, Int64, Int64)

@@ -292,10 +292,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetKeySerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

@@ -361,10 +361,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetNumberAndType(Object)

@@ -411,10 +411,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetNumberType(Object, Boolean)

@@ -467,10 +467,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetObjectSerializerInfo(Object)

@@ -517,10 +517,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

@@ -586,10 +586,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetValueSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

@@ -655,10 +655,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

HasValueFlags(NumberTypes)

@@ -706,10 +706,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsEmpty(ObjectTypes)

@@ -757,10 +757,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsMaxValue(NumberTypes)

@@ -808,10 +808,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsMinValue(NumberTypes)

@@ -859,10 +859,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsNumber(ObjectTypes)

@@ -871,7 +871,8 @@

Declaration
-
public static bool IsNumber(this ObjectTypes type)
+
[TargetedPatchingOptOut("Tiny method")]
+public static bool IsNumber(this ObjectTypes type)
Parameters
@@ -909,10 +910,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsUnsigned(NumberTypes)

@@ -960,10 +961,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsUnsigned(ObjectTypes)

@@ -1011,10 +1012,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsZero(NumberTypes)

@@ -1062,10 +1063,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

RemoveFlags(NumberTypes)

@@ -1113,10 +1114,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

RemoveFlags(ObjectTypes)

@@ -1164,10 +1165,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

RemoveValueFlags(NumberTypes)

@@ -1215,10 +1216,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

ToBytes(IStreamSerializer, Boolean)

@@ -1227,7 +1228,8 @@

Declaration
-
public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerVersion = true)
+
[TargetedPatchingOptOut("Tiny method")]
+public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerVersion = true)
Parameters
@@ -1271,10 +1273,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

ToObject<T>(Byte[], Boolean)

@@ -1283,7 +1285,8 @@

Declaration
-
public static T ToObject<T>(this byte[] bytes, bool includesSerializerVersion = true)
+    
[TargetedPatchingOptOut("Tiny method")]
+public static T ToObject<T>(this byte[] bytes, bool includesSerializerVersion = true)
     where T : class, IStreamSerializer, new()
Parameters
@@ -1344,19 +1347,20 @@
Type Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ValidateObject<T>(T)

+ +

ValidateDeserializedObject<T>(T)

Validate an object and throw an exception, if the validation failed

Declaration
-
public static T ValidateObject<T>(this T value)
+
[TargetedPatchingOptOut("Tiny method")]
+public static T ValidateDeserializedObject<T>(this T value)
Parameters
@@ -1404,6 +1408,22 @@
Type Parameters
+ + +
T

Object type

+
+
Exceptions
+ + + + + + + + + + + @@ -1416,10 +1436,10 @@
Type Parameters
diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html index 8588644..3a53ff4 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html @@ -120,10 +120,10 @@

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

SerializerOptionsBase(PropertyInfo, StreamSerializerAttribute)

@@ -162,10 +162,10 @@

Properties

| - Improve this Doc + Improve this Doc - View Source + View Source

Attribute

@@ -193,10 +193,10 @@
Property Value
TypeCondition
SerializerException

If the validation failed

| - Improve this Doc + Improve this Doc - View Source + View Source

Property

@@ -226,10 +226,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

GetMaxLen(Int32)

@@ -276,10 +276,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetMaxLen(Int64)

@@ -326,10 +326,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetMinLen(Int32)

@@ -376,10 +376,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

GetMinLen(Int64)

@@ -439,7 +439,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
- SerializerHelper.ValidateObject<T>(T) + SerializerHelper.ValidateDeserializedObject<T>(T)
@@ -449,10 +449,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index a63a9ef..701018f 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -115,10 +115,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

ArrayEmptyMethod

Array empty method

@@ -145,18 +145,18 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadAnyAsyncMethod

-

Read any method

+

ReadStructAsyncMethod

+

Read struct method

Declaration
-
public static readonly MethodInfo ReadAnyAsyncMethod
+
public static readonly MethodInfo ReadStructAsyncMethod
Field Value
@@ -175,18 +175,18 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadAnyMethod

-

Read any method

+

ReadStructMethod

+

Read struct method

Declaration
-
public static readonly MethodInfo ReadAnyMethod
+
public static readonly MethodInfo ReadStructMethod
Field Value
@@ -203,22 +203,25 @@
Field Value
+

Properties +

| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadAnyNullableAsyncMethod

-

Read any method

+ +

AnyObjectAttributeRequired

+
Declaration
-
public static readonly MethodInfo ReadAnyNullableAsyncMethod
+
public static bool AnyObjectAttributeRequired { get; set; }
-
Field Value
+
Property Value
@@ -228,87 +231,102 @@
Field Value
- +
System.Reflection.MethodInfoSystem.Boolean
+

Methods +

| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadAnyNullableMethod

-

Read any method

+ +

ConvertStructureEndianess(Type, Memory<Byte>, StreamSerializerAttribute)

+

Convert the endianess of structure fields

Declaration
-
public static readonly MethodInfo ReadAnyNullableMethod
+
public static void ConvertStructureEndianess(Type type, Memory<byte> data, StreamSerializerAttribute attr = null)
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoTypetype

Structure type

+
Memory<System.Byte>data

Data

+
StreamSerializerAttributeattr

Stream serializer attribute of the structure type

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadArrayAsyncMethod

-

Read array method

+ +

Enumerate<tObject, tEnumerator>(Stream, Nullable<Int32>)

+

Enumerate serialized objects

Declaration
-
public static readonly MethodInfo ReadArrayAsyncMethod
+
[TargetedPatchingOptOut("Just a method adapter")]
+public static IEnumerable<tObject> Enumerate<tObject, tEnumerator>(this Stream stream, int? version = null)
+    where tEnumerator : StreamEnumeratorBase<tObject>
-
Field Value
+
Parameters
+ - - + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
- - | - Improve this Doc - - - View Source - -

ReadArrayMethod

-

Read array method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadArrayMethod
-
-
Field Value
+
Returns
@@ -318,87 +336,81 @@
Field Value
- - + +
System.Reflection.MethodInfoIEnumerable<tObject>

Enumerable

+
- - | - Improve this Doc - - - View Source - -

ReadDictAsyncMethod

-

Read dictionary method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadDictAsyncMethod
-
-
Field Value
+
Type Parameters
- + - - + + + + + +
TypeName Description
System.Reflection.MethodInfotObject

Object type

+
tEnumerator

Enumeratortype

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadDictMethod

-

Read dictionary method

+ +

EnumerateAsync<tObject, tEnumerator>(Stream, Nullable<Int32>, CancellationToken)

+

Enumerate serialized objects

Declaration
-
public static readonly MethodInfo ReadDictMethod
+
public static async IAsyncEnumerable<tObject> EnumerateAsync<tObject, tEnumerator>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+    where tEnumerator : StreamAsyncEnumeratorBase<tObject>
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
CancellationTokencancellationToken

Cancellation token

+
- - | - Improve this Doc - - - View Source - -

ReadEnumAsyncMethod

-

Read enumeration method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadEnumAsyncMethod
-
-
Field Value
+
Returns
@@ -408,87 +420,81 @@
Field Value
- - + +
System.Reflection.MethodInfoIAsyncEnumerable<tObject>

Enumerable

+
- - | - Improve this Doc - - - View Source - -

ReadEnumMethod

-

Read enumeration method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadEnumMethod
-
-
Field Value
+
Type Parameters
- + - - + + + + + +
TypeName Description
System.Reflection.MethodInfotObject

Object type

+
tEnumerator

Enumeratortype

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadListAsyncMethod

-

Read list method

+ +

EnumerateNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Enumerate numbers

Declaration
-
public static readonly MethodInfo ReadListAsyncMethod
+
public static IEnumerable<T> EnumerateNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+    where T : struct, IConvertible
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
- - | - Improve this Doc - - - View Source - -

ReadListMethod

-

Read list method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadListMethod
-
-
Field Value
+
Returns
@@ -498,117 +504,82 @@
Field Value
- - + +
System.Reflection.MethodInfoIEnumerable<T>

Enumerable

+
- - | - Improve this Doc - - - View Source - -

ReadNumberAsyncMethod

-

Read number method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadNumberAsyncMethod
-
-
Field Value
+
Type Parameters
- + - - + +
TypeName Description
System.Reflection.MethodInfoT

Object type

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadNumberIntAsyncMethod

-

Read number method

+ +

EnumerateNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+

Enumerate numbers

Declaration
-
public static readonly MethodInfo ReadNumberIntAsyncMethod
+
public static async IAsyncEnumerable<T> EnumerateNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+    where T : struct, IConvertible
-
Field Value
+
Parameters
+ - - + + + - -
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
- - | - Improve this Doc - - - View Source - -

ReadNumberIntMethod

-

Read number method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadNumberIntMethod
-
-
Field Value
- - - - + + + - - - - + + + + + + + +
TypeDescriptionSystem.Nullable<System.Int32>version

Version

+
System.Reflection.MethodInfoSystem.Buffers.ArrayPool<System.Byte>pool

Array pool

+
CancellationTokencancellationToken

Cancellation token

+
- - | - Improve this Doc - - - View Source - -

ReadNumberMethod

-

Read number method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadNumberMethod
-
-
Field Value
+
Returns
@@ -618,87 +589,71 @@
Field Value
- - + +
System.Reflection.MethodInfoIAsyncEnumerable<T>

Enumerable

+
- - | - Improve this Doc - - - View Source - -

ReadObjectAsyncMethod

-

Read object method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadObjectAsyncMethod
-
-
Field Value
+
Type Parameters
- + - - + +
TypeName Description
System.Reflection.MethodInfoT

Object type

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadObjectMethod

-

Read object method

+ +

EnumerateSerialized<T>(Stream, Nullable<Int32>)

+

Enumerate serialized objects

Declaration
-
public static readonly MethodInfo ReadObjectMethod
+
[TargetedPatchingOptOut("Just a method adapter")]
+public static IEnumerable<T> EnumerateSerialized<T>(this Stream stream, int? version = null)
+    where T : class, IStreamSerializer
-
Field Value
+
Parameters
+ - - + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Version

+
- - | - Improve this Doc - - - View Source - -

ReadObjectNullableAsyncMethod

-

Read object method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadObjectNullableAsyncMethod
-
-
Field Value
+
Returns
@@ -708,87 +663,76 @@
Field Value
- - + +
System.Reflection.MethodInfoIEnumerable<T>

Enumerable

+
- - | - Improve this Doc - - - View Source - -

ReadObjectNullableMethod

-

Read object method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadObjectNullableMethod
-
-
Field Value
+
Type Parameters
- + - - + +
TypeName Description
System.Reflection.MethodInfoT

Object type

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadSerializedAsyncMethod

-

Read serialized method

+ +

EnumerateSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+

Enumerate serialized objects

Declaration
-
public static readonly MethodInfo ReadSerializedAsyncMethod
+
public static async IAsyncEnumerable<T> EnumerateSerializedAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+    where T : class, IStreamSerializer
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Version

+
CancellationTokencancellationToken

Cancellation token

+
- - | - Improve this Doc - - - View Source - -

ReadSerializedMethod

-

Read serialized method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadSerializedMethod
-
-
Field Value
+
Returns
@@ -798,87 +742,87 @@
Field Value
- - + +
System.Reflection.MethodInfoIAsyncEnumerable<T>

Enumerable

+
- - | - Improve this Doc - - - View Source - -

ReadStructAsyncMethod

-

Read struct method

-
-
-
Declaration
-
-
public static readonly MethodInfo ReadStructAsyncMethod
-
-
Field Value
+
Type Parameters
- + - - + +
TypeName Description
System.Reflection.MethodInfoT

Object type

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

ReadStructMethod

-

Read struct method

+ +

EnumerateString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

+

Enumerate strings

Declaration
-
public static readonly MethodInfo ReadStructMethod
+
public static IEnumerable<string> EnumerateString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum UTF-8 string bytes length

+
System.Int32maxLen

Maximum UTF-8 string bytes length

+
- - | - Improve this Doc - - - View Source - -

WriteAnyObjectAsyncMethod

-

Write any object method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteAnyObjectAsyncMethod
-
-
Field Value
+
Returns
@@ -888,87 +832,77 @@
Field Value
- - + +
System.Reflection.MethodInfoIEnumerable<System.String>

Enumerable

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteAnyObjectMethod

-

Write any object method

+ +

EnumerateStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Enumerate strings

Declaration
-
public static readonly MethodInfo WriteAnyObjectMethod
+
public static async IAsyncEnumerable<string> EnumerateStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
-
Field Value
+
Parameters
+ - - + + + - -
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
- - | - Improve this Doc - - - View Source - -

WriteArrayAsyncMethod

-

Write array method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteArrayAsyncMethod
-
-
Field Value
- - - - + + + - - - - + + + + + + + + + + + + + + + + + +
TypeDescriptionSystem.Nullable<System.Int32>version

Version

+
System.Reflection.MethodInfoSystem.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum UTF-8 string bytes length

+
System.Int32maxLen

Maximum UTF-8 string bytes length

+
CancellationTokencancellationToken

Cancellation token

+
- - | - Improve this Doc - - - View Source - -

WriteArrayMethod

-

Write array method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteArrayMethod
-
-
Field Value
+
Returns
@@ -978,57 +912,59 @@
Field Value
- - + +
System.Reflection.MethodInfoIAsyncEnumerable<System.String>

Enumerable

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteDictAsyncMethod

-

Write dictionary method

+ +

ReadAny(Stream, Nullable<Int32>, ISerializerOptions)

+

Read any object

Declaration
-
public static readonly MethodInfo WriteDictAsyncMethod
+
public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions options = null)
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
ISerializerOptionsoptions

Options

+
- - | - Improve this Doc - - - View Source - -

WriteDictMethod

-

Write dictionary method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteDictMethod
-
-
Field Value
+
Returns
@@ -1038,57 +974,65 @@
Field Value
- - + +
System.Reflection.MethodInfoSystem.Object

Object

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteEnumAsyncMethod

-

Write enumeration method

+ +

ReadAnyAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

+

Read any object

Declaration
-
public static readonly MethodInfo WriteEnumAsyncMethod
+
public static Task<object> ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
ISerializerOptionsoptions

Options

+
CancellationTokencancellationToken

Cancellation token

+
- - | - Improve this Doc - - - View Source - -

WriteEnumMethod

-

Write enumeration method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteEnumMethod
-
-
Field Value
+
Returns
@@ -1098,57 +1042,59 @@
Field Value
- - + +
System.Reflection.MethodInfoTask<System.Object>

Object

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteListAsyncMethod

-

Write list method

+ +

ReadAnyNullable(Stream, Nullable<Int32>, ISerializerOptions)

+

Read any object

Declaration
-
public static readonly MethodInfo WriteListAsyncMethod
+
public static object ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions options = null)
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
ISerializerOptionsoptions

Options

+
- - | - Improve this Doc - - - View Source - -

WriteListMethod

-

Write list method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteListMethod
-
-
Field Value
+
Returns
@@ -1158,57 +1104,65 @@
Field Value
- - + +
System.Reflection.MethodInfoSystem.Object

Object

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNumberAsyncMethod

-

Write number method

+ +

ReadAnyNullableAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

+

Read any object

Declaration
-
public static readonly MethodInfo WriteNumberAsyncMethod
+
public static Task<object> ReadAnyNullableAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
-
Field Value
+
Parameters
+ - - + + + + + + + + + + + + + + + + + +
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
ISerializerOptionsoptions

Options

+
CancellationTokencancellationToken

Cancellation token

+
- - | - Improve this Doc - - - View Source - -

WriteNumberMethod

-

Write number method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteNumberMethod
-
-
Field Value
+
Returns
@@ -1218,57 +1172,59 @@
Field Value
- - + +
System.Reflection.MethodInfoTask<System.Object>

Object

+
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteObjectAsyncMethod

-

Write object method

+ +

ReadAnyObject(Stream, Type, Nullable<Int32>)

+

Read any object

Declaration
-
public static readonly MethodInfo WriteObjectAsyncMethod
+
public static object ReadAnyObject(this Stream stream, Type type, int? version = null)
-
Field Value
+
Parameters
+ - - + + + - -
TypeName Description
System.Reflection.MethodInfoStreamstream

Stream

+
- - | - Improve this Doc - - - View Source - -

WriteObjectMethod

-

Write object method

-
-
-
Declaration
-
-
public static readonly MethodInfo WriteObjectMethod
-
-
Field Value
+ + Type + type +

Object type

+ + + + System.Nullable<System.Int32> + version +

Serializer version

+ + + + +
Returns
@@ -1278,61 +1234,100 @@
Field Value
- - + +
System.Reflection.MethodInfoSystem.Object

Object

+
-

Properties -

| - Improve this Doc + Improve this Doc - View Source + View Source - -

AnyObjectAttributeRequired

-

Require the StreamSerializerAttribute attribute when using ReadAnyObject<T>(Stream, Nullable<Int32>) etc.?

+ +

ReadAnyObject<T>(Stream, Nullable<Int32>)

+

Read any object

Declaration
-
public static bool AnyObjectAttributeRequired { get; set; }
+
public static T ReadAnyObject<T>(this Stream stream, int? version = null)
+    where T : class, new()
-
Property Value
+
Parameters
+ - - + + + + + + + + + + +
TypeName Description
System.BooleanStreamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
T

Object

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Object type

+
-

Methods -

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ConvertStructureEndianess(Type, Memory<Byte>, StreamSerializerAttribute)

-

Convert the endianess of structure fields

+ +

ReadAnyObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

+

Read any object

Declaration
-
public static void ConvertStructureEndianess(Type type, Memory<byte> data, StreamSerializerAttribute attr = null)
+
public static Task<object> ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
Parameters
@@ -1344,43 +1339,64 @@
Parameters
+ + + + + - - - - + + - - - + + + + +
Streamstream

Stream

+
Type type

Structure type

+

Object type

Memory<System.Byte>data

Data

+
System.Nullable<System.Int32>version

Serializer version

StreamSerializerAttributeattr

Stream serializer attribute of the structure type

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + +
TypeDescription
Task<System.Object>

Object

| - Improve this Doc + Improve this Doc - View Source + View Source - -

Enumerate<tObject, tEnumerator>(Stream, Nullable<Int32>)

-

Enumerate serialized objects

+ +

ReadAnyObjectAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+

Read any object

Declaration
-
[TargetedPatchingOptOut("Just a method adapter")]
-public static IEnumerable<tObject> Enumerate<tObject, tEnumerator>(this Stream stream, int? version = null)
-    where tEnumerator : StreamEnumeratorBase<tObject>
+
public static Task<T> ReadAnyObjectAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+    where T : class, new()
Parameters
@@ -1402,6 +1418,12 @@
Parameters
+ + + + + @@ -1416,8 +1438,8 @@
Returns
- - + @@ -1432,33 +1454,92 @@
Type Parameters
- + + + + +
System.Nullable<System.Int32> version

Serializer version

+
CancellationTokencancellationToken

Cancellation token

IEnumerable<tObject>

Enumerable

+
Task<T>

Object

tObjectT

Object type

+
+ + | + Improve this Doc + + + View Source + + +

ReadAnyObjectNullable(Stream, Type, Nullable<Int32>)

+

Read any object

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static object ReadAnyObjectNullable(this Stream stream, Type type, int? version = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + - - + + + + +
TypeNameDescription
Streamstream

Stream

+
Typetype

Object type

tEnumerator

Enumeratortype

+
System.Nullable<System.Int32>version

Serializer version

+
+
Returns
+ + + + + + + + + + +
TypeDescription
System.Object

Object

| - Improve this Doc + Improve this Doc - View Source + View Source - -

EnumerateAsync<tObject, tEnumerator>(Stream, Nullable<Int32>, CancellationToken)

-

Enumerate serialized objects

+ +

ReadAnyObjectNullable<T>(Stream, Nullable<Int32>)

+

Read any object

Declaration
-
public static async IAsyncEnumerable<tObject> EnumerateAsync<tObject, tEnumerator>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where tEnumerator : StreamAsyncEnumeratorBase<tObject>
+
[TargetedPatchingOptOut("Tiny method")]
+public static T ReadAnyObjectNullable<T>(this Stream stream, int? version = null)
+    where T : class, new()
Parameters
@@ -1482,67 +1563,1559 @@
Parameters
+ +

Serializer version

+
Returns
+ + + + + + + + - - - +
TypeDescription
CancellationTokencancellationToken

Cancellation token

+
T

Object

-
Returns
+
Type Parameters
- + - - + + + +
TypeName Description
IAsyncEnumerable<tObject>

Enumerable

+
T

Object type

+
+ + | + Improve this Doc + + + View Source + + +

ReadAnyObjectNullableAsync(Stream, Type, Nullable<Int32>, CancellationToken)

+

Read any object

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<object> ReadAnyObjectNullableAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
Typetype

Object type

+
System.Nullable<System.Int32>version

Serializer version

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<System.Object>

Object

+
+ + | + Improve this Doc + + + View Source + + +

ReadAnyObjectNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+

Read any object

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<T> ReadAnyObjectNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+    where T : class, new()
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<T>

Object

+
+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T

Object type

+
+ + | + Improve this Doc + + + View Source + + +

ReadArray(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+

Read

+
+
+
Declaration
+
+
public static Array ReadArray(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
Typetype

Array type

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Array

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadArray<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+

Read

+
+
+
Declaration
+
+
public static T[] ReadArray<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
T[]

Value

+
+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T

Element type

+
+ + | + Improve this Doc + + + View Source + + +

ReadArrayAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+

Read

+
+
+
Declaration
+
+
public static Task<Array> ReadArrayAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
Typetype

Array type

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<Array>

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadArrayAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+

Read

+
+
+
Declaration
+
+
public static Task<T[]> ReadArrayAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<T[]>

Value

+
+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T

Element type

+
+ + | + Improve this Doc + + + View Source + + +

ReadArrayNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static Array? ReadArrayNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
Typetype

Array type

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
System.Nullable<Array>

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadArrayNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static T[] ReadArrayNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
T[]

Value

+
+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T

Element type

+
+ + | + Improve this Doc + + + View Source + + +

ReadArrayNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<Array?> ReadArrayNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
Typetype

Array type

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<System.Nullable<Array>>

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadArrayNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<T[]> ReadArrayNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<T[]>

Value

+
+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T

Element type

+
+ + | + Improve this Doc + + + View Source + + +

ReadBool(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static bool ReadBool(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
System.Boolean

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadBoolAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<bool> ReadBoolAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<System.Boolean>

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadBoolNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
System.Nullable<System.Boolean>

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadBoolNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<bool?> ReadBoolNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<System.Nullable<System.Boolean>>

Value

+
+ + | + Improve this Doc + + + View Source + + +

ReadBytes(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

+

Read

+
+
+
Declaration
+
+
public static (byte[] Value, int Length) ReadBytes(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Byte[]buffer

Result buffer to use

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

+
System.Int32minLen

Minimum length in bytes

+
System.Int32maxLen

Maximum length in bytes

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
System.ValueTuple<System.Byte[], System.Int32>

Value and length

+
+ + | + Improve this Doc + + + View Source + + +

ReadBytesAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read

+
+
+
Declaration
+
+
public static async Task<(byte[] Value, int Length)> ReadBytesAsync(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Byte[]buffer

Result buffer to use

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

+
System.Int32minLen

Minimum length in bytes

+
System.Int32maxLen

Maximum length in bytes

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task<System.ValueTuple<System.Byte[], System.Int32>>

Value and length

+
+ + | + Improve this Doc + + + View Source + + +

ReadBytesNullable(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static (byte[] Value, int Length)? ReadBytesNullable(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Byte[]buffer

Result buffer to use

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

+
System.Int32minLen

Minimum length in bytes

+
System.Int32maxLen

Maximum length in bytes

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
System.Nullable<System.ValueTuple<System.Byte[], System.Int32>>

Value and length

+
+ + | + Improve this Doc + + + View Source + + +

ReadBytesNullableAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<(byte[] Value, int Length)?> ReadBytesNullableAsync(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Nullable<System.Int32>version

Serializer version

+
System.Byte[]buffer

Result buffer to use

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

+
System.Int32minLen

Minimum length in bytes

+
System.Int32maxLen

Maximum length in bytes

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - - - - - +
NameType Description
tObject

Object type

-
tEnumerator

Enumeratortype

+
Task<System.Nullable<System.ValueTuple<System.Byte[], System.Int32>>>

Value and length

| - Improve this Doc + Improve this Doc - View Source + View Source - -

EnumerateNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

-

Enumerate numbers

+ +

ReadDecimal(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Read

Declaration
-
public static IEnumerable<T> EnumerateNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
-    where T : struct, IConvertible
+
[TargetedPatchingOptOut("Tiny method")]
+public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -1563,7 +3136,7 @@
Parameters
- @@ -1584,44 +3157,28 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Version

+

Serializer version

IEnumerable<T>

Enumerable

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Object type

+
System.Decimal

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

EnumerateNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

-

Enumerate numbers

+ +

ReadDecimalAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+

Read

Declaration
-
public static async IAsyncEnumerable<T> EnumerateNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
-    where T : struct, IConvertible
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<decimal> ReadDecimalAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -1642,7 +3199,7 @@
Parameters
- @@ -1669,45 +3226,28 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Version

+

Serializer version

IAsyncEnumerable<T>

Enumerable

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Object type

+
Task<System.Decimal>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

EnumerateSerialized<T>(Stream, Nullable<Int32>)

-

Enumerate serialized objects

+ +

ReadDecimalNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Read

Declaration
-
[TargetedPatchingOptOut("Just a method adapter")]
-public static IEnumerable<T> EnumerateSerialized<T>(this Stream stream, int? version = null)
-    where T : class, IStreamSerializer
+
[TargetedPatchingOptOut("Tiny method")]
+public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -1728,59 +3268,49 @@
Parameters
- - -
System.Nullable<System.Int32> version

Version

+

Serializer version

-
Returns
- - - - - - - - - - + +
TypeDescription
IEnumerable<T>

Enumerable

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Object type

+
System.Nullable<System.Decimal>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

EnumerateSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

-

Enumerate serialized objects

+ +

ReadDecimalNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+

Read

Declaration
-
public static async IAsyncEnumerable<T> EnumerateSerializedAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where T : class, IStreamSerializer
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<decimal?> ReadDecimalNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -1801,7 +3331,13 @@
Parameters
- + + + + + @@ -1822,43 +3358,27 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Version

+

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

IAsyncEnumerable<T>

Enumerable

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Object type

+
Task<System.Nullable<System.Decimal>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

EnumerateString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

-

Enumerate strings

+ +

ReadDict(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

+

Read

Declaration
-
public static IEnumerable<string> EnumerateString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+
public static IDictionary ReadDict(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
Parameters
@@ -1874,12 +3394,18 @@
Parameters
+ + + + + - @@ -1891,13 +3417,25 @@
Parameters
- - + + + + + + + + + + @@ -1912,27 +3450,27 @@
Returns
- - +
Stream stream

Stream

+
Typetype

Dictionary type

System.Nullable<System.Int32> version

Version

+

Serializer version

System.Int32 minLen

Minimum UTF-8 string bytes length

+

Minimum length

System.Int32 maxLen

Maximum UTF-8 string bytes length

+

Maximum length

+
ISerializerOptionskeyOptions

Key serializer options

+
ISerializerOptionsvalueOptions

Value serializer options

IEnumerable<System.String>

Enumerable

+
System.Collections.IDictionary

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

EnumerateStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

-

Enumerate strings

+ +

ReadDict<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

+

Read

Declaration
-
public static async IAsyncEnumerable<string> EnumerateStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+
public static Dictionary<tKey, tValue> ReadDict<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
Parameters
@@ -1953,7 +3491,7 @@
Parameters
- @@ -1965,116 +3503,81 @@
Parameters
- - - - - + + - -
System.Nullable<System.Int32> version

Version

+

Serializer version

System.Int32 minLen

Minimum UTF-8 string bytes length

+

Minimum length

System.Int32 maxLen

Maximum UTF-8 string bytes length

+

Maximum length

CancellationTokencancellationToken

Cancellation token

+
ISerializerOptionskeyOptions

Key serializer options

-
Returns
- - - - - - - - - - + +
TypeDescription
IAsyncEnumerable<System.String>

Enumerable

+
ISerializerOptionsvalueOptions

Value serializer options

- - | - Improve this Doc - - - View Source - - -

ReadAny(Stream, Nullable<Int32>, ISerializerOptions)

-

Read any object

-
-
-
Declaration
-
-
public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions options = null)
-
-
Parameters
+
Returns
- - - - - - - - - - - - - - +
TypeName Description
Streamstream

Stream

-
System.Nullable<System.Int32>version

Serializer version

-
ISerializerOptionsoptions

Options

+
Dictionary<tKey, tValue>

Value

-
Returns
+
Type Parameters
- + - - + + + + +
TypeName Description
System.Object

Object

+
tKey

Key type

+
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadAnyAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

-

Read any object

+ +

ReadDictAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

+

Read

Declaration
-
public static async Task<object> ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
+
public static Task<IDictionary> ReadDictAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -2090,18 +3593,48 @@
Parameters
+ + + + + + + + + + + + + + + + + + + + - - + + + + + + @@ -2122,27 +3655,27 @@
Returns
- - +
Stream stream

Stream

+
Typetype

Dictionary type

System.Nullable<System.Int32> version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

ISerializerOptionsoptions

Options

+
keyOptions

Key serializer options

+
ISerializerOptionsvalueOptions

Value serializer options

Task<System.Object>

Object

+
Task<System.Collections.IDictionary>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadAnyNullable(Stream, Nullable<Int32>, ISerializerOptions)

-

Read any object

+ +

ReadDictAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

+

Read

Declaration
-
public static object ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions options = null)
+
public static Task<Dictionary<tKey, tValue>> ReadDictAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -2164,12 +3697,42 @@
Parameters
+ + + + + + + + + + + + + + + - - + + + + + + + + + + + @@ -2184,27 +3747,49 @@
Returns
- - + + + +
System.Nullable<System.Int32> version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

ISerializerOptionsoptions

Options

+
keyOptions

Key serializer options

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

System.Object

Object

+
Task<Dictionary<tKey, tValue>>

Value

+
+
Type Parameters
+ + + + + + + + + + + + + + +
NameDescription
tKey

Key type

+
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadAnyNullableAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

-

Read any object

+ +

ReadDictNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

+

Read

Declaration
-
public static async Task<object> ReadAnyNullableAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static IDictionary ReadDictNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
Parameters
@@ -2220,24 +3805,48 @@
Parameters
+ + + + + + + + + + + + + + + + + + + + - - + - - - + + @@ -2252,28 +3861,28 @@
Returns
- - +
Stream stream

Stream

+
Typetype

Dictionary type

System.Nullable<System.Int32> version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

ISerializerOptionsoptions

Options

+
keyOptions

Key serializer options

CancellationTokencancellationToken

Cancellation token

+
ISerializerOptionsvalueOptions

Value serializer options

Task<System.Object>

Object

+
System.Collections.IDictionary

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadAnyObject<T>(Stream, Nullable<Int32>)

-

Read any object

+ +

ReadDictNullable<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

+

Read

Declaration
-
public static T ReadAnyObject<T>(this Stream stream, int? version = null)
-    where T : class, new()
+
[TargetedPatchingOptOut("Tiny method")]
+public static Dictionary<tKey, tValue>? ReadDictNullable<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
Parameters
@@ -2295,6 +3904,36 @@
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + @@ -2309,8 +3948,8 @@
Returns
- - + @@ -2325,28 +3964,33 @@
Type Parameters
- - + + + + +
System.Nullable<System.Int32> version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionskeyOptions

Key serializer options

+
ISerializerOptionsvalueOptions

Value serializer options

T

Object

+
System.Nullable<Dictionary<tKey, tValue>>

Value

T

Object type

+
tKey

Key type

+
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadAnyObjectAsync<T>(Stream, Nullable<Int32>, CancellationToken)

-

Read any object

+ +

ReadDictNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

+

Read

Declaration
-
public static async Task<T> ReadAnyObjectAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where T : class, new()
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<IDictionary> ReadDictNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -2359,15 +4003,51 @@
Parameters
- - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + @@ -2388,45 +4068,28 @@
Returns
- - - - -
Streamstream

Stream

+
Streamstream

Stream

+
Typetype

Dictionary type

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionskeyOptions

Key serializer options

System.Nullable<System.Int32>version

Serializer version

+
ISerializerOptionsvalueOptions

Value serializer options

Task<T>

Object

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Object type

+
Task<System.Collections.IDictionary>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadAnyObjectNullable<T>(Stream, Nullable<Int32>)

-

Read any object

+ +

ReadDictNullableAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T ReadAnyObjectNullable<T>(this Stream stream, int? version = null)
-    where T : class, new()
+public static async Task<Dictionary<tKey, tValue>?> ReadDictNullableAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -2448,6 +4111,42 @@
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2462,8 +4161,8 @@
Returns
- - + @@ -2478,29 +4177,33 @@
Type Parameters
- - + + + + +
System.Nullable<System.Int32> version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionskeyOptions

Key serializer options

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

T

Object

+
Task<System.Nullable<Dictionary<tKey, tValue>>>

Value

T

Object type

+
tKey

Key type

+
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadAnyObjectNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

-

Read any object

+ +

ReadDouble(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T> ReadAnyObjectNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where T : class, new()
+public static double ReadDouble(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -2525,9 +4228,9 @@
Parameters
- - - + + @@ -2542,43 +4245,28 @@
Returns
- - - - -
CancellationTokencancellationToken

Cancellation token

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

Task<T>

Object

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Object type

+
System.Double

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadArray<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+ +

ReadDoubleAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static T[] ReadArray<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<double> ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -2609,21 +4297,9 @@
Parameters
- - - - - - - - - - - - - + + @@ -2638,43 +4314,28 @@
Returns
- + - - -
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

T[]Task<System.Double>

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadArrayAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+ +

ReadDoubleNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
-
public static async Task<T[]> ReadArrayAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -2702,30 +4363,6 @@
Parameters
- - - - - - - - - - - - - - - - - - - - @@ -2740,44 +4377,28 @@
Returns
- + - - -
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionsvalueOptions

Value serializer options

-
CancellationTokencancellationToken

Cancellation token

Task<T[]>System.Nullable<System.Double>

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadArrayNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+ +

ReadDoubleNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T[] ReadArrayNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+public static Task<double?> ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -2808,73 +4429,113 @@
Parameters
- - - + + + +
System.Int32minLen

Minimum length

+
CancellationTokencancellationToken

Cancellation token

+
Returns
+ + - - - + + + + - - - +
System.Int32maxLen

Maximum length

-
TypeDescription
ISerializerOptionsvalueOptions

Value serializer options

+
Task<System.Nullable<System.Double>>

Value

-
Returns
+ + | + Improve this Doc + + + View Source + + +

ReadEnum(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

+

Read

+
+
+
Declaration
+
+
public static Enum ReadEnum(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
+
+
Parameters
+ - - + + + + + + + + + + + + + + + + +
TypeName Description
T[]

Value

+
Streamstream

Stream

+
Typetype

Enumeration type

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Element type

+
Enum

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadArrayNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+ +

ReadEnum<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T[]> ReadArrayNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
public static T ReadEnum<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+    where T : struct, Enum
Parameters
@@ -2902,30 +4563,6 @@
Parameters
- - - - - - - - - - - - - - - - - - - - @@ -2940,7 +4577,7 @@
Returns
- + @@ -2957,27 +4594,26 @@
Type Parameters
-
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionsvalueOptions

Value serializer options

-
CancellationTokencancellationToken

Cancellation token

Task<T[]>T

Value

T

Element type

+

Enumeration type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBool(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadEnumAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static bool ReadBool(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+
public static Task<Enum> ReadEnumAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -2993,6 +4629,12 @@
Parameters
+ + + + + @@ -3005,6 +4647,12 @@
Parameters
+ + + + + @@ -3019,7 +4667,7 @@
Returns
- + @@ -3027,20 +4675,20 @@
Returns
Stream stream

Stream

+
Typetype

Enumeration type

System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
CancellationTokencancellationToken

Cancellation token

System.BooleanTask<Enum>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBoolAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadEnumAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<bool> ReadBoolAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
public static async Task<T> ReadEnumAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+    where T : struct, Enum
Parameters
@@ -3088,28 +4736,44 @@
Returns
- + + + +
Task<System.Boolean>Task<T>

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Enumeration type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBoolNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadEnumNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static Enum? ReadEnumNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -3125,6 +4789,12 @@
Parameters
+ + + + + @@ -3151,7 +4821,7 @@
Returns
- + @@ -3159,20 +4829,21 @@
Returns
Stream stream

Stream

+
Typetype

Enumeration type

System.Nullable<System.Boolean>System.Nullable<Enum>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBoolNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadEnumNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<bool?> ReadBoolNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static T? ReadEnumNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null) + where T : struct, Enum
Parameters
@@ -3200,12 +4871,6 @@
Parameters
- - - - - @@ -3220,27 +4885,44 @@
Returns
- + + + +
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
CancellationTokencancellationToken

Cancellation token

Task<System.Nullable<System.Boolean>>System.Nullable<T>

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Enumeration type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBytes(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

+ +

ReadEnumNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static (byte[] Value, int Length) ReadBytes(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<Enum?> ReadEnumNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -3259,33 +4941,27 @@
Parameters
- - - + + - - - + + - - - - - - - - - + + @@ -3300,27 +4976,29 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

+
Typetype

Enumeration type

System.Byte[]buffer

Result buffer to use

+
System.Nullable<System.Int32>version

Serializer version

System.Buffers.ArrayPool<System.Byte> pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

-
System.Int32minLen

Minimum length in bytes

+

Array pool

System.Int32maxLen

Maximum length in bytes

+
CancellationTokencancellationToken

Cancellation token

System.ValueTuple<System.Byte[], System.Int32>

Value and length

+
Task<System.Nullable<Enum>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBytesAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

+ +

ReadEnumNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static async Task<(byte[] Value, int Length)> ReadBytesAsync(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<T?> ReadEnumNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+    where T : struct, Enum
Parameters
@@ -3342,30 +5020,12 @@
Parameters
- - - - - - - - - - - - - - - - @@ -3386,28 +5046,43 @@
Returns
- - + + + +
System.Nullable<System.Int32> version

Serializer version

-
System.Byte[]buffer

Result buffer to use

System.Buffers.ArrayPool<System.Byte> pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

-
System.Int32minLen

Minimum length in bytes

-
System.Int32maxLen

Maximum length in bytes

+

Array pool

Task<System.ValueTuple<System.Byte[], System.Int32>>

Value and length

+
Task<System.Nullable<T>>

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Enumeration type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBytesNullable(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

+ +

ReadFixedArray<T>(Stream, T[], Nullable<Int32>, ISerializerOptions)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static (byte[] Value, int Length)? ReadBytesNullable(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+
public static T[] ReadFixedArray<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null)
Parameters
@@ -3426,33 +5101,21 @@
Parameters
- - - - - - - - - - - - - + + - - - + + - - - + + @@ -3467,28 +5130,43 @@
Returns
- - + + + +
System.Nullable<System.Int32>version

Serializer version

-
System.Byte[]buffer

Result buffer to use

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

+
T[]arr

Array

System.Int32minLen

Minimum length in bytes

+
System.Nullable<System.Int32>version

Serializer version

System.Int32maxLen

Maximum length in bytes

+
ISerializerOptionsvalueOptions

Value serializer options

System.Nullable<System.ValueTuple<System.Byte[], System.Int32>>

Value and length

+
T[]

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadBytesNullableAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

+ +

ReadFixedArrayAsync<T>(Stream, T[], Nullable<Int32>, ISerializerOptions, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<(byte[] Value, int Length)?> ReadBytesNullableAsync(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+
public static Task<T[]> ReadFixedArrayAsync<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -3507,33 +5185,21 @@
Parameters
- - - - - - - - - - - - - + + - - - + + - - - + + @@ -3554,28 +5220,44 @@
Returns
- - + + + +
System.Nullable<System.Int32>version

Serializer version

-
System.Byte[]buffer

Result buffer to use

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

+
T[]arr

Array

System.Int32minLen

Minimum length in bytes

+
System.Nullable<System.Int32>version

Serializer version

System.Int32maxLen

Maximum length in bytes

+
ISerializerOptionsvalueOptions

Value serializer options

Task<System.Nullable<System.ValueTuple<System.Byte[], System.Int32>>>

Value and length

+
Task<T[]>

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDecimal(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadFloat(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static float ReadFloat(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -3617,7 +5299,7 @@
Returns
- + @@ -3625,20 +5307,20 @@
Returns
System.DecimalSystem.Single

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDecimalAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadFloatAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<decimal> ReadDecimalAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<float> ReadFloatAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -3686,7 +5368,7 @@
Returns
- + @@ -3694,20 +5376,20 @@
Returns
Task<System.Decimal>Task<System.Single>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDecimalNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadFloatNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -3749,7 +5431,7 @@
Returns
- + @@ -3757,20 +5439,20 @@
Returns
System.Nullable<System.Decimal>System.Nullable<System.Single>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDecimalNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadFloatNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<decimal?> ReadDecimalNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<float?> ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -3818,7 +5500,7 @@
Returns
- + @@ -3826,19 +5508,20 @@
Returns
Task<System.Nullable<System.Decimal>>Task<System.Nullable<System.Single>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDict<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

+ +

ReadInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
-
public static Dictionary<tKey, tValue> ReadDict<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static int ReadInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -3866,30 +5549,6 @@
Parameters
- - - - - - - - - - - - - - - - - - - - @@ -3904,48 +5563,28 @@
Returns
- + - - -
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionskeyOptions

Key serializer options

-
ISerializerOptionsvalueOptions

Value serializer options

Dictionary<tKey, tValue>System.Int32

Value

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tKey

Key type

-
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDictAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

+ +

ReadIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static async Task<Dictionary<tKey, tValue>> ReadDictAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<int> ReadIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -3973,30 +5612,6 @@
Parameters
- - - - - - - - - - - - - - - - - - - - @@ -4017,49 +5632,28 @@
Returns
- + - - -
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionskeyOptions

Key serializer options

-
ISerializerOptionsvalueOptions

Value serializer options

Task<Dictionary<tKey, tValue>>Task<System.Int32>

Value

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tKey

Key type

-
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDictNullable<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

+ +

ReadIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static Dictionary<tKey, tValue>? ReadDictNullable<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
+public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -4086,31 +5680,7 @@
Parameters
- - - - - - - - - - - - - - - - - - - - - @@ -4125,49 +5695,28 @@
Returns
- + - - -
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionskeyOptions

Key serializer options

-
ISerializerOptionsvalueOptions

Value serializer options

+

Array pool

System.Nullable<Dictionary<tKey, tValue>>System.Nullable<System.Int32>

Value

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tKey

Key type

-
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDictNullableAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

+ +

ReadIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<Dictionary<tKey, tValue>?> ReadDictNullableAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+public static Task<int?> ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -4195,30 +5744,6 @@
Parameters
- - - - - - - - - - - - - - - - - - - - @@ -4239,49 +5764,27 @@
Returns
- + - - -
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionskeyOptions

Key serializer options

-
ISerializerOptionsvalueOptions

Value serializer options

Task<System.Nullable<Dictionary<tKey, tValue>>>Task<System.Nullable<System.Int32>>

Value

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tKey

Key type

-
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDouble(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadList(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static double ReadDouble(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+
public static IList ReadList(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
Parameters
@@ -4297,6 +5800,12 @@
Parameters
+ + + + + @@ -4309,6 +5818,24 @@
Parameters
+ + + + + + + + + + + + + + + @@ -4323,7 +5850,7 @@
Returns
- + @@ -4331,20 +5858,19 @@
Returns
Stream stream

Stream

+
Typetype

List type

System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

System.DoubleSystem.Collections.IList

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDoubleAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadList<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<double> ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
public static List<T> ReadList<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
Parameters
@@ -4375,9 +5901,21 @@
Parameters
- - - + + + + + + + + + + + + @@ -4392,28 +5930,43 @@
Returns
- + + + +
CancellationTokencancellationToken

Cancellation token

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

Task<System.Double>List<T>

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDoubleNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadListAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+
public static Task<IList> ReadListAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -4429,6 +5982,12 @@
Parameters
+ + + + + @@ -4441,6 +6000,30 @@
Parameters
+ + + + + + + + + + + + + + + + + + + + @@ -4455,7 +6038,7 @@
Returns
- + @@ -4463,20 +6046,19 @@
Returns
Stream stream

Stream

+
Typetype

List type

System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

System.Nullable<System.Double>Task<System.Collections.IList>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadDoubleNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadListAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<double?> ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
public static Task<List<T>> ReadListAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -4504,6 +6086,24 @@
Parameters
+ + + + + + + + + + + + + + + @@ -4524,28 +6124,44 @@
Returns
- + + + +
System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

Task<System.Nullable<System.Double>>Task<List<T>>

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadEnum<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadListNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

Read

Declaration
-
public static T ReadEnum<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
-    where T : struct, Enum
+
[TargetedPatchingOptOut("Tiny method")]
+public static IList ReadListNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
Parameters
@@ -4561,6 +6177,12 @@
Parameters
+ + + + + @@ -4575,56 +6197,58 @@
Parameters
- -
Stream stream

Stream

+
Typetype

List type

Array pool

-
Returns
- - - - + + + - - - - + + + + + + +
TypeDescriptionSystem.Int32minLen

Minimum length

+
T

Value

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Enumeration type

+
System.Collections.IList

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadEnumAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadListNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

Read

Declaration
-
public static Task<T> ReadEnumAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
-    where T : struct, Enum
+
[TargetedPatchingOptOut("Tiny method")]
+public static List<T>? ReadListNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
Parameters
@@ -4655,9 +6279,21 @@
Parameters
- - - + + + + + + + + + + + + @@ -4672,7 +6308,7 @@
Returns
- + @@ -4689,28 +6325,27 @@
Type Parameters
-
CancellationTokencancellationToken

Cancellation token

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

Task<T>System.Nullable<List<T>>

Value

T

Enumeration type

+

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadEnumNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadListNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T? ReadEnumNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
-    where T : struct, Enum
+public static async Task<IList> ReadListNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -4726,6 +6361,12 @@
Parameters
+ + + + + @@ -4740,57 +6381,64 @@
Parameters
- -
Stream stream

Stream

+
Typetype

List type

Array pool

-
Returns
- - - - + + + - - - - + + + + + + + + + + + +
TypeDescriptionSystem.Int32minLen

Minimum length

+
System.Nullable<T>

Value

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Enumeration type

+
Task<System.Collections.IList>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadEnumNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadListNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T?> ReadEnumNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
-    where T : struct, Enum
+public static async Task<List<T>?> ReadListNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
Parameters
@@ -4818,6 +6466,24 @@
Parameters
+ + + + + + + + + + + + + + + @@ -4838,7 +6504,7 @@
Returns
- + @@ -4855,26 +6521,27 @@
Type Parameters
-
System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
System.Int32minLen

Minimum length

+
System.Int32maxLen

Maximum length

+
ISerializerOptionsvalueOptions

Value serializer options

Task<System.Nullable<T>>Task<System.Nullable<List<T>>>

Value

T

Enumeration type

+

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadFixedArray<T>(Stream, T[], Nullable<Int32>, ISerializerOptions)

+ +

ReadLong(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
-
public static T[] ReadFixedArray<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static long ReadLong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -4890,12 +6557,6 @@
Parameters
- - - - - @@ -4905,9 +6566,9 @@
Parameters
- - - + + @@ -4922,43 +6583,28 @@
Returns
- + - - -
Stream stream

Stream

-
T[]arr

Array

ISerializerOptionsvalueOptions

Value serializer options

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

T[]System.Int64

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadFixedArrayAsync<T>(Stream, T[], Nullable<Int32>, ISerializerOptions, CancellationToken)

+ +

ReadLongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static async Task<T[]> ReadFixedArrayAsync<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<long> ReadLongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -4974,12 +6620,6 @@
Parameters
- - - - - @@ -4989,9 +6629,9 @@
Parameters
- - - + + @@ -5012,44 +6652,28 @@
Returns
- + - - -
Stream stream

Stream

-
T[]arr

Array

ISerializerOptionsvalueOptions

Value serializer options

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

Task<T[]>Task<System.Int64>

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadFloat(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadLongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static float ReadFloat(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -5091,7 +6715,7 @@
Returns
- + @@ -5099,20 +6723,20 @@
Returns
System.SingleSystem.Nullable<System.Int64>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadFloatAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadLongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<float> ReadFloatAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<long?> ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -5160,7 +6784,7 @@
Returns
- + @@ -5168,20 +6792,19 @@
Returns
Task<System.Single>Task<System.Nullable<System.Int64>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadFloatNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadNumber(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+
public static object ReadNumber(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -5197,6 +6820,12 @@
Parameters
+ + + + + @@ -5223,7 +6852,7 @@
Returns
- + @@ -5231,20 +6860,20 @@
Returns
Stream stream

Stream

+
Typetype

Number type

System.Nullable<System.Single>System.Object

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadFloatNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<float?> ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
public static T ReadNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+    where T : struct, IConvertible
Parameters
@@ -5272,12 +6901,6 @@
Parameters
- - - - - @@ -5292,28 +6915,42 @@
Returns
- +
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
CancellationTokencancellationToken

Cancellation token

Task<System.Nullable<System.Single>>T

Value

+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadNumberAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static int ReadInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+
public static Task<object> ReadNumberAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -5329,6 +6966,12 @@
Parameters
+ + + + + @@ -5341,6 +6984,12 @@
Parameters
+ + + + + @@ -5355,7 +7004,7 @@
Returns
- + @@ -5363,20 +7012,20 @@
Returns
Stream stream

Stream

+
Typetype

Number type

System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
CancellationTokencancellationToken

Cancellation token

System.Int32Task<System.Object>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<int> ReadIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
public static async Task<T> ReadNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+    where T : struct, IConvertible
Parameters
@@ -5424,28 +7073,43 @@
Returns
- +
Task<System.Int32>Task<T>

Value

+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadNumberNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static object ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -5461,6 +7125,12 @@
Parameters
+ + + + + @@ -5487,7 +7157,7 @@
Returns
- + @@ -5495,20 +7165,21 @@
Returns
Stream stream

Stream

+
Typetype

Number type

System.Nullable<System.Int32>System.Object

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadNumberNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<int?> ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static T? ReadNumberNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null) + where T : struct, IConvertible
Parameters
@@ -5536,12 +7207,6 @@
Parameters
- - - - - @@ -5556,27 +7221,43 @@
Returns
- +
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
CancellationTokencancellationToken

Cancellation token

Task<System.Nullable<System.Int32>>System.Nullable<T>

Value

+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadList<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+ +

ReadNumberNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static List<T> ReadList<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<object> ReadNumberNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -5592,6 +7273,12 @@
Parameters
+ + + + + @@ -5607,21 +7294,9 @@
Parameters
- - - - - - - - - - - - - + + @@ -5636,43 +7311,29 @@
Returns
- + - - -
Stream stream

Stream

+
Typetype

Number type

System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionsvalueOptions

Value serializer options

+
CancellationTokencancellationToken

Cancellation token

List<T>Task<System.Object>

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadListAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+ +

ReadNumberNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static async Task<List<T>> ReadListAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<T?> ReadNumberNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+    where T : struct, IConvertible
Parameters
@@ -5700,24 +7361,6 @@
Parameters
- - - - - - - - - - - - - - - @@ -5738,7 +7381,7 @@
Returns
- + @@ -5755,27 +7398,27 @@
Type Parameters
-
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

-
ISerializerOptionsvalueOptions

Value serializer options

Task<List<T>>Task<System.Nullable<T>>

Value

T

Element type

+

Number type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadListNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

+ +

ReadObject(Stream, Type, Nullable<Int32>, ISerializerOptions)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static List<T>? ReadListNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
+public static object ReadObject(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
Parameters
@@ -5794,33 +7437,21 @@
Parameters
- - - - - - - - - - - - - + + - - - + + - - + @@ -5835,44 +7466,28 @@
Returns
- + - - -
System.Nullable<System.Int32>version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
System.Int32minLen

Minimum length

+
Typetype

Type

System.Int32maxLen

Maximum length

+
System.Nullable<System.Int32>version

Serializer version

ISerializerOptionsvalueOptions

Value serializer options

+
options

Options

System.Nullable<List<T>>System.Object

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadListNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

+ +

ReadObject<T>(Stream, Nullable<Int32>, ISerializerOptions)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<List<T>?> ReadListNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
+public static T ReadObject<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
Parameters
@@ -5894,36 +7509,12 @@
Parameters
- - - - - - - - - - - - - - - - - - - - - - + @@ -5938,7 +7529,7 @@
Returns
- + @@ -5955,27 +7546,27 @@
Type Parameters
-
System.Nullable<System.Int32> version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
System.Int32minLen

Minimum length

-
System.Int32maxLen

Maximum length

ISerializerOptionsvalueOptions

Value serializer options

-
CancellationTokencancellationToken

Cancellation token

+
options

Options

Task<System.Nullable<List<T>>>T

Value

T

Element type

+

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadLong(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadObjectAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static long ReadLong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static Task<object> ReadObjectAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
Parameters
@@ -5991,6 +7582,12 @@
Parameters
+ + + + + @@ -6000,9 +7597,15 @@
Parameters
- - - + + + + + + + @@ -6017,7 +7620,7 @@
Returns
- + @@ -6025,20 +7628,20 @@
Returns
Stream stream

Stream

+
Typetype

Type

System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
ISerializerOptionsoptions

Options

+
CancellationTokencancellationToken

Cancellation token

System.Int64Task<System.Object>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadLongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadObjectAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<long> ReadLongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<T> ReadObjectAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
Parameters
@@ -6063,9 +7666,9 @@
Parameters
- - - + + @@ -6086,28 +7689,44 @@
Returns
- + + + +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
ISerializerOptionsoptions

Options

Task<System.Int64>Task<T>

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadLongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadObjectNullable(Stream, Type, Nullable<Int32>, ISerializerOptions)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static object ReadObjectNullable(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
Parameters
@@ -6123,6 +7742,12 @@
Parameters
+ + + + + @@ -6132,9 +7757,9 @@
Parameters
- - - + + @@ -6149,7 +7774,7 @@
Returns
- + @@ -6157,20 +7782,20 @@
Returns
Stream stream

Stream

+
Typetype

Object type

System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
ISerializerOptionsoptions

Options

System.Nullable<System.Int64>System.Object

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadLongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadObjectNullable<T>(Stream, Nullable<Int32>, ISerializerOptions)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<long?> ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static T ReadObjectNullable<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
Parameters
@@ -6195,15 +7820,9 @@
Parameters
- - - - - - - - + + @@ -6218,28 +7837,44 @@
Returns
- + + + +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
CancellationTokencancellationToken

Cancellation token

+
ISerializerOptionsoptions

Options

Task<System.Nullable<System.Int64>>T

Value

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadObjectNullableAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

Read

Declaration
-
public static T ReadNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
-    where T : struct, IConvertible
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<object> ReadObjectNullableAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
Parameters
@@ -6255,6 +7890,12 @@
Parameters
+ + + + + @@ -6264,9 +7905,15 @@
Parameters
- - - + + + + + + + @@ -6281,43 +7928,28 @@
Returns
- +
Stream stream

Stream

+
Typetype

Object type

System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
ISerializerOptionsoptions

Options

+
CancellationTokencancellationToken

Cancellation token

TTask<System.Object>

Value

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadObjectNullableAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

Read

Declaration
-
public static Task<T> ReadNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
-    where T : struct, IConvertible
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task<T> ReadObjectNullableAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
Parameters
@@ -6342,9 +7974,9 @@
Parameters
- - - + + @@ -6382,27 +8014,27 @@
Type Parameters
- +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
ISerializerOptionsoptions

Options

T

Object type

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadNumberNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadOneByte(Stream, Nullable<Int32>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T? ReadNumberNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
-    where T : struct, IConvertible
+public static byte ReadOneByte(this Stream stream, int? version = null)
Parameters
@@ -6424,12 +8056,6 @@
Parameters
- - - - - @@ -6444,44 +8070,28 @@
Returns
- +
System.Nullable<System.Int32> version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

System.Nullable<T>System.Byte

Value

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadNumberNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadOneByteAsync(Stream, Nullable<Int32>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T?> ReadNumberNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
-    where T : struct, IConvertible
+public static Task<byte> ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
Parameters
@@ -6503,12 +8113,6 @@
Parameters
- - - - - @@ -6529,43 +8133,28 @@
Returns
- +
System.Nullable<System.Int32> version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

Task<System.Nullable<T>>Task<System.Byte>

Value

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadObject<T>(Stream, Nullable<Int32>, ISerializerOptions)

+ +

ReadOneByteNullable(Stream, Nullable<Int32>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T ReadObject<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
+public static ushort? ReadOneByteNullable(this Stream stream, int? version = null)
Parameters
@@ -6587,12 +8176,6 @@
Parameters
- - - - - @@ -6607,44 +8190,28 @@
Returns
- + - - -
System.Nullable<System.Int32> version

Serializer version

-
ISerializerOptionsoptions

Options

TSystem.Nullable<System.UInt16>

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadObjectAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

+ +

ReadOneByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T> ReadObjectAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
+public static Task<byte?> ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
Parameters
@@ -6666,12 +8233,6 @@
Parameters
- - - - - @@ -6692,44 +8253,28 @@
Returns
- + - - -
System.Nullable<System.Int32> version

Serializer version

-
ISerializerOptionsoptions

Options

Task<T>Task<System.Nullable<System.Byte>>

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadObjectNullable<T>(Stream, Nullable<Int32>, ISerializerOptions)

+ +

ReadOneSByte(Stream, Nullable<Int32>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T ReadObjectNullable<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
+public static sbyte ReadOneSByte(this Stream stream, int? version = null)
Parameters
@@ -6751,12 +8296,6 @@
Parameters
- - - - - @@ -6771,44 +8310,28 @@
Returns
- + - - -
System.Nullable<System.Int32> version

Serializer version

-
ISerializerOptionsoptions

Options

TSystem.SByte

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadObjectNullableAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

+ +

ReadOneSByteAsync(Stream, Nullable<Int32>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T> ReadObjectNullableAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
+public static Task<sbyte> ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
Parameters
@@ -6830,12 +8353,6 @@
Parameters
- - - - - @@ -6856,44 +8373,28 @@
Returns
- + - - -
System.Nullable<System.Int32> version

Serializer version

-
ISerializerOptionsoptions

Options

Task<T>Task<System.SByte>

Value

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneByte(Stream, Nullable<Int32>)

+ +

ReadOneSByteNullable(Stream, Nullable<Int32>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static byte ReadOneByte(this Stream stream, int? version = null)
+public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null)
Parameters
@@ -6929,7 +8430,7 @@
Returns
- + @@ -6937,20 +8438,20 @@
Returns
System.ByteSystem.Nullable<System.SByte>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneByteAsync(Stream, Nullable<Int32>, CancellationToken)

+ +

ReadOneSByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<byte> ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+public static Task<sbyte?> ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
Parameters
@@ -6992,7 +8493,7 @@
Returns
- + @@ -7000,20 +8501,20 @@
Returns
Task<System.Byte>Task<System.Nullable<System.SByte>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneByteNullable(Stream, Nullable<Int32>)

+ +

ReadSerialized<T>(Stream, Nullable<Int32>)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static ushort? ReadOneByteNullable(this Stream stream, int? version = null)
+
public static T ReadSerialized<T>(this Stream stream, int? version = null)
+    where T : class, IStreamSerializer
Parameters
@@ -7049,28 +8550,44 @@
Returns
- - + + + +
System.Nullable<System.UInt16>

Value

+
T

Object

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

+ +

ReadSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

Read

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<ushort?> ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+
public static Task<T> ReadSerializedAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+    where T : class, IStreamSerializer
Parameters
@@ -7112,28 +8629,43 @@
Returns
- - + + + +
Task<System.Nullable<System.UInt16>>

Value

+
Task<T>

Object

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneSByte(Stream, Nullable<Int32>)

-

Read

+ +

ReadSerializedData(Stream, Int32, ArrayPool<Byte>)

+

Read serialized data

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static sbyte ReadOneSByte(this Stream stream, int? version = null)
+
public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool<byte> pool = null)
Parameters
@@ -7152,9 +8684,15 @@
Parameters
- - - + + + + + + + @@ -7169,28 +8707,27 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

+
System.Int32len

Length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

System.SByte

Value

+
System.Byte[]

Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!)

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneSByteAsync(Stream, Nullable<Int32>, CancellationToken)

-

Read

+ +

ReadSerializedDataAsync(Stream, Int32, ArrayPool<Byte>, CancellationToken)

+

Read serialized data

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<sbyte> ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+
public static async Task<byte[]> ReadSerializedDataAsync(this Stream stream, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -7209,9 +8746,15 @@
Parameters
- - - + + + + + + + @@ -7232,28 +8775,29 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

+
System.Int32len

Length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

Task<System.SByte>

Value

+
Task<System.Byte[]>

Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!)

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneSByteNullable(Stream, Nullable<Int32>)

+ +

ReadSerializedNullable<T>(Stream, Nullable<Int32>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null)
+public static T ReadSerializedNullable<T>(this Stream stream, int? version = null) + where T : class, IStreamSerializer
Parameters
@@ -7289,28 +8833,45 @@
Returns
- - + + + +
System.Nullable<System.SByte>

Value

+
T

Object

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadOneSByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

+ +

ReadSerializedNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<sbyte?> ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+public static async Task<T> ReadSerializedNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null) + where T : class, IStreamSerializer
Parameters
@@ -7352,28 +8913,44 @@
Returns
- - + + + +
Task<System.Nullable<System.SByte>>

Value

+
Task<T>

Object

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerialized<T>(Stream, Nullable<Int32>)

+ +

ReadSerializedObject(Stream, Type, Nullable<Int32>)

Read

Declaration
-
public static T ReadSerialized<T>(this Stream stream, int? version = null)
-    where T : class, IStreamSerializer
+
[TargetedPatchingOptOut("Just a method adapter")]
+public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, int? version = null)
Parameters
@@ -7389,6 +8966,12 @@
Parameters
+ + + + + @@ -7403,50 +8986,34 @@
Returns
Stream stream

Stream

+
Typetype

Object type

- - - - - - - - - - -
TypeDescription
T

Object

-
-
Type Parameters
- - - - + - - +
NameType Description
T

Object type

+
IStreamSerializer

Object

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+ +

ReadSerializedObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

Read

Declaration
-
public static async Task<T> ReadSerializedAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where T : class, IStreamSerializer
+
[TargetedPatchingOptOut("Just a method adapter")]
+public static Task<IStreamSerializer> ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
Parameters
@@ -7462,6 +9029,12 @@
Parameters
+ + + + + @@ -7488,43 +9061,28 @@
Returns
- + - - -
Stream stream

Stream

+
Typetype

Type

Task<T>Task<IStreamSerializer>

Object

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedData(Stream, Int32, ArrayPool<Byte>)

-

Read serialized data

+ +

ReadSerializedStruct<T>(Stream, Nullable<Int32>)

+

Read

Declaration
-
public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool<byte> pool = null)
+
public static T ReadSerializedStruct<T>(this Stream stream, int? version = null)
+    where T : struct, IStreamSerializer
Parameters
@@ -7543,50 +9101,61 @@
Parameters
- - - + + + +
System.Int32len

Length in bytes

+
System.Nullable<System.Int32>version

Serializer version

+
Returns
+ + - - - + + + + + + +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
TypeDescription
T

Structure

-
Returns
+
Type Parameters
- + - - +
TypeName Description
System.Byte[]

Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!)

+
T

Structure type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedDataAsync(Stream, Int32, ArrayPool<Byte>, CancellationToken)

-

Read serialized data

+ +

ReadSerializedStructAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+

Read

Declaration
-
public static async Task<byte[]> ReadSerializedDataAsync(this Stream stream, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+
public static Task<T> ReadSerializedStructAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
+    where T : struct, IStreamSerializer
Parameters
@@ -7605,15 +9174,9 @@
Parameters
- - - - - - - - + + @@ -7634,29 +9197,45 @@
Returns
- - + + + +
System.Int32len

Length in bytes

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Nullable<System.Int32>version

Serializer version

Task<System.Byte[]>

Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!)

+
Task<T>

Structure

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Structure type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedNullable<T>(Stream, Nullable<Int32>)

+ +

ReadSerializedStructNullable<T>(Stream, Nullable<Int32>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T ReadSerializedNullable<T>(this Stream stream, int? version = null)
-    where T : class, IStreamSerializer
+public static T? ReadSerializedStructNullable<T>(this Stream stream, int? version = null) + where T : struct, IStreamSerializer
Parameters
@@ -7692,8 +9271,8 @@
Returns
- - + @@ -7709,28 +9288,28 @@
Type Parameters
-
T

Object

+
System.Nullable<T>

Structure

T

Object type

+

Structure type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+ +

ReadSerializedStructNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T> ReadSerializedNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where T : class, IStreamSerializer
+public static async Task<T?> ReadSerializedStructNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null) + where T : struct, IStreamSerializer
Parameters
@@ -7772,8 +9351,8 @@
Returns
- - + @@ -7789,27 +9368,27 @@
Type Parameters
-
Task<T>

Object

+
Task<System.Nullable<T>>

Structure

T

Object type

+

Structure type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedObject(Stream, Type, Nullable<Int32>)

-

Read

+ +

ReadSerializerVersion(Stream)

+

Read the serializer version

Declaration
-
[TargetedPatchingOptOut("Just a method adapter")]
-public static object ReadSerializedObject(this Stream stream, Type type, int? version = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static int ReadSerializerVersion(this Stream stream)
Parameters
@@ -7824,19 +9403,7 @@
Parameters
- - - - - - - - - - - @@ -7851,28 +9418,28 @@
Returns
- - +
Stream stream

Stream

-
Typetype

Object type

-
System.Nullable<System.Int32>version

Serializer version

+

Steam

System.Object

Object

+
System.Int32

Serializer version

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

-

Read

+ +

ReadSerializerVersionAsync(Stream, CancellationToken)

+

Read the serializer version

Declaration
-
[TargetedPatchingOptOut("Just a method adapter")]
-public static async Task<object> ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<int> ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
Parameters
@@ -7887,19 +9454,7 @@
Parameters
- - - - - - - - - - - @@ -7920,28 +9475,28 @@
Returns
- - +
Stream stream

Stream

-
Typetype

Type

-
System.Nullable<System.Int32>version

Serializer version

+

Steam

Task<System.Object>

Object

+
Task<System.Int32>

Serializer version

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedStruct<T>(Stream, Nullable<Int32>)

+ +

ReadShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
-
public static T ReadSerializedStruct<T>(this Stream stream, int? version = null)
-    where T : struct, IStreamSerializer
+
[TargetedPatchingOptOut("Tiny method")]
+public static short ReadShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -7965,56 +9520,46 @@
Parameters
- -

Serializer version

-
Returns
- - - - - - - - - - + +
TypeDescription
T

Structure

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Structure type

+
System.Int16

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedStructAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+ +

ReadShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
-
public static async Task<T> ReadSerializedStructAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where T : struct, IStreamSerializer
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<short> ReadShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -8036,6 +9581,12 @@
Parameters
+ + + + + @@ -8056,45 +9607,28 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

Task<T>

Structure

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Structure type

+
Task<System.Int16>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedStructNullable<T>(Stream, Nullable<Int32>)

+ +

ReadShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T? ReadSerializedStructNullable<T>(this Stream stream, int? version = null)
-    where T : struct, IStreamSerializer
+public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -8118,57 +9652,46 @@
Parameters
- -

Serializer version

-
Returns
- - - - - - - - - - + +
TypeDescription
System.Nullable<T>

Structure

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Structure type

+
System.Nullable<System.Int16>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializedStructNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

+ +

ReadShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T?> ReadSerializedStructNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
-    where T : struct, IStreamSerializer
+public static Task<short?> ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -8190,6 +9713,12 @@
Parameters
+ + + + + @@ -8210,44 +9739,27 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

Task<System.Nullable<T>>

Structure

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Structure type

+
Task<System.Nullable<System.Int16>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializerVersion(Stream)

-

Read the serializer version

+ +

ReadStream(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

+

Read a stream

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static int ReadSerializerVersion(this Stream stream)
+
public static Stream ReadStream(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
Parameters
@@ -8262,7 +9774,43 @@
Parameters
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8277,28 +9825,27 @@
Returns
- - +
Stream stream

Steam

+

Stream

+
Streamtarget

Target stream (the position won't be reset)

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

+
System.Int64minLen

Minimum stream length

+
System.Int64maxLen

Maximum stream length in bytes

System.Int32

Serializer version

+
Stream

Target stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadSerializerVersionAsync(Stream, CancellationToken)

-

Read the serializer version

+ +

ReadStreamAsync(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

+

Read a stream

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<int> ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
+
public static Task<Stream> ReadStreamAsync(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
Parameters
@@ -8313,7 +9860,43 @@
Parameters
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8334,28 +9917,28 @@
Returns
- - +
Stream stream

Steam

+

Stream

+
Streamtarget

Target stream (the position won't be reset)

+
System.Nullable<System.Int32>version

Serializer version

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

+
System.Int64minLen

Minimum stream length

+
System.Int64maxLen

Maximum stream length in bytes

Task<System.Int32>

Serializer version

+
Task<Stream>

Target stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

-

Read

+ +

ReadStreamNullable(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

+

Read a stream

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static short ReadShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static Stream? ReadStreamNullable(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
Parameters
@@ -8371,6 +9954,12 @@
Parameters
+ + + + + @@ -8383,6 +9972,24 @@
Parameters
+ + + + + + + + + + + + + + + @@ -8397,28 +10004,28 @@
Returns
- - +
Stream stream

Stream

+
Streamtarget

Target stream (the position won't be reset; will be disposed, if the value is null)

System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

+
System.Int64minLen

Minimum stream length

+
System.Int64maxLen

Maximum stream length in bytes

System.Int16

Value

+
System.Nullable<Stream>

Target stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

-

Read

+ +

ReadStreamNullableAsync<T>(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

+

Read a stream

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<short> ReadShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<Stream?> ReadStreamNullableAsync<T>(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
Parameters
@@ -8434,6 +10041,12 @@
Parameters
+ + + + + @@ -8446,6 +10059,24 @@
Parameters
+ + + + + + + + + + + + + + + @@ -8466,28 +10097,43 @@
Returns
- - +
Stream stream

Stream

+
Streamtarget

Target stream (the position won't be reset; will be disposed, if the value is null)

System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

+
System.Int64minLen

Minimum stream length

+
System.Int64maxLen

Maximum stream length in bytes

Task<System.Int16>

Value

+
Task<System.Nullable<Stream>>

Target stream

+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static string ReadString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
Parameters
@@ -8515,6 +10161,18 @@
Parameters
+ + + + + + + + + + @@ -8529,7 +10187,7 @@
Returns
- + @@ -8537,20 +10195,20 @@
Returns
System.Buffers.ArrayPool<System.Byte> pool

Array pool

+
System.Int32minLen

Minimum length in bytes

+
System.Int32maxLen

Maximum length in bytes

System.Nullable<System.Int16>System.String

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

-

Read

+ +

ReadString16(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

+

Read UTF-16 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<short?> ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static string ReadString16(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
Parameters
@@ -8581,9 +10239,15 @@
Parameters
- - - + + + + + + + @@ -8598,7 +10262,7 @@
Returns
- + @@ -8606,20 +10270,20 @@
Returns
CancellationTokencancellationToken

Cancellation token

+
System.Int32minLen

Minimum length in bytes

+
System.Int32maxLen

Maximum length in bytes

Task<System.Nullable<System.Int16>>System.String

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStream<T>(Stream, T, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

-

Read a stream

+ +

ReadString16Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read UTF-16 (little endian) string

Declaration
-
public static T ReadStream<T>(this Stream stream, T target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
-    where T : Stream
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task<string> ReadString16Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
Parameters
@@ -8635,12 +10299,6 @@
Parameters
- - - - - @@ -8656,73 +10314,57 @@
Parameters
- - - - - - + - - + - - -
Stream stream

Stream

-
Ttarget

Target stream (the position won't be reset)

System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

-
System.Int64System.Int32 minLen

Minimum stream length

+

Minimum length in bytes

System.Int64System.Int32 maxLen

Maximum stream length in bytes

+

Maximum length in bytes

-
Returns
- - - - - - - - - - + +
TypeDescription
T

Target stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Target stream type

+
Task<System.String>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStreamAsync<T>(Stream, T, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

-

Read a stream

+ +

ReadString16Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

+

Read UTF-16 (little endian) string

Declaration
-
public static Task<T> ReadStreamAsync<T>(this Stream stream, T target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
-    where T : Stream
+
[TargetedPatchingOptOut("Tiny method")]
+public static string ReadString16Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
Parameters
@@ -8738,12 +10380,6 @@
Parameters
- - - - - @@ -8759,27 +10395,15 @@
Parameters
- - - - - - + - - + - - - - - - @@ -8794,45 +10418,28 @@
Returns
- - - - -
Stream stream

Stream

-
Ttarget

Target stream (the position won't be reset)

System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

-
System.Int64System.Int32 minLen

Minimum stream length

+

Minimum length in bytes

System.Int64System.Int32 maxLen

Maximum stream length in bytes

-
CancellationTokencancellationToken

Cancellation token

+

Maximum length in bytes

Task<T>

Target stream

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Target stream type

+
System.String

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStreamNullable<T>(Stream, T, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

-

Read a stream

+ +

ReadString16NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read UTF-16 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T ReadStreamNullable<T>(this Stream stream, T target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
-    where T : Stream
+public static async Task<string> ReadString16NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
Parameters
@@ -8848,12 +10455,6 @@
Parameters
- - - - - @@ -8869,74 +10470,57 @@
Parameters
- - - - - - + - - + - - -
Stream stream

Stream

-
Ttarget

Target stream (the position won't be reset; will be disposed, if the value is null)

System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

-
System.Int64System.Int32 minLen

Minimum stream length

+

Minimum length in bytes

System.Int64System.Int32 maxLen

Maximum stream length in bytes

+

Maximum length in bytes

-
Returns
- - - - - - - - - - + +
TypeDescription
T

Target stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Target stream type

+
Task<System.String>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStreamNullableAsync<T>(Stream, T, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

-

Read a stream

+ +

ReadString32(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

+

Read UTF-32 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T> ReadStreamNullableAsync<T>(this Stream stream, T target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
-    where T : Stream
+public static string ReadString32(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
Parameters
@@ -8952,12 +10536,6 @@
Parameters
- - - - - @@ -8973,27 +10551,15 @@
Parameters
- - - - - - + - - + - - - - - - @@ -9008,44 +10574,28 @@
Returns
- - - - -
Stream stream

Stream

-
Ttarget

Target stream (the position won't be reset; will be disposed, if the value is null)

System.Nullable<System.Int32>maxBufferSize

Maximum buffer size in bytes

-
System.Int64System.Int32 minLen

Minimum stream length

+

Minimum length in bytes

System.Int64System.Int32 maxLen

Maximum stream length in bytes

-
CancellationTokencancellationToken

Cancellation token

+

Maximum length in bytes

Task<T>

Target stream

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Target stream type

+
System.String

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

-

Read

+ +

ReadString32Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read UTF-32 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static string ReadString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+public static Task<string> ReadString32Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
Parameters
@@ -9085,6 +10635,12 @@
Parameters
+ + + + + @@ -9099,7 +10655,7 @@
Returns
- + @@ -9107,20 +10663,20 @@
Returns
System.Int32 maxLen

Maximum length in bytes

+
CancellationTokencancellationToken

Cancellation token

System.StringTask<System.String>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString16(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

-

Read UTF-16 (little endian) string

+ +

ReadString32Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

+

Read UTF-32 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static string ReadString16(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+public static string ReadString32Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
Parameters
@@ -9182,20 +10738,20 @@
Returns
| - Improve this Doc - - - View Source + Improve this Doc - -

ReadString16Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

-

Read UTF-16 (little endian) string

+ + View Source + + +

ReadString32NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read UTF-32 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<string> ReadString16Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+public static async Task<string> ReadString32NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
Parameters
@@ -9263,20 +10819,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString16Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

-

Read UTF-16 (little endian) string

+ +

ReadStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static string ReadString16Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+public static Task<string> ReadStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
Parameters
@@ -9316,6 +10872,12 @@
Parameters
+ + + + + @@ -9330,7 +10892,7 @@
Returns
- + @@ -9338,20 +10900,20 @@
Returns
System.Int32 maxLen

Maximum length in bytes

+
CancellationTokencancellationToken

Cancellation token

System.StringTask<System.String>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString16NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

-

Read UTF-16 (little endian) string

+ +

ReadStringNullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<string> ReadString16NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+public static string ReadStringNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
Parameters
@@ -9391,12 +10953,6 @@
Parameters
- - - - - @@ -9411,7 +10967,7 @@
Returns
- + @@ -9419,20 +10975,20 @@
Returns
System.Int32 maxLen

Maximum length in bytes

-
CancellationTokencancellationToken

Cancellation token

Task<System.String>System.String

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString32(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

-

Read UTF-32 (little endian) string

+ +

ReadStringNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static string ReadString32(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+public static async Task<string> ReadStringNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
Parameters
@@ -9472,6 +11028,12 @@
Parameters
+ + + + + @@ -9486,7 +11048,7 @@
Returns
- + @@ -9494,20 +11056,21 @@
Returns
System.Int32 maxLen

Maximum length in bytes

+
CancellationTokencancellationToken

Cancellation token

System.StringTask<System.String>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString32Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

-

Read UTF-32 (little endian) string

+ +

ReadStruct<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

+

Read a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<string> ReadString32Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+public static T ReadStruct<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null) + where T : struct
Parameters
@@ -9532,63 +11095,68 @@
Parameters
- - - + + - - - + + + +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Byte[]buffer

Buffer

System.Int32minLen

Minimum length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Buffer pool

+
Returns
+ + - - - + + + + - - - +
System.Int32maxLen

Maximum length in bytes

-
TypeDescription
CancellationTokencancellationToken

Cancellation token

+
T

Struct

-
Returns
+
Type Parameters
- + - - +
TypeName Description
Task<System.String>

Value

+
T

Struct type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString32Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

-

Read UTF-32 (little endian) string

+ +

ReadStructAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

+

Read a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static string ReadString32Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+public static Task<T> ReadStructAsync<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null) + where T : struct
Parameters
@@ -9613,21 +11181,21 @@
Parameters
- - - + + - - - + + - - - + + @@ -9642,28 +11210,45 @@
Returns
- - + + + +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Byte[]buffer

Buffer

System.Int32minLen

Minimum length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Buffer pool

System.Int32maxLen

Maximum length in bytes

+
CancellationTokencancellationToken

Cancellation token

System.String

Value

+
Task<T>

Struct

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Struct type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadString32NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

-

Read UTF-32 (little endian) string

+ +

ReadStructNullable<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

+

Read a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<string> ReadString32NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+public static T? ReadStructNullable<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null) + where T : struct
Parameters
@@ -9688,63 +11273,68 @@
Parameters
- - - + + - - - + + + +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Byte[]buffer

Buffer

System.Int32minLen

Minimum length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Buffer pool

+
Returns
+ + - - - + + + + - - - +
System.Int32maxLen

Maximum length in bytes

-
TypeDescription
CancellationTokencancellationToken

Cancellation token

+
System.Nullable<T>

Struct

-
Returns
+
Type Parameters
- + - - +
TypeName Description
Task<System.String>

Value

+
T

Struct type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

-

Read

+ +

ReadStructNullableAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

+

Read a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<string> ReadStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+public static async Task<T?> ReadStructNullableAsync<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null) + where T : struct
Parameters
@@ -9769,21 +11359,15 @@
Parameters
- - - - - - - - + + - - - + + @@ -9804,28 +11388,44 @@
Returns
- - + + + +
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
System.Int32minLen

Minimum length in bytes

+
System.Byte[]buffer

Buffer

System.Int32maxLen

Maximum length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Buffer pool

Task<System.String>

Value

+
Task<System.Nullable<T>>

Struct

+
+
Type Parameters
+ + + + + + + + + + +
NameDescription
T

Struct type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStringNullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

+ +

ReadUInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static string ReadStringNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
+public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -9853,18 +11453,6 @@
Parameters
- - - - - - - - - - @@ -9879,7 +11467,7 @@
Returns
- + @@ -9887,20 +11475,20 @@
Returns
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length in bytes

-
System.Int32maxLen

Maximum length in bytes

System.StringSystem.UInt32

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStringNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

+ +

ReadUIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<string> ReadStringNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
+public static Task<uint> ReadUIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -9928,18 +11516,6 @@
Parameters
- - - - - - - - - - @@ -9960,7 +11536,7 @@
Returns
- + @@ -9968,21 +11544,20 @@
Returns
System.Buffers.ArrayPool<System.Byte> pool

Array pool

-
System.Int32minLen

Minimum length in bytes

-
System.Int32maxLen

Maximum length in bytes

Task<System.String>Task<System.UInt32>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStruct<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

-

Read a struct

+ +

ReadUIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T ReadStruct<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null)
-    where T : struct
+public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -10004,18 +11579,12 @@
Parameters
- - - - - - @@ -10030,45 +11599,28 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Serializer version

-
System.Byte[]buffer

Buffer

System.Buffers.ArrayPool<System.Byte> pool

Buffer pool

+

Array pool

T

Struct

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Struct type

+
System.Nullable<System.UInt32>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStructAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

-

Read a struct

+ +

ReadUIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T> ReadStructAsync<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
-    where T : struct
+public static Task<uint?> ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -10090,18 +11642,12 @@
Parameters
- - - - - - @@ -10122,45 +11668,28 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Serializer version

-
System.Byte[]buffer

Buffer

System.Buffers.ArrayPool<System.Byte> pool

Buffer pool

+

Array pool

Task<T>

Struct

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Struct type

+
Task<System.Nullable<System.UInt32>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStructNullable<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

-

Read a struct

+ +

ReadULong(Stream, Nullable<Int32>, ArrayPool<Byte>)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T? ReadStructNullable<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null)
-    where T : struct
+public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -10182,18 +11711,12 @@
Parameters
- - - - - - @@ -10208,45 +11731,28 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Serializer version

-
System.Byte[]buffer

Buffer

System.Buffers.ArrayPool<System.Byte> pool

Buffer pool

+

Array pool

System.Nullable<T>

Struct

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Struct type

+
System.UInt64

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadStructNullableAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

-

Read a struct

+ +

ReadULongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<T?> ReadStructNullableAsync<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
-    where T : struct
+public static Task<ulong> ReadULongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -10268,18 +11774,12 @@
Parameters
- - - - - - @@ -10300,44 +11800,28 @@
Returns
- - - - -
System.Nullable<System.Int32> version

Serializer version

-
System.Byte[]buffer

Buffer

System.Buffers.ArrayPool<System.Byte> pool

Buffer pool

+

Array pool

Task<System.Nullable<T>>

Struct

-
-
Type Parameters
- - - - - - - - - - - +
NameDescription
T

Struct type

+
Task<System.UInt64>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadULongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -10379,7 +11863,7 @@
Returns
- + @@ -10387,20 +11871,20 @@
Returns
System.UInt32System.Nullable<System.UInt64>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadULongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<uint> ReadUIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<ulong?> ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -10448,7 +11932,7 @@
Returns
- + @@ -10456,20 +11940,20 @@
Returns
Task<System.UInt32>Task<System.Nullable<System.UInt64>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadUShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -10511,7 +11995,7 @@
Returns
- + @@ -10519,20 +12003,20 @@
Returns
System.Nullable<System.UInt32>System.UInt16

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadUShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<uint?> ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<ushort> ReadUShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -10580,7 +12064,7 @@
Returns
- + @@ -10588,20 +12072,20 @@
Returns
Task<System.Nullable<System.UInt32>>Task<System.UInt16>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadULong(Stream, Nullable<Int32>, ArrayPool<Byte>)

+ +

ReadUShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
Parameters
@@ -10643,7 +12127,7 @@
Returns
- + @@ -10651,20 +12135,20 @@
Returns
System.UInt64System.Nullable<System.UInt16>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadULongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

+ +

ReadUShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

Read

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<ulong> ReadULongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Task<ushort?> ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -10712,7 +12196,7 @@
Returns
- + @@ -10720,20 +12204,20 @@
Returns
Task<System.UInt64>Task<System.Nullable<System.UInt16>>

Value

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadULongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

-

Read

+ +

Write(Stream, Boolean)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static Stream Write(this Stream stream, bool value)
Parameters
@@ -10752,15 +12236,9 @@
Parameters
- - - - - - - - + + @@ -10775,28 +12253,28 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Booleanvalue

Value to write

System.Nullable<System.UInt64>

Value

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadULongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

-

Read

+ +

Write(Stream, Byte)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<ulong?> ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Stream Write(this Stream stream, byte value)
Parameters
@@ -10815,21 +12293,9 @@
Parameters
- - - - - - - - - - - - - + + @@ -10844,28 +12310,28 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
CancellationTokencancellationToken

Cancellation token

+
System.Bytevalue

Value to write

Task<System.Nullable<System.UInt64>>

Value

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

-

Read

+ +

Write(Stream, Decimal)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static Stream Write(this Stream stream, decimal value)
Parameters
@@ -10884,15 +12350,9 @@
Parameters
- - - - - - - - + + @@ -10907,28 +12367,28 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Decimalvalue

Value to write

System.UInt16

Value

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

-

Read

+ +

Write(Stream, Double)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<ushort> ReadUShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Stream Write(this Stream stream, double value)
Parameters
@@ -10947,21 +12407,9 @@
Parameters
- - - - - - - - - - - - - + + @@ -10976,28 +12424,28 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
CancellationTokencancellationToken

Cancellation token

+
System.Doublevalue

Value to write

Task<System.UInt16>

Value

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

-

Read

+ +

Write(Stream, Int16)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
+public static Stream Write(this Stream stream, short value)
Parameters
@@ -11016,15 +12464,9 @@
Parameters
- - - - - - - - + + @@ -11039,28 +12481,28 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

+
System.Int16value

Value to write

System.Nullable<System.UInt16>

Value

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source - -

ReadUShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

-

Read

+ +

Write(Stream, Int32)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task<ushort?> ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
+public static Stream Write(this Stream stream, int value)
Parameters
@@ -11079,21 +12521,9 @@
Parameters
- - - - - - - - - - - - - + + @@ -11108,29 +12538,28 @@
Returns
- - +
System.Nullable<System.Int32>version

Serializer version

-
System.Buffers.ArrayPool<System.Byte>pool

Array pool

-
CancellationTokencancellationToken

Cancellation token

+
System.Int32value

Value to write

Task<System.Nullable<System.UInt16>>

Value

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source -

Write<T>(T, Boolean)

+

Write(Stream, Int64)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, bool value)
-    where T : Stream
+public static Stream Write(this Stream stream, long value)
Parameters
@@ -11143,13 +12572,13 @@
Parameters
- + - + @@ -11166,45 +12595,28 @@
Returns
- + - - -
TStream stream

Stream

System.BooleanSystem.Int64 value

Value to write

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

Write<T>(T, Byte)

+

Write(Stream, SByte)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, byte value)
-    where T : Stream
+public static Stream Write(this Stream stream, sbyte value)
Parameters
@@ -11217,13 +12629,13 @@
Parameters
- + - + @@ -11240,45 +12652,28 @@
Returns
- + - - -
TStream stream

Stream

System.ByteSystem.SByte value

Value to write

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

Write<tStream>(tStream, Decimal)

+

Write(Stream, Single)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream Write<tStream>(this tStream stream, decimal value)
-    where tStream : Stream
+public static Stream Write(this Stream stream, float value)
Parameters
@@ -11291,13 +12686,13 @@
Parameters
- + - + @@ -11314,45 +12709,28 @@
Returns
- + - - -
tStreamStream stream

Stream

System.DecimalSystem.Single value

Value to write

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
tStream

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

Write<T>(T, Double)

+

Write(Stream, UInt16)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, double value)
-    where T : Stream
+public static Stream Write(this Stream stream, ushort value)
Parameters
@@ -11365,13 +12743,13 @@
Parameters
- + - + @@ -11388,45 +12766,28 @@
Returns
- + - - -
TStream stream

Stream

System.DoubleSystem.UInt16 value

Value to write

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

Write<T>(T, Int16)

+

Write(Stream, UInt32)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, short value)
-    where T : Stream
+public static Stream Write(this Stream stream, uint value)
Parameters
@@ -11439,13 +12800,13 @@
Parameters
- + - + @@ -11462,45 +12823,28 @@
Returns
- + - - -
TStream stream

Stream

System.Int16System.UInt32 value

Value to write

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

Write<T>(T, Int32)

+

Write(Stream, UInt64)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, int value)
-    where T : Stream
+public static Stream Write(this Stream stream, ulong value)
Parameters
@@ -11513,13 +12857,13 @@
Parameters
- + - + @@ -11536,45 +12880,27 @@
Returns
- + - - -
TStream stream

Stream

System.Int32System.UInt64 value

Value to write

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

Write<T>(T, Int64)

-

Write

+ +

WriteAny(Stream, Object)

+

Write any object

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, long value)
-    where T : Stream
+
public static Stream WriteAny(this Stream stream, object obj)
Parameters
@@ -11587,15 +12913,15 @@
Parameters
- + - - - + + @@ -11610,45 +12936,27 @@
Returns
- + - - -
TStream stream

Stream

System.Int64value

Value to write

+
System.Objectobj

Object

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

Write<T>(T, SByte)

-

Write

+ +

WriteAnyAsync(Stream, Object, CancellationToken)

+

Write any object

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, sbyte value)
-    where T : Stream
+
public static Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
Parameters
@@ -11661,68 +12969,56 @@
Parameters
- + - - - + + - -
TStream stream

Stream

System.SBytevalue

Value to write

+
System.Objectobj

Object

-
Returns
- - - - - - - - - - + +
TypeDescription
T

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - + +
NameType Description
T

Stream type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

Write<T>(T, Single)

-

Write

+ +

WriteAnyNullable(Stream, Object)

+

Write any object

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, float value)
-    where T : Stream
+public static Stream WriteAnyNullable(this Stream stream, object obj)
Parameters
@@ -11735,15 +13031,15 @@
Parameters
- + - - - + + @@ -11758,45 +13054,28 @@
Returns
- + - - -
TStream stream

Stream

System.Singlevalue

Value to write

+
System.Objectobj

Object

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

Write<T>(T, UInt16)

-

Write

+ +

WriteAnyNullableAsync(Stream, Object, CancellationToken)

+

Write any object

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, ushort value)
-    where T : Stream
+public static Task WriteAnyNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
Parameters
@@ -11809,68 +13088,55 @@
Parameters
- + - - - + + - -
TStream stream

Stream

System.UInt16value

Value to write

+
System.Objectobj

Object

-
Returns
- - - - - - - - - - + +
TypeDescription
T

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - + +
NameType Description
T

Stream type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

Write<T>(T, UInt32)

-

Write

+ +

WriteAnyObject(Stream, Object)

+

Write any object

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, uint value)
-    where T : Stream
+
public static Stream WriteAnyObject(this Stream stream, object obj)
Parameters
@@ -11883,15 +13149,15 @@
Parameters
- + - - - + + @@ -11906,45 +13172,27 @@
Returns
- + - - -
TStream stream

Stream

System.UInt32value

Value to write

+
System.Objectobj

Object

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

Write<T>(T, UInt64)

-

Write

+ +

WriteAnyObjectAsync(Stream, Object, CancellationToken)

+

Write any object

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static T Write<T>(this T stream, ulong value)
-    where T : Stream
+
public static Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
Parameters
@@ -11957,67 +13205,56 @@
Parameters
- + - - - + + - -
TStream stream

Stream

System.UInt64value

Value to write

+
System.Objectobj

Object

-
Returns
- - - - - - - - - - + +
TypeDescription
T

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - + +
NameType Description
T

Stream type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAny<T>(T, Object)

+ +

WriteAnyObjectNullable(Stream, Object)

Write any object

Declaration
-
public static T WriteAny<T>(this T stream, object obj)
-    where T : Stream
+
[TargetedPatchingOptOut("Tiny method")]
+public static Stream WriteAnyObjectNullable(this Stream stream, object obj)
Parameters
@@ -12030,7 +13267,7 @@
Parameters
- + @@ -12053,43 +13290,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAnyAsync(Stream, Object, CancellationToken)

+ +

WriteAnyObjectNullableAsync(Stream, Object, CancellationToken)

Write any object

Declaration
-
public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task WriteAnyObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
Parameters
@@ -12138,21 +13360,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAnyNullable<T>(T, Object)

-

Write any object

+ +

WriteArray(Stream, Array)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteAnyNullable<T>(this T stream, object obj)
-    where T : Stream
+public static Stream WriteArray(this Stream stream, Array value)
Parameters
@@ -12165,15 +13386,15 @@
Parameters
- + - - - + + @@ -12188,44 +13409,90 @@
Returns
- +
TStream stream

Stream

System.Objectobj

Object

+
Arrayvalue

Value to write

TStream

Stream

-
Type Parameters
+ + | + Improve this Doc + + + View Source + + +

WriteArrayAsync(Stream, Array, CancellationToken)

+

Write

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
+
+
Parameters
+ - - + + + + + + + + + + + +
Type Name Description
T

Stream type

+
Streamstream

Stream

+
Arrayvalue

Value to write

+
CancellationTokencancellationToken

Cancellation token

+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAnyNullableAsync(Stream, Object, CancellationToken)

-

Write any object

+ +

WriteArrayNullable(Stream, Nullable<Array>)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAnyNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
+public static Stream WriteArrayNullable(this Stream stream, Array? value)
Parameters
@@ -12244,15 +13511,9 @@
Parameters
- - - - - - - - + + @@ -12267,27 +13528,28 @@
Returns
- - + +
System.Objectobj

Object

-
CancellationTokencancellationToken

Cancellation token

+
System.Nullable<Array>value

Value to write

TaskStream

Stream

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAnyObject<tStream, tObj>(tStream, tObj)

-

Write any object

+ +

WriteArrayNullableAsync(Stream, Nullable<Array>, CancellationToken)

+

Write

Declaration
-
public static tStream WriteAnyObject<tStream, tObj>(this tStream stream, tObj obj)
-    where tStream : Stream where tObj : class, new()
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = null)
Parameters
@@ -12300,72 +13562,56 @@
Parameters
- + - - - + + - -
tStreamStream stream

Stream

tObjobj

Object

+
System.Nullable<Array>value

Value to write

-
Returns
- - - - - - - - - - + +
TypeDescription
tStream

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - - - - - + +
NameType Description
tStream

Stream type

-
tObj

Object type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAnyObjectAsync<T>(Stream, T, CancellationToken)

-

Write any object

+ +

WriteAsync(Stream, Boolean, CancellationToken)

+

Write

Declaration
-
public static async Task WriteAnyObjectAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
-    where T : class, new()
+
[TargetedPatchingOptOut("Tiny method")]
+public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = null)
Parameters
@@ -12384,9 +13630,9 @@
Parameters
- - - + + @@ -12412,39 +13658,22 @@
Returns
Tobj

Object

+
System.Booleanvalue

Value to write

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T

Object type

-
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAnyObjectNullable<tStream, tObj>(tStream, tObj)

-

Write any object

+ +

WriteAsync(Stream, Byte, CancellationToken)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteAnyObjectNullable<tStream, tObj>(this tStream stream, tObj obj)
-    where tStream : Stream where tObj : class, new()
+public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = null)
Parameters
@@ -12457,73 +13686,56 @@
Parameters
- + - - - + + - -
tStreamStream stream

Stream

tObjobj

Object

+
System.Bytevalue

Value to write

-
Returns
- - - - - - - - - - + +
TypeDescription
tStream

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - - - - - + +
NameType Description
tStream

Stream type

-
tObj

Object type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAnyObjectNullableAsync<T>(Stream, T, CancellationToken)

-

Write any object

+ +

WriteAsync(Stream, Decimal, CancellationToken)

+

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAnyObjectNullableAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
-    where T : class, new()
+public static Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = null)
Parameters
@@ -12542,9 +13754,9 @@
Parameters
- - - + + @@ -12570,39 +13782,22 @@
Returns
Tobj

Object

+
System.Decimalvalue

Value to write

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T

Object type

-
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteArray<tStream, tElement>(tStream, tElement[])

+ +

WriteAsync(Stream, Double, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteArray<tStream, tElement>(this tStream stream, tElement[] value)
-    where tStream : Stream
+public static Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = null)
Parameters
@@ -12615,72 +13810,56 @@
Parameters
- + - + - -
tStreamStream stream

Stream

tElement[]System.Double value

Value to write

-
Returns
- - - - - - - - - - + +
TypeDescription
tStream

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - - - - - + +
NameType Description
tStream

Stream type

-
tElement

Element type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteArrayAsync<T>(Stream, T[], CancellationToken)

+ +

WriteAsync(Stream, Int16, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteArrayAsync<T>(this Stream stream, T[] value, CancellationToken cancellationToken = null)
+public static Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = null)
Parameters
@@ -12699,7 +13878,7 @@
Parameters
- + @@ -12727,39 +13906,22 @@
Returns
T[]System.Int16 value

Value to write

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T

Element type

-
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteArrayNullable<tStream, tElement>(tStream, tElement[])

+ +

WriteAsync(Stream, Int32, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteArrayNullable<tStream, tElement>(this tStream stream, tElement[] value)
-    where tStream : Stream
+public static Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = null)
Parameters
@@ -12772,72 +13934,56 @@
Parameters
- + - + - -
tStreamStream stream

Stream

tElement[]System.Int32 value

Value to write

-
Returns
- - - - - - - - - - + +
TypeDescription
tStream

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - - - - - + +
NameType Description
tStream

Stream type

-
tElement

Element type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteArrayNullableAsync<T>(Stream, T[], CancellationToken)

+ +

WriteAsync(Stream, Int64, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteArrayNullableAsync<T>(this Stream stream, T[] value, CancellationToken cancellationToken = null)
+public static Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = null)
Parameters
@@ -12856,7 +14002,7 @@
Parameters
- + @@ -12878,44 +14024,28 @@
Returns
- - - - - -
T[]System.Int64 value

Value to write

Task
-
Type Parameters
- - - - - - - - - - - + + +
NameDescription
T

Element type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteAsync(Stream, Boolean, CancellationToken)

+

WriteAsync(Stream, SByte, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = null)
+public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = null)
Parameters
@@ -12934,7 +14064,7 @@
Parameters
- + @@ -12964,20 +14094,20 @@
Returns
System.BooleanSystem.SByte value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteAsync(Stream, Byte, CancellationToken)

+

WriteAsync(Stream, Single, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = null)
+public static Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = null)
Parameters
@@ -12996,7 +14126,7 @@
Parameters
- + @@ -13026,20 +14156,20 @@
Returns
System.ByteSystem.Single value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteAsync(Stream, Decimal, CancellationToken)

+

WriteAsync(Stream, UInt16, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = null)
+public static Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = null)
Parameters
@@ -13058,7 +14188,7 @@
Parameters
- + @@ -13088,20 +14218,20 @@
Returns
System.DecimalSystem.UInt16 value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteAsync(Stream, Double, CancellationToken)

+

WriteAsync(Stream, UInt32, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = null)
+public static Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = null)
Parameters
@@ -13120,7 +14250,7 @@
Parameters
- + @@ -13150,20 +14280,20 @@
Returns
System.DoubleSystem.UInt32 value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteAsync(Stream, Int16, CancellationToken)

+

WriteAsync(Stream, UInt64, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = null)
+public static Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = null)
Parameters
@@ -13182,7 +14312,7 @@
Parameters
- + @@ -13212,20 +14342,20 @@
Returns
System.Int16System.UInt64 value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAsync(Stream, Int32, CancellationToken)

+ +

WriteBytes(Stream, ReadOnlySpan<Byte>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = null)
+public static Stream WriteBytes(this Stream stream, ReadOnlySpan<byte> value)
Parameters
@@ -13244,15 +14374,9 @@
Parameters
- + - - - - - @@ -13267,27 +14391,28 @@
Returns
- - + +
System.Int32ReadOnlySpan<System.Byte> value

Value to write

-
CancellationTokencancellationToken

Cancellation token

TaskStream

Stream

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAsync(Stream, Int64, CancellationToken)

+ +

WriteBytes(Stream, Span<Byte>)

Write

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Just a method adapter")]
+public static Stream WriteBytes(this Stream stream, Span<byte> value)
Parameters
@@ -13306,15 +14431,9 @@
Parameters
- + - - - - - @@ -13329,27 +14448,28 @@
Returns
- - + +
System.Int64Span<System.Byte> value

Value to write

-
CancellationTokencancellationToken

Cancellation token

TaskStream

Stream

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAsync(Stream, SByte, CancellationToken)

+ +

WriteBytesAsync(Stream, Memory<Byte>, CancellationToken)

Write

Declaration
-
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Just a method adapter")]
+public static Task WriteBytesAsync(this Stream stream, Memory<byte> value, CancellationToken cancellationToken = null)
Parameters
@@ -13368,7 +14488,7 @@
Parameters
- + @@ -13398,20 +14518,20 @@
Returns
System.SByteMemory<System.Byte> value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAsync(Stream, Single, CancellationToken)

+ +

WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = null)
+public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory<byte> value, CancellationToken cancellationToken = null)
Parameters
@@ -13430,7 +14550,7 @@
Parameters
- + @@ -13460,20 +14580,20 @@
Returns
System.SingleReadOnlyMemory<System.Byte> value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAsync(Stream, UInt16, CancellationToken)

+ +

WriteBytesNullable(Stream, Byte[])

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = null)
+public static Stream WriteBytesNullable(this Stream stream, byte[] value)
Parameters
@@ -13492,15 +14612,9 @@
Parameters
- + - - - - - @@ -13515,27 +14629,28 @@
Returns
- - + +
System.UInt16System.Byte[] value

Value to write

-
CancellationTokencancellationToken

Cancellation token

TaskStream

Stream

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAsync(Stream, UInt32, CancellationToken)

+ +

WriteBytesNullableAsync(Stream, Byte[], CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = null)
+public static Task WriteBytesNullableAsync(this Stream stream, byte[] value, CancellationToken cancellationToken = null)
Parameters
@@ -13554,7 +14669,7 @@
Parameters
- + @@ -13584,20 +14699,20 @@
Returns
System.UInt32System.Byte[] value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteAsync(Stream, UInt64, CancellationToken)

+ +

WriteDict(Stream, IDictionary)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = null)
+public static Stream WriteDict(this Stream stream, IDictionary value)
Parameters
@@ -13616,15 +14731,9 @@
Parameters
- + - - - - - @@ -13639,28 +14748,28 @@
Returns
- - + +
System.UInt64System.Collections.IDictionary value

Value to write

-
CancellationTokencancellationToken

Cancellation token

TaskStream

Stream

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteBytes<T>(T, ReadOnlySpan<Byte>)

+ +

WriteDictAsync(Stream, IDictionary, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteBytes<T>(this T stream, ReadOnlySpan<byte> value)
-    where T : Stream
+public static Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
Parameters
@@ -13673,68 +14782,56 @@
Parameters
- + - + - -
TStream stream

Stream

ReadOnlySpan<System.Byte>System.Collections.IDictionary value

Value to write

-
Returns
- - - - - - - - - - + +
TypeDescription
T

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - + +
NameType Description
T

Stream type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteBytes<T>(T, Span<Byte>)

+ +

WriteDictNullable(Stream, IDictionary)

Write

Declaration
-
[TargetedPatchingOptOut("Just a method adapter")]
-public static T WriteBytes<T>(this T stream, Span<byte> value)
-    where T : Stream
+
[TargetedPatchingOptOut("Tiny method")]
+public static Stream WriteDictNullable(this Stream stream, IDictionary value)
Parameters
@@ -13747,13 +14844,13 @@
Parameters
- + - + @@ -13770,44 +14867,28 @@
Returns
- + - - -
TStream stream

Stream

Span<System.Byte>System.Collections.IDictionary value

Value to write

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteBytesAsync(Stream, Memory<Byte>, CancellationToken)

+ +

WriteDictNullableAsync(Stream, IDictionary, CancellationToken)

Write

Declaration
-
[TargetedPatchingOptOut("Just a method adapter")]
-public static Task WriteBytesAsync(this Stream stream, Memory<byte> value, CancellationToken cancellationToken = null)
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task WriteDictNullableAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
Parameters
@@ -13826,7 +14907,7 @@
Parameters
- + @@ -13856,20 +14937,20 @@
Returns
Memory<System.Byte>System.Collections.IDictionary value

Value to write

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, CancellationToken)

+ +

WriteEnum(Stream, Object)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteBytesAsync(this Stream stream, ReadOnlyMemory<byte> value, CancellationToken cancellationToken = null)
+public static Stream WriteEnum(this Stream stream, object value)
Parameters
@@ -13888,15 +14969,9 @@
Parameters
- + - - - - - @@ -13911,28 +14986,29 @@
Returns
- - + +
ReadOnlyMemory<System.Byte>System.Object value

Value to write

-
CancellationTokencancellationToken

Cancellation token

TaskStream

Stream

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteBytesNullable<T>(T, Byte[])

+ +

WriteEnum<T>(Stream, T)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteBytesNullable<T>(this T stream, byte[] value)
-    where T : Stream
+public static Stream WriteEnum<T>(this Stream stream, T value) + where T : struct, Enum
Parameters
@@ -13945,13 +15021,13 @@
Parameters
- + - + @@ -13968,7 +15044,7 @@
Returns
- + @@ -13985,27 +15061,90 @@
Type Parameters
-
TStream stream

Stream

System.Byte[]T value

Value to write

TStream

Stream

T

Stream type

+

Enumeration type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteBytesNullableAsync(Stream, Byte[], CancellationToken)

+ +

WriteEnumAsync(Stream, Object, CancellationToken)

+

Write

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Objectvalue

Value to write

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task
+ + | + Improve this Doc + + + View Source + + +

WriteEnumAsync<T>(Stream, T, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteBytesNullableAsync(this Stream stream, byte[] value, CancellationToken cancellationToken = null)
+public static Task WriteEnumAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null) + where T : struct, Enum
Parameters
@@ -14024,7 +15163,7 @@
Parameters
- + @@ -14052,23 +15191,38 @@
Returns
System.Byte[]T value

Value to write

+
Type Parameters
+ + + + + + + + + + + + + +
NameDescription
T

Enumeration type

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteDict<tStream, tKey, tValue>(tStream, Dictionary<tKey, tValue>)

+ +

WriteEnumNullable(Stream, Object)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteDict<tStream, tKey, tValue>(this tStream stream, Dictionary<tKey, tValue> value)
-    where tStream : Stream
+public static Stream WriteEnumNullable(this Stream stream, object value)
Parameters
@@ -14081,13 +15235,13 @@
Parameters
- + - + @@ -14104,54 +15258,29 @@
Returns
- + - - -
tStreamStream stream

Stream

Dictionary<tKey, tValue>System.Object value

Value to write

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tKey

Key type

-
tValue

Value type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteDictAsync<tKey, tValue>(Stream, Dictionary<tKey, tValue>, CancellationToken)

+ +

WriteEnumNullable<T>(Stream, Nullable<T>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteDictAsync<tKey, tValue>(this Stream stream, Dictionary<tKey, tValue> value, CancellationToken cancellationToken = null)
+public static Stream WriteEnumNullable<T>(this Stream stream, T? value) + where T : struct, Enum
Parameters
@@ -14170,15 +15299,9 @@
Parameters
- + - - - - - @@ -14193,8 +15316,9 @@
Returns
- - + +
Dictionary<tKey, tValue>System.Nullable<T> value

Value to write

-
CancellationTokencancellationToken

Cancellation token

TaskStream

Stream

+
@@ -14208,34 +15332,28 @@
Type Parameters
- tKey -

Key type

- - - - tValue -

Value type

+ T +

Enumeration type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteDictNullable<tStream, tKey, tValue>(tStream, Nullable<Dictionary<tKey, tValue>>)

+ +

WriteEnumNullableAsync(Stream, Object, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteDictNullable<tStream, tKey, tValue>(this tStream stream, Dictionary<tKey, tValue>? value)
-    where tStream : Stream
+public static Task WriteEnumNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
Parameters
@@ -14248,77 +15366,57 @@
Parameters
- + - + - -
tStreamStream stream

Stream

System.Nullable<Dictionary<tKey, tValue>>System.Object value

Value to write

-
Returns
- - - - - - - - - - + +
TypeDescription
tStream

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - - - - - - - - - + +
NameType Description
tStream

Stream type

-
tKey

Key type

-
tValue

Value type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteDictNullableAsync<tKey, tValue>(Stream, Nullable<Dictionary<tKey, tValue>>, CancellationToken)

+ +

WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteDictNullableAsync<tKey, tValue>(this Stream stream, Dictionary<tKey, tValue>? value, CancellationToken cancellationToken = null)
+public static Task WriteEnumNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null) + where T : struct, Enum
Parameters
@@ -14337,7 +15435,7 @@
Parameters
- + @@ -14375,34 +15473,28 @@
Type Parameters
- - - - - - +
System.Nullable<Dictionary<tKey, tValue>>System.Nullable<T> value

Value to write

tKey

Key type

-
tValue

Value type

+
T

Enumeration type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteEnum<tStream, tEnum>(tStream, tEnum)

+ +

WriteFixedArray<T>(Stream, Span<T>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteEnum<tStream, tEnum>(this tStream stream, tEnum value)
-    where tStream : Stream where tEnum : struct, Enum
+public static Stream WriteFixedArray<T>(this Stream stream, Span<T> value)
Parameters
@@ -14415,13 +15507,13 @@
Parameters
- + - + @@ -14438,7 +15530,7 @@
Returns
- + @@ -14454,34 +15546,28 @@
Type Parameters
- - - - - - +
tStreamStream stream

Stream

tEnumSpan<T> value

Value to write

tStreamStream

Stream

tStream

Stream type

-
tEnum

Enumeration type

+
T

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteEnumAsync<T>(Stream, T, CancellationToken)

+ +

WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteEnumAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
-    where T : struct, Enum
+public static Task WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, CancellationToken cancellationToken = null)
Parameters
@@ -14500,7 +15586,7 @@
Parameters
- + @@ -14539,28 +15625,27 @@
Type Parameters
-
TMemory<T> value

Value to write

T

Enumeration type

+

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteEnumNullable<tStream, tEnum>(tStream, Nullable<tEnum>)

-

Write

+ +

WriteIfNull<T>(Stream, T)

+

Write a boolean flag if an object is not null

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteEnumNullable<tStream, tEnum>(this tStream stream, tEnum? value)
-    where tStream : Stream where tEnum : struct, Enum
+public static bool WriteIfNull<T>(this Stream stream, T obj)
Parameters
@@ -14573,15 +15658,15 @@
Parameters
- + - - - + + @@ -14596,8 +15681,8 @@
Returns
- - + @@ -14612,34 +15697,28 @@
Type Parameters
- - - - - - +
tStreamStream stream

Stream

System.Nullable<tEnum>value

Value to write

+
Tobj

Object

tStream

Stream

+
System.Boolean

Is not null?

tStream

Stream type

-
tEnum

Enumeration type

+
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

-

Write

+ +

WriteIfNull<T>(Stream, T, Action)

+

Write a boolean flag if an object is not null

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteEnumNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
-    where T : struct, Enum
+public static Stream WriteIfNull<T>(this Stream stream, T obj, Action action)
Parameters
@@ -14658,15 +15737,15 @@
Parameters
- - - + + - - - + + @@ -14681,8 +15760,9 @@
Returns
- - + +
System.Nullable<T>value

Value to write

+
Tobj

Object

CancellationTokencancellationToken

Cancellation token

+
Actionaction

Write action to execute, if the object isn't null

TaskStream

Stream

+
@@ -14697,28 +15777,27 @@
Type Parameters
T -

Enumeration type

+

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteFixedArray<tStream, tElement>(tStream, Span<tElement>)

-

Write

+ +

WriteIfNullAsync<T>(Stream, T, CancellationToken)

+

Write a boolean flag if an object is not null

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteFixedArray<tStream, tElement>(this tStream stream, Span<tElement> value)
-    where tStream : Stream
+public static async Task<bool> WriteIfNullAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
Parameters
@@ -14731,15 +15810,21 @@
Parameters
- + - - - + + + + + + + @@ -14754,8 +15839,8 @@
Returns
- - + @@ -14770,33 +15855,28 @@
Type Parameters
- - - - - - +
tStreamStream stream

Stream

Span<tElement>value

Value to write

+
Tobj

Object

+
CancellationTokencancellationToken

Cancellation token

tStream

Stream

+
Task<System.Boolean>

Is not null?

tStream

Stream type

-
tElement

Element type

+
T

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

-

Write

+ +

WriteIfNullAsync<T>(Stream, T, Func<Task>, CancellationToken)

+

Write a boolean flag if an object is not null

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, CancellationToken cancellationToken = null)
+public static async Task WriteIfNullAsync<T>(this Stream stream, T obj, Func<Task> action, CancellationToken cancellationToken = null)
Parameters
@@ -14815,9 +15895,15 @@
Parameters
- - - + + + + + + + @@ -14854,28 +15940,27 @@
Type Parameters
-
Memory<T>value

Value to write

+
Tobj

Object

+
Func<Task>action

Write action to execute, if the object isn't null

T

Element type

+

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteList<tStream, tElement>(tStream, List<tElement>)

+

WriteList(Stream, IList)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteList<tStream, tElement>(this tStream stream, List<tElement> value)
-    where tStream : Stream
+public static Stream WriteList(this Stream stream, IList value)
Parameters
@@ -14888,13 +15973,13 @@
Parameters
- + - + @@ -14911,49 +15996,28 @@
Returns
- + - - -
tStreamStream stream

Stream

List<tElement>System.Collections.IList value

Value to write

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tElement

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteListAsync<T>(Stream, List<T>, CancellationToken)

+

WriteListAsync(Stream, IList, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteListAsync<T>(this Stream stream, List<T> value, CancellationToken cancellationToken = null)
+public static Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
Parameters
@@ -14972,7 +16036,7 @@
Parameters
- + @@ -14995,44 +16059,27 @@
Returns
- - - - -
List<T>System.Collections.IList value

Value to write

Task
-
Type Parameters
- - - - - - - - - - - + +
NameDescription
T

Element type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteListNullable<tStream, tElement>(tStream, Nullable<List<tElement>>)

+

WriteListNullable(Stream, IList)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteListNullable<tStream, tElement>(this tStream stream, List<tElement>? value)
-    where tStream : Stream
+public static Stream WriteListNullable(this Stream stream, IList value)
Parameters
@@ -15045,13 +16092,13 @@
Parameters
- + - + @@ -15068,49 +16115,28 @@
Returns
- + - - -
tStreamStream stream

Stream

System.Nullable<List<tElement>>System.Collections.IList value

Value to write

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tElement

Element type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteListNullableAsync<T>(Stream, Nullable<List<T>>, CancellationToken)

+

WriteListNullableAsync(Stream, IList, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteListNullableAsync<T>(this Stream stream, List<T>? value, CancellationToken cancellationToken = null)
+public static Task WriteListNullableAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
Parameters
@@ -15129,7 +16155,7 @@
Parameters
- + @@ -15157,39 +16183,22 @@
Returns
System.Nullable<List<T>>System.Collections.IList value

Value to write

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T

Element type

-
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Boolean>)

+

WriteNullable(Stream, Nullable<Boolean>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, bool? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, bool? value)
Parameters
@@ -15202,7 +16211,7 @@
Parameters
- + @@ -15225,45 +16234,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Byte>)

+

WriteNullable(Stream, Nullable<Byte>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, byte? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, byte? value)
Parameters
@@ -15276,7 +16268,7 @@
Parameters
- + @@ -15299,45 +16291,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Decimal>)

+

WriteNullable(Stream, Nullable<Decimal>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, decimal? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, decimal? value)
Parameters
@@ -15350,7 +16325,7 @@
Parameters
- + @@ -15373,45 +16348,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Double>)

+

WriteNullable(Stream, Nullable<Double>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, double? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, double? value)
Parameters
@@ -15424,7 +16382,7 @@
Parameters
- + @@ -15447,45 +16405,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Int16>)

+

WriteNullable(Stream, Nullable<Int16>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, short? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, short? value)
Parameters
@@ -15498,7 +16439,7 @@
Parameters
- + @@ -15521,45 +16462,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Int32>)

+

WriteNullable(Stream, Nullable<Int32>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, int? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, int? value)
Parameters
@@ -15572,7 +16496,7 @@
Parameters
- + @@ -15595,45 +16519,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Int64>)

+

WriteNullable(Stream, Nullable<Int64>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, long? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, long? value)
Parameters
@@ -15646,7 +16553,7 @@
Parameters
- + @@ -15669,45 +16576,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<SByte>)

+

WriteNullable(Stream, Nullable<SByte>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, sbyte? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, sbyte? value)
Parameters
@@ -15720,7 +16610,7 @@
Parameters
- + @@ -15743,45 +16633,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<Single>)

+

WriteNullable(Stream, Nullable<Single>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, float? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, float? value)
Parameters
@@ -15794,7 +16667,7 @@
Parameters
- + @@ -15817,45 +16690,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<UInt16>)

+

WriteNullable(Stream, Nullable<UInt16>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, ushort? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, ushort? value)
Parameters
@@ -15868,7 +16724,7 @@
Parameters
- + @@ -15891,45 +16747,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<UInt32>)

+

WriteNullable(Stream, Nullable<UInt32>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, uint? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, uint? value)
Parameters
@@ -15942,68 +16781,51 @@
Parameters
- + - - - - - - -
TStream stream

Stream

System.Nullable<System.UInt32>value

Value to write

-
-
Returns
- - - - - - - - - - - - + + + + +
TypeDescription
T

Stream

-
System.Nullable<System.UInt32>value

Value to write

+
-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Stream type

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNullable<T>(T, Nullable<UInt64>)

+

WriteNullable(Stream, Nullable<UInt64>)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteNullable<T>(this T stream, ulong? value)
-    where T : Stream
+public static Stream WriteNullable(this Stream stream, ulong? value)
Parameters
@@ -16016,7 +16838,7 @@
Parameters
- + @@ -16039,34 +16861,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

@@ -16076,7 +16882,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = null)
Parameters
@@ -16125,10 +16931,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

@@ -16138,7 +16944,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = null)
Parameters
@@ -16187,10 +16993,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

@@ -16200,7 +17006,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = null)
Parameters
@@ -16249,10 +17055,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

@@ -16262,7 +17068,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = null)
Parameters
@@ -16311,10 +17117,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Int16>, CancellationToken)

@@ -16324,7 +17130,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = null)
Parameters
@@ -16373,10 +17179,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

@@ -16386,7 +17192,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = null)
Parameters
@@ -16435,10 +17241,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

@@ -16448,7 +17254,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = null)
Parameters
@@ -16497,10 +17303,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

@@ -16510,7 +17316,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = null)
Parameters
@@ -16559,10 +17365,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

@@ -16572,7 +17378,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = null)
Parameters
@@ -16621,10 +17427,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

@@ -16634,7 +17440,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = null)
Parameters
@@ -16683,10 +17489,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

@@ -16696,7 +17502,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = null)
Parameters
@@ -16745,10 +17551,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

@@ -16758,7 +17564,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = null)
+public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = null)
Parameters
@@ -16807,20 +17613,19 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteNumber<tStream, tNumber>(tStream, tNumber)

+

WriteNumber(Stream, Object)

Write

Declaration
-
public static tStream WriteNumber<tStream, tNumber>(this tStream stream, tNumber value)
-    where tStream : Stream where tNumber : struct, IConvertible
+
public static Stream WriteNumber(this Stream stream, object value)
Parameters
@@ -16833,13 +17638,13 @@
Parameters
- + - + @@ -16856,28 +17661,80 @@
Returns
- +
tStreamStream stream

Stream

tNumberSystem.Object value

Value to write

tStreamStream

Stream

-
Type Parameters
+ + | + Improve this Doc + + + View Source + + +

WriteNumber<T>(Stream, T)

+

Write

+
+
+
Declaration
+
+
public static Stream WriteNumber<T>(this Stream stream, T value)
+    where T : struct, IConvertible
+
+
Parameters
+ - - + + + + + + + + + +
Type Name Description
tStream

Stream type

+
Streamstream

Stream

+
Tvalue

Value to write

+
+
Returns
+ + + + + + + + + + + + +
TypeDescription
Stream

Stream

+
Type Parameters
+ + + + + + + + - + @@ -16885,10 +17742,71 @@
Type Parameters
NameDescription
tNumberT

Number type

| - Improve this Doc + Improve this Doc + + + View Source + + +

WriteNumberAsync(Stream, Object, CancellationToken)

+

Write

+
+
+
Declaration
+
+
public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Objectvalue

Value to write

+
CancellationTokencancellationToken

Cancellation token

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task
+ + | + Improve this Doc - View Source + View Source

WriteNumberAsync<T>(Stream, T, CancellationToken)

@@ -16963,20 +17881,140 @@
Type Parameters
| - Improve this Doc + Improve this Doc + + + View Source + + +

WriteNumberInt(Stream, Object, Nullable<NumberTypes>)

+

Write

+
+
+
Declaration
+
+
public static Stream WriteNumberInt(Stream stream, object value, NumberTypes? type)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Objectvalue

Value to write

+
System.Nullable<NumberTypes>type

Number type

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Stream

Stream

+
+ + | + Improve this Doc + + + View Source + + +

WriteNumberNullable(Stream, Object)

+

Write

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static Stream WriteNumberNullable(this Stream stream, object value)
+
+
Parameters
+ + + + + + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
System.Objectvalue

Value to write

+
+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Stream

Stream

+
+ + | + Improve this Doc - View Source + View Source - -

WriteNumberInt<T>(T, Object, Nullable<NumberTypes>)

+ +

WriteNumberNullable<T>(Stream, Nullable<T>)

Write

Declaration
-
public static T WriteNumberInt<T>(T stream, object value, NumberTypes? type)
-    where T : Stream
+
[TargetedPatchingOptOut("Tiny method")]
+public static Stream WriteNumberNullable<T>(this Stream stream, T? value)
+    where T : struct, IConvertible
Parameters
@@ -16989,21 +18027,15 @@
Parameters
- + - + - - - - - @@ -17018,7 +18050,7 @@
Returns
- + @@ -17035,28 +18067,27 @@
Type Parameters
-
TStream stream

Stream

System.ObjectSystem.Nullable<T> value

Value to write

-
System.Nullable<NumberTypes>type

Number type

TStream

Stream

T

Stream type

+

Number type

| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteNumberNullable<tStream, tNumber>(tStream, Nullable<tNumber>)

+ +

WriteNumberNullableAsync(Stream, Object, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteNumberNullable<tStream, tNumber>(this tStream stream, tNumber? value)
-    where tStream : Stream where tNumber : struct, IConvertible
+public static Task WriteNumberNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
Parameters
@@ -17069,62 +18100,46 @@
Parameters
- + - + - -
tStreamStream stream

Stream

System.Nullable<tNumber>System.Object value

Value to write

-
Returns
- - - - - - - - - - + +
TypeDescription
tStream

Stream

+
CancellationTokencancellationToken

Cancellation token

-
Type Parameters
+
Returns
- + - - - - - - + +
NameType Description
tStream

Stream type

-
tNumber

Number type

-
Task
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

@@ -17134,7 +18149,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteNumberNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
+public static Task WriteNumberNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
     where T : struct, IConvertible
Parameters
@@ -17200,21 +18215,20 @@
Type Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteObject<tStream, tObj>(tStream, tObj)

+

WriteObject(Stream, Object)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteObject<tStream, tObj>(this tStream stream, tObj obj)
-    where tStream : Stream
+public static Stream WriteObject(this Stream stream, object obj)
Parameters
@@ -17227,13 +18241,13 @@
Parameters
- + - + @@ -17250,49 +18264,28 @@
Returns
- + - - -
tStreamStream stream

Stream

tObjSystem.Object obj

Object to write

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tObj

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteObjectAsync<T>(Stream, T, CancellationToken)

+

WriteObjectAsync(Stream, Object, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteObjectAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
+public static Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
Parameters
@@ -17311,7 +18304,7 @@
Parameters
- + @@ -17339,39 +18332,22 @@
Returns
TSystem.Object obj

Object to write

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T

Object type

-
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteObjectNullable<tStream, tObj>(tStream, tObj)

+

WriteObjectNullable(Stream, Object)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteObjectNullable<tStream, tObj>(this tStream stream, tObj obj)
-    where tStream : Stream
+public static Stream WriteObjectNullable(this Stream stream, object obj)
Parameters
@@ -17384,13 +18360,13 @@
Parameters
- + - + @@ -17407,49 +18383,28 @@
Returns
- + - - -
tStreamStream stream

Stream

tObjSystem.Object obj

Object to write

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tObj

Object type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteObjectNullableAsync<T>(Stream, T, CancellationToken)

+

WriteObjectNullableAsync(Stream, Object, CancellationToken)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteObjectNullableAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
+public static Task WriteObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
Parameters
@@ -17468,7 +18423,7 @@
Parameters
- + @@ -17496,39 +18451,22 @@
Returns
TSystem.Object obj

Object to write

-
Type Parameters
- - - - - - - - - - - - - -
NameDescription
T

Object type

-
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteSerialized<T>(T, IStreamSerializer)

+

WriteSerialized(Stream, IStreamSerializer)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteSerialized<T>(this T stream, IStreamSerializer obj)
-    where T : Stream
+public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj)
Parameters
@@ -17541,7 +18479,7 @@
Parameters
- + @@ -17564,44 +18502,90 @@
Returns
- +
TStream stream

Stream

TStream

Stream

-
Type Parameters
+ + | + Improve this Doc + + + View Source + + +

WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

+

Write

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
+
+
Parameters
+ - - + + + + + + + + + + + +
Type Name Description
T

Stream type

+
Streamstream

Stream

+
IStreamSerializerobj

Object

+
CancellationTokencancellationToken

Cancellation token

+
Returns
+ + + + + + + + + + + + + +
TypeDescription
Task
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

-

Write

+ +

WriteSerializedData(Stream, Byte[], Int32, ArrayPool<Byte>)

+

Write serialized Data

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
+public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null)
Parameters
@@ -17620,15 +18604,21 @@
Parameters
- - - + + - - - + + + + + + + @@ -17643,28 +18633,28 @@
Returns
- - + +
IStreamSerializerobj

Object

+
System.Byte[]data

Serialized data

CancellationTokencancellationToken

Cancellation token

+
System.Int32len

Data length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool (data will returned to that pool)

TaskStream

Stream

+
| - Improve this Doc + Improve this Doc - View Source + View Source - -

WriteSerializedNullable<T>(T, IStreamSerializer)

-

Write

+ +

WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool<Byte>, CancellationToken)

+

Write serialized Data

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteSerializedNullable<T>(this T stream, IStreamSerializer obj)
-    where T : Stream
+public static async Task WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
Parameters
@@ -17677,15 +18667,33 @@
Parameters
- + - - - + + + + + + + + + + + + + + + + + @@ -17700,34 +18708,74 @@
Returns
- + + + + +
TStream stream

Stream

IStreamSerializerobj

Object

+
System.Byte[]data

Serialized data

+
System.Int32len

Data length in bytes

+
System.Buffers.ArrayPool<System.Byte>pool

Array pool (data will returned to that pool)

+
CancellationTokencancellationToken

Cancellation token

TTask
+ + | + Improve this Doc + + + View Source + + +

WriteSerializedNullable(Stream, IStreamSerializer)

+

Write

+
+
+
Declaration
+
+
[TargetedPatchingOptOut("Tiny method")]
+public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer obj)
+
+
Parameters
+ + + + + + + + + + + + + + + + +
TypeNameDescription
Streamstream

Stream

+
IStreamSerializerobj

Object

-
Type Parameters
+
Returns
- + - - +
NameType Description
T

Stream type

+
Stream

Stream

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

@@ -17737,7 +18785,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
+public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
Parameters
@@ -17786,21 +18834,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteSerializerVersion<T>(T)

+

WriteSerializerVersion(Stream)

Write the serializer version

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteSerializerVersion<T>(this T stream)
-    where T : Stream
+public static Stream WriteSerializerVersion(this Stream stream)
Parameters
@@ -17813,7 +18860,7 @@
Parameters
- + @@ -17830,34 +18877,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteSerializerVersionAsync(Stream, CancellationToken)

@@ -17910,20 +18941,19 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteStream<T>(T, Stream, ArrayPool<Byte>, Nullable<Int32>)

+

WriteStream(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>)

Write a stream

Declaration
-
public static T WriteStream<T>(this T stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null)
-    where T : Stream
+
public static Stream WriteStream(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null)
Parameters
@@ -17936,7 +18966,7 @@
Parameters
- + @@ -17971,34 +19001,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteStreamAsync(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

@@ -18007,7 +19021,7 @@

Declaration
-
public static async Task WriteStreamAsync(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
+
public static Task WriteStreamAsync(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
Parameters
@@ -18068,21 +19082,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteStreamNullable<T>(T, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>)

+

WriteStreamNullable(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>)

Write a stream

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteStreamNullable<T>(this T stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null)
-    where T : Stream
+public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null)
Parameters
@@ -18095,7 +19108,7 @@
Parameters
- + @@ -18130,34 +19143,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteStreamNullableAsync(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

@@ -18167,7 +19164,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteStreamNullableAsync(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
+public static Task WriteStreamNullableAsync(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
Parameters
@@ -18229,21 +19226,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteString<T>(T, String)

+

WriteString(Stream, String)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteString<T>(this T stream, string value)
-    where T : Stream
+public static Stream WriteString(this Stream stream, string value)
Parameters
@@ -18256,7 +19252,7 @@
Parameters
- + @@ -18279,45 +19275,28 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteString16<T>(T, String)

+

WriteString16(Stream, String)

Write UTF-16 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteString16<T>(this T stream, string value)
-    where T : Stream
+public static Stream WriteString16(this Stream stream, string value)
Parameters
@@ -18330,7 +19309,7 @@
Parameters
- + @@ -18353,34 +19332,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteString16Async(Stream, String, CancellationToken)

@@ -18390,7 +19353,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = null)
+public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = null)
Parameters
@@ -18439,21 +19402,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteString16Nullable<T>(T, String)

+

WriteString16Nullable<T>(Stream, String)

Write UTF-16 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteString16Nullable<T>(this T stream, string value)
-    where T : Stream
+public static Stream WriteString16Nullable<T>(this Stream stream, string value)
Parameters
@@ -18466,7 +19428,7 @@
Parameters
- + @@ -18489,7 +19451,7 @@
Returns
- + @@ -18506,17 +19468,16 @@
Type Parameters
- +
TStream stream

Stream

TStream

Stream

T

Stream type

-
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteString16NullableAsync(Stream, String, CancellationToken)

@@ -18526,7 +19487,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteString16NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
+public static Task WriteString16NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
Parameters
@@ -18575,21 +19536,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteString32<T>(T, String)

+

WriteString32(Stream, String)

Write UTF-32 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteString32<T>(this T stream, string value)
-    where T : Stream
+public static Stream WriteString32(this Stream stream, string value)
Parameters
@@ -18602,7 +19562,7 @@
Parameters
- + @@ -18625,34 +19585,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteString32Async(Stream, String, CancellationToken)

@@ -18662,7 +19606,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = null)
+public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = null)
Parameters
@@ -18711,21 +19655,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteString32Nullable<T>(T, String)

+

WriteString32Nullable(Stream, String)

Write UTF-32 (little endian) string

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteString32Nullable<T>(this T stream, string value)
-    where T : Stream
+public static Stream WriteString32Nullable(this Stream stream, string value)
Parameters
@@ -18738,7 +19681,7 @@
Parameters
- + @@ -18761,34 +19704,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteString32NullableAsync(Stream, String, CancellationToken)

@@ -18798,7 +19725,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteString32NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
+public static Task WriteString32NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
Parameters
@@ -18847,10 +19774,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

WriteStringAsync(Stream, String, CancellationToken)

@@ -18860,7 +19787,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
+public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
Parameters
@@ -18909,21 +19836,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteStringNullable<T>(T, String)

+

WriteStringNullable(Stream, String)

Write

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static T WriteStringNullable<T>(this T stream, string value)
-    where T : Stream
+public static Stream WriteStringNullable(this Stream stream, string value)
Parameters
@@ -18936,7 +19862,7 @@
Parameters
- + @@ -18959,34 +19885,18 @@
Returns
- + - - -
TStream stream

Stream

TStream

Stream

-
-
Type Parameters
- - - - - - - - - - -
NameDescription
T

Stream type

| - Improve this Doc + Improve this Doc - View Source + View Source

WriteStringNullableAsync(Stream, String, CancellationToken)

@@ -18996,7 +19906,7 @@

Declaration

[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteStringNullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
+public static Task WriteStringNullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
Parameters
@@ -19045,21 +19955,20 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteStruct<tStream, tStruct>(tStream, tStruct, Boolean)

+

WriteStruct(Stream, Object, Boolean)

Write a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteStruct<tStream, tStruct>(this tStream stream, tStruct value, bool forceLittleEndian = true)
-    where tStream : Stream where tStruct : struct
+public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true)
Parameters
@@ -19072,13 +19981,13 @@
Parameters
- + - + @@ -19101,50 +20010,28 @@
Returns
- + - - -
tStreamStream stream

Stream

tStructSystem.Object value

Struct

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tStruct

Struct type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteStructAsync<tStream, tStruct>(tStream, tStruct, Boolean, CancellationToken)

+

WriteStructAsync(Stream, Object, Boolean, CancellationToken)

Write a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static Task WriteStructAsync<tStream, tStruct>(this tStream stream, tStruct value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
-    where tStream : Stream where tStruct : struct
+public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
Parameters
@@ -19157,13 +20044,13 @@
Parameters
- + - + @@ -19197,44 +20084,22 @@
Returns
tStreamStream stream

Stream

tStructSystem.Object value

Struct

-
Type Parameters
- - - - - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tStruct

Struct type

-
| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteStructNullable<tStream, tStruct>(tStream, Nullable<tStruct>, Boolean)

+

WriteStructNullable(Stream, Object, Boolean)

Write a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static tStream WriteStructNullable<tStream, tStruct>(this tStream stream, tStruct? value, bool forceLittleEndian = true)
-    where tStream : Stream where tStruct : struct
+public static Stream WriteStructNullable(this Stream stream, object value, bool forceLittleEndian = true)
Parameters
@@ -19247,13 +20112,13 @@
Parameters
- + - + @@ -19276,50 +20141,28 @@
Returns
- + - - -
tStreamStream stream

Stream

System.Nullable<tStruct>System.Object value

Struct

tStreamStream

Stream

-
-
Type Parameters
- - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tStruct

Struct type

| - Improve this Doc + Improve this Doc - View Source + View Source -

WriteStructNullableAsync<tStream, tStruct>(tStream, Nullable<tStruct>, Boolean, CancellationToken)

+

WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken)

Write a struct

Declaration
[TargetedPatchingOptOut("Tiny method")]
-public static async Task WriteStructNullableAsync<tStream, tStruct>(this tStream stream, tStruct? value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
-    where tStream : Stream where tStruct : struct
+public static Task WriteStructNullableAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
Parameters
@@ -19332,13 +20175,13 @@
Parameters
- + - + @@ -19372,27 +20215,6 @@
Returns
tStreamStream stream

Stream

System.Nullable<tStruct>System.Object value

Struct

-
Type Parameters
- - - - - - - - - - - - - - - - - -
NameDescription
tStream

Stream type

-
tStruct

Struct type

-
@@ -19401,10 +20223,10 @@
Type Parameters
diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html index 78df88d..c7ed7cc 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html @@ -151,7 +151,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -161,10 +161,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html index 36711e6..1c91d7c 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html @@ -138,7 +138,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -148,10 +148,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html index 076b069..2955e76 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html @@ -145,7 +145,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -155,10 +155,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html index 34621e7..fef1466 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html @@ -111,7 +111,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -121,10 +121,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html index bd3a761..3f83040 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html @@ -111,7 +111,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -121,10 +121,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html index 114bf8c..2b41942 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html @@ -111,7 +111,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -121,10 +121,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html index f937a0e..7508835 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html @@ -111,7 +111,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -121,10 +121,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html index bd39ff4..768e696 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html @@ -111,7 +111,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -121,10 +121,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html index 23fbbf5..5738d49 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html @@ -111,7 +111,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -121,10 +121,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html index 910de98..a91ce67 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html @@ -117,7 +117,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
@@ -127,10 +127,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html index 0532542..8667819 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -115,10 +115,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

AllowedTypes

Allowed (non-array) types

@@ -145,10 +145,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

AsyncDeserializer

Deserializer

@@ -175,10 +175,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

AsyncSerializer

Serializer

@@ -205,10 +205,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

SyncDeserializer

Deserializer

@@ -235,10 +235,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

SyncObject

An object for thread locking

@@ -265,10 +265,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

SyncSerializer

Serializer

@@ -295,10 +295,10 @@
Field Value
| - Improve this Doc + Improve this Doc - View Source + View Source

VERSION

Version number

@@ -306,7 +306,7 @@

Declaration
-
public const int VERSION = 2
+
public const int VERSION = 3
Field Value
@@ -327,10 +327,10 @@

Properties

| - Improve this Doc + Improve this Doc - View Source + View Source

BufferPool

@@ -358,10 +358,10 @@
Property Value
| - Improve this Doc + Improve this Doc - View Source + View Source

Version

@@ -391,10 +391,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

FindAsyncDeserializer(Type)

@@ -441,10 +441,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

FindAsyncSerializer(Type)

@@ -491,13 +491,13 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source -

FindDelegateType(Type, IEnumerable<Type>)

+

FindDelegateType(Type, IEnumerable<Type>)

Find a delegate type

@@ -522,7 +522,7 @@
Parameters
- IEnumerable<Type> + System.Collections.IEnumerable<Type> types

Types

@@ -547,10 +547,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

FindDeserializer(Type)

@@ -597,10 +597,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

FindSerializer(Type)

@@ -647,10 +647,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IsTypeAllowed(Type)

@@ -697,10 +697,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

LoadType(String)

@@ -741,80 +741,6 @@
Returns
Type

Type

- - - - - - | - Improve this Doc - - - View Source - - -

StreamDeserializer(Stream, Type, Int32, ISerializerOptions, CancellationToken)

-

Asynchronous stream deserializer

-
-
-
Declaration
-
-
public static async Task<Stream> StreamDeserializer(Stream stream, Type type, int version, ISerializerOptions options, CancellationToken cancellationToken)
-
-
Parameters
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeNameDescription
Streamstream

Stream

-
Typetype

Requested return type

-
System.Int32version

Serializer version

-
ISerializerOptionsoptions

Options

-
CancellationTokencancellationToken

Cancellation token

-
-
Returns
- - - - - - - - - - - @@ -823,10 +749,10 @@

Events

| - Improve this Doc + Improve this Doc - View Source + View Source

OnFindAsyncDeserializer

Raised when finding a deserializer

@@ -853,10 +779,10 @@
Event Type
TypeDescription
Task<Stream>

File stream

| - Improve this Doc + Improve this Doc - View Source + View Source

OnFindAsyncSerializer

Raised when finding a serializer

@@ -883,10 +809,10 @@
Event Type
| - Improve this Doc + Improve this Doc - View Source + View Source

OnFindSyncDeserializer

Raised when finding a deserializer

@@ -913,10 +839,10 @@
Event Type
| - Improve this Doc + Improve this Doc - View Source + View Source

OnFindSyncSerializer

Raised when finding a serializer

@@ -943,10 +869,10 @@
Event Type
| - Improve this Doc + Improve this Doc - View Source + View Source

OnInit

Raised on initialization

@@ -973,10 +899,10 @@
Event Type
| - Improve this Doc + Improve this Doc - View Source + View Source

OnLoadType

Raised on loading a type

@@ -1009,10 +935,10 @@
Event Type
diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html index 952e125..299a7b9 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html @@ -157,7 +157,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html index 8d6a225..a445e01 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html @@ -157,7 +157,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html index 26639ee..fd41be3 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html @@ -1080,7 +1080,7 @@

Declaration
-
public static IEnumerable<PropertyInfo> GetReadProperties(Type type, int? version)
+
public static IEnumerable<PropertyInfoExt> GetReadProperties(Type type, int? version)
Parameters
@@ -1116,7 +1116,7 @@
Returns
- + @@ -1446,7 +1446,7 @@

Declaration
-
public static IEnumerable<PropertyInfo> GetWriteProperties(Type type, int? version = null)
+
public static IEnumerable<PropertyInfoExt> GetWriteProperties(Type type, int? version = null)
Parameters
IEnumerable<System.Reflection.PropertyInfo>IEnumerable<PropertyInfoExt>

Properties

@@ -1482,7 +1482,7 @@
Returns
- + @@ -1635,7 +1635,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html index f99cc21..55027be 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html @@ -79,64 +79,28 @@

Inheritance
System.Object
-
wan24.ObjectValidation.ValidatableObjectBase
-
StreamSerializerBase
- +
StreamSerializerBase
+
Implements
-
wan24.ObjectValidation.IObjectValidatable
-
System.ComponentModel.DataAnnotations.IValidatableObject
-
-
Inherited Members
-
- wan24.ObjectValidation.ValidatableObjectBase.Validate(System.ComponentModel.DataAnnotations.ValidationContext) -
-
- wan24.ObjectValidation.ValidatableObjectBase.System.ComponentModel.DataAnnotations.IValidatableObject.Validate(System.ComponentModel.DataAnnotations.ValidationContext) -
-
- wan24.ObjectValidation.ValidatableObjectBase.ObjectValidatable(wan24.ObjectValidation.IObjectValidatable) -
-
- System.Object.Equals(System.Object) -
-
- System.Object.Equals(System.Object, System.Object) -
-
- System.Object.GetHashCode() -
-
- System.Object.GetType() -
-
- System.Object.MemberwiseClone() -
-
- System.Object.ReferenceEquals(System.Object, System.Object) -
-
- System.Object.ToString() -
-
Namespace: wan24.StreamSerializerExtensions
Assembly: StreamSerializerExtensions.dll
Syntax
-
public abstract class StreamSerializerBase : ValidatableObjectBase, IObjectValidatable, IValidatableObject, IStreamSerializerVersion, IStreamSerializer
+
public abstract class StreamSerializerBase : ValidatableObjectBase, IStreamSerializerVersion, IStreamSerializer

Constructors

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamSerializerBase(Stream, Int32, Nullable<Int32>)

@@ -179,10 +143,10 @@
Parameters
IEnumerable<System.Reflection.PropertyInfo>IEnumerable<PropertyInfoExt>

Properties

| - Improve this Doc + Improve this Doc - View Source + View Source

StreamSerializerBase(Nullable<Int32>)

@@ -215,10 +179,10 @@

Fields

| - Improve this Doc + Improve this Doc - View Source + View Source

BASE_VERSION

Base object version

@@ -247,10 +211,10 @@

Methods

| - Improve this Doc + Improve this Doc - View Source + View Source

Deserialize(Stream, Int32)

@@ -287,10 +251,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

DeserializeAsync(Stream, Int32, CancellationToken)

@@ -348,10 +312,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

Serialize(Stream)

@@ -382,10 +346,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

SerializeAsync(Stream, CancellationToken)

@@ -439,10 +403,10 @@

Explicit Interface Implementations

| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.Deserialize(Stream, Int32)

@@ -479,10 +443,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken)

@@ -540,10 +504,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.Serialize(Stream)

@@ -574,10 +538,10 @@
Parameters
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializer.SerializeAsync(Stream, CancellationToken)

@@ -629,10 +593,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializerVersion.ObjectVersion

@@ -660,10 +624,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializerVersion.SerializedObjectVersion

@@ -691,10 +655,10 @@
Returns
| - Improve this Doc + Improve this Doc - View Source + View Source

IStreamSerializerVersion.SerializerVersion

@@ -721,12 +685,6 @@
Returns

Implements

-
- wan24.ObjectValidation.IObjectValidatable -
-
- System.ComponentModel.DataAnnotations.IValidatableObject -
@@ -744,7 +702,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
SerializerHelper.ToBytes(IStreamSerializer, Boolean) @@ -757,10 +715,10 @@

Extension Methods

diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html index 847b6cc..cef98dd 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html @@ -120,7 +120,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo()
diff --git a/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html b/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html index 750f12d..f0c8b66 100644 --- a/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html +++ b/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html @@ -197,7 +197,7 @@

Extension Methods

SerializerHelper.GetObjectSerializerInfo(Object)
diff --git a/docs/manifest.json b/docs/manifest.json index 766195a..72462eb 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -9,7 +9,7 @@ "output": { ".html": { "relative_path": "api/index.html", - "hash": "y1tUVqzRhQ1FsTE6BsabmkJbhTh0UDcuFiqX75JojWk=" + "hash": "6pDlWe3ilkIWdFqho7yToB5y8HeidrKndYEWEtmAH3g=" } }, "is_incremental": false, @@ -33,7 +33,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html", - "hash": "R6StkhSDWirNJl76m8gCJBXe8g0+nsDeGWuPGjuK8cE=" + "hash": "TOCbuzMz9EW5xMASqOaxHjVW96ailgxZtLNwCr26zjo=" } }, "is_incremental": false, @@ -45,7 +45,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html", - "hash": "ckPJUWv9fs8kca04BwZ8j/LUqw2Kdu7LEPvhmS6qedE=" + "hash": "hHcVw3zMjdnZpd2Hoolh+dstQgRxVqIS4TQRnlKMOuY=" } }, "is_incremental": false, @@ -57,7 +57,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html", - "hash": "/yblOwaxROO7RELUXxMsiA4NNbzq9tuswEiCcFB3Z1s=" + "hash": "Sns2y/PQJ++7/g/UqvHTXWxsB8ioCxW6TiRRhaHCbG0=" } }, "is_incremental": false, @@ -69,7 +69,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html", - "hash": "ETsAoI6ObOnBw6HJziJmh+WSOUWdc/kzAagnGfh1ajM=" + "hash": "Uixq0FAIzkGxkYXHwyNrmqkmYw+pWLrxvStjjwprH3M=" } }, "is_incremental": false, @@ -81,7 +81,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html", - "hash": "V9SjMiyUx44ntZCzKjZZHaQyFhDds5pWYQ8pZ+3Kb3U=" + "hash": "hdOic9G+ZdU33/F+HnliYjg4loPDJkzobW6b1/Zz3AA=" } }, "is_incremental": false, @@ -93,7 +93,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html", - "hash": "N5b6Cn4EAfzUWeR0OspIEq7mG5WmNd7EDd4X4c5Z4GE=" + "hash": "3T5TSbcM3B/Hzesd2Tbo/MNG8aJP61r2wWRmYLw5O50=" } }, "is_incremental": false, @@ -105,7 +105,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html", - "hash": "RbE7MyD0/VkTROSogduRJSudfZsA0LGUc0SUWxLdrIs=" + "hash": "J+Y8rtYUYAJbnex80jqsroxbrq39WHkphJwYhwGy8cU=" } }, "is_incremental": false, @@ -117,7 +117,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html", - "hash": "jxseELK5Q5Qb+cmI/NECDLQv9Lg42IDAS8xC+7fGa34=" + "hash": "jJXnNVZ4ysuffgsGE8JFeSFtKqk4cBZry5Y+f5nBeSc=" } }, "is_incremental": false, @@ -129,7 +129,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html", - "hash": "qUilmC7U+rYbKnhCnTCrzkVILcAtyA/s9GF4lIoXx+c=" + "hash": "WMv9nrO8OaPB4s9F6Rj6jHTQvawwxZQrSduJJS2NRyo=" } }, "is_incremental": false, @@ -141,7 +141,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html", - "hash": "eO3SV6VG0Tpgs9G0IW6atN6jhj0Y0Xe7xIneMsRBBZg=" + "hash": "MtAVJyeuzh4vDZ7aoyaXQEHbjEDeyguwOpud6FqdZhI=" } }, "is_incremental": false, @@ -153,7 +153,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html", - "hash": "LNNskpq71EWugv+KoJPiKXZj9STzuJCMvAFkvbXWhDU=" + "hash": "qUnhJFPMHJ3kFYwPM8/EytmnD2QkNMrIX4vIoBV5GN4=" } }, "is_incremental": false, @@ -165,7 +165,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html", - "hash": "J7BhN41LGjmyShxq+jv1ZDm8OhbP33JG0tBzPH64oM4=" + "hash": "IlkdQWIpd2yadiZemDeW7Z2EGCZFVb2Oh3HcWK6ZWfQ=" } }, "is_incremental": false, @@ -177,7 +177,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html", - "hash": "yNv85j1btksBLzS7BY4E6IZfT/XK14EKuF7e3DMYx6w=" + "hash": "Cmgk0O+OhzvZZsF1Dsz01IgYkhn8TXeQ3V7lG0rC8UQ=" } }, "is_incremental": false, @@ -189,7 +189,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html", - "hash": "pmYRGO+NtKXN7d0LO1FyrmOIB1WLreltG2h1XqgMF7Y=" + "hash": "s6dKlDqeYNENuQim65WMktog0sZ0qCqrEu/jwvTA1Zc=" } }, "is_incremental": false, @@ -201,7 +201,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html", - "hash": "PwjWrNL8MYuDFZm1IfPcDsJSVHGfZLj+rFsJLCEJ404=" + "hash": "UJ34GERJXBfnsakejmgjzFlh3htLOdl0Xd8keZ9hM34=" } }, "is_incremental": false, @@ -213,7 +213,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html", - "hash": "to0nIc8voGGjhFuZe2e2byAfQ9v+eRTZ6pSBe04f6is=" + "hash": "F2kP43fUKNiA84013W8rcjzzUBnIW1Cs/3DYChAy59s=" } }, "is_incremental": false, @@ -225,7 +225,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html", - "hash": "JauzNetQ6Ng15gTF3RD/ny97UudIZmSsqMWkUr6Z43I=" + "hash": "Sdq6tTsrhUmBphC/Q7EUMg0pZNhTyuBesDyimEp99D4=" } }, "is_incremental": false, @@ -237,7 +237,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html", - "hash": "DFjyisIOABJ4cSIoPzXyAnt1JD1qXcRwQns14qRFp94=" + "hash": "dw1J5uFihxr2kn+SnrS96W1IsJvM7isO7QL2tIeQ8ro=" } }, "is_incremental": false, @@ -261,7 +261,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html", - "hash": "4BubP6hbkw5FmgQSyHfDGZlTgy+/1/Fj+bFA+CxLOmk=" + "hash": "MxQRcnXnqOCrP3wQt6H2CbNx+IhN4JdvE5wsHigiJ5o=" } }, "is_incremental": false, @@ -273,7 +273,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html", - "hash": "96iL2pCfoc07C28wadGtGVByGBCEGh5TfBegaZkC+HY=" + "hash": "UjHV4OYl0w2uNkuVNh/0WLGPbozYXVD6UWVnGKxIGBg=" } }, "is_incremental": false, @@ -285,7 +285,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ISerializerOptions.html", - "hash": "mxMM6F/3R3+hc6OP1OpSp5nmeGmFYoTJ2ICa//ruUWc=" + "hash": "ilRpuXKDFGPsngYh2h1ifnuuYuKSw+yFTy/Gg6PS7Es=" } }, "is_incremental": false, @@ -297,7 +297,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializer.html", - "hash": "gWuWTA9XCmnecl1DjvDhZQZ9WgUqRL6D0R8TAwvuNis=" + "hash": "eI6lGM1plhXldVK4rC8ytM99rJb8TgTlHXwe35bUi3s=" } }, "is_incremental": false, @@ -309,7 +309,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html", - "hash": "fHZhnug25W7rjkMHiAT2IPgs0Yg+Xv5MBViBjHm0AUk=" + "hash": "mEtLSm8XGlmS1PdxRQPkjmawRtkn/1unk5+U3eSMLiU=" } }, "is_incremental": false, @@ -321,7 +321,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.NumberTypes.html", - "hash": "7gDKv/e2xS222Sv1OfGmEdReJWOYttnNikOrd9rN3RE=" + "hash": "FvSX++vhTkrL+GsGx+dcU14ec3Je3fK9kPlkzXHdA3c=" } }, "is_incremental": false, @@ -333,7 +333,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ObjectTypes.html", - "hash": "hwmdshPXs3IpEay42YCNEDqpl/IFQNpEV2tbvi3iMUM=" + "hash": "pt+zGBD8aJ0jvXQo2LET4Nn5LMqqalKoA9J9z8e5ENc=" } }, "is_incremental": false, @@ -345,7 +345,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html", - "hash": "ilnD/Iak4Z3xXiaTsOureDE7WM0/bHXUd0Z5s6IALwQ=" + "hash": "AiwT9llb75KRGJR4vPO98tsBPMBmx6+pyR3P5nt7fmc=" } }, "is_incremental": false, @@ -357,7 +357,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerException.html", - "hash": "rrMG4Cgkc3oZV97DTFhC4Sd9/9/Vb0WABoZFrQ1vbKA=" + "hash": "QjXgAuU2M22/nVPKrbkxwUBZn4eWZ2MjQ9zYerHn70s=" } }, "is_incremental": false, @@ -369,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "au3P8ou36L9oxtZeaNuBKEBSsMP/mF2S3pbjMdZjNEs=" + "hash": "1zDQMHsge+8xYlyz3s/0mBW9Gf+BXGUL7c6MmSxwuLg=" } }, "is_incremental": false, @@ -381,7 +381,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html", - "hash": "2MUaxdH6wfbEUE1RIGmFRGRGDTlLvBb/FeVp+tLY7FE=" + "hash": "y0T7/DVtXkhFFEmQyde17D2U9PFKlShO4eg+/fXWsHE=" } }, "is_incremental": false, @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "lGnTNVSiqu7Y5zyi60T6oN0KySajBPDf8PrEApCuDEY=" + "hash": "vywSgLLABrh8DRk8Sdwi0sNVDQHzoqBx/pv6schnyiY=" } }, "is_incremental": false, @@ -405,7 +405,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html", - "hash": "Z8Lu+xNesSJCdsojm2qQsKwkOrlksqPzzaOGNz5A12g=" + "hash": "ghxSX6wJwGT4ZEdzKsuoZiLF8Zd2Ftc9ChaSUKxFkKk=" } }, "is_incremental": false, @@ -417,7 +417,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html", - "hash": "3b0erSBYe845BLHMBLV8Lmr7/1jQEcy/S37NCtihn2U=" + "hash": "aw4qpFELAOFdAzWvtmDbSaIlgyxH73Qh7JEZbpfRZOo=" } }, "is_incremental": false, @@ -429,7 +429,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html", - "hash": "/ygeolXDSPKtsBvGfTmSpYyIw/Ykfwsf7ss7D5K4rgg=" + "hash": "hnHiRb5Ygxna6QLy/Ch8e2UwmQIK1LR3ubWvE0uFYKg=" } }, "is_incremental": false, @@ -441,7 +441,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html", - "hash": "Mx+w2r6QdHUWbCIeHJ0ATQocFeEs2+XNFZnc7hBeU74=" + "hash": "Yv9Ym4TKoDkxCiLsRi3POWtRQ9h02eRwCZI+8I8NX2Y=" } }, "is_incremental": false, @@ -453,7 +453,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html", - "hash": "lIqL7OFNK6xa7VTyM2taiLMI18KZbPB0bN+2jalryrE=" + "hash": "Y+1WN+22TaAwl7ZCqmeHx6EG2OvUlKNw/ks6nzXXMng=" } }, "is_incremental": false, @@ -465,7 +465,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html", - "hash": "jPb/H1GGk1+eaVpuUiY4AcFzm329ROmyAl9a4nBJVlo=" + "hash": "5+q5/DOzq3OuxeKbLqRA2/s1BkfqXiyKlbm0P3HBTNc=" } }, "is_incremental": false, @@ -477,7 +477,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html", - "hash": "RwXtYxRCXoi6TegaJXR63qI0qTpkUNF1gSTtvtOsCTc=" + "hash": "orzzLi6ZcVE3mbj6/NU8vA4wrwhTgaH6higm/lXYDd0=" } }, "is_incremental": false, @@ -489,7 +489,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html", - "hash": "QFsV8nLwvINWulJVdmIegjb73IyYrVddY/Qo6q01q0U=" + "hash": "Sq/Ifqpp2PU3EMM3n/daPOZk0OC9X1s324U17VrqTyQ=" } }, "is_incremental": false, @@ -501,7 +501,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html", - "hash": "8TMyn1/yHx/EwmMkHN/sOfe1eswzgIjjxokIXSKFZ1c=" + "hash": "zmm4UL5bTLgsBC63uXqUqZPN2cnjG8GEkmbe3mHlW9Y=" } }, "is_incremental": false, @@ -513,7 +513,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html", - "hash": "x8PxfPlxsHV7XJwPbevNvpluh6R6BbRQ5W8wYn2a0XQ=" + "hash": "wJvfdIZxVrkWwvXE2EDvGUoFxfqFm4HPg/24qpA+cnU=" } }, "is_incremental": false, @@ -525,7 +525,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "2UqQD+PwTMZ4kER9OlNenEdSkHYxYLYIdnVIZoVVe0I=" + "hash": "xh6PtWY/+SQ3Ii4u+VQXT/8J5+3uVPMUwQd9vW+VmV8=" } }, "is_incremental": false, @@ -537,7 +537,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html", - "hash": "lxr4mQyBZk8f1wLHGgllapR/jorzQ6uQ8r+ISnShCxw=" + "hash": "V0Fn2XZxU7KbmU3j1TbVpn/FQ11RmJ7Gf90JMqdieHs=" } }, "is_incremental": false, @@ -549,7 +549,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html", - "hash": "/IfPkMYiCCcSGN8T7ZgyzFuf6iqd4ERx5D62jqUnCIM=" + "hash": "FylKxfWvU4V6lNqNOxLSS90hE/sG1o6FO9ydDvGyqkM=" } }, "is_incremental": false, @@ -561,7 +561,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html", - "hash": "/D3k62aY4/jQpEAT+X9PC9VLnvJt9kOWVZS781WtDkg=" + "hash": "KjMFow82U9ejIVT5i1ypiEF0HREQPYlBU6hNXdxZWbo=" } }, "is_incremental": false, @@ -573,7 +573,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html", - "hash": "TZMUtz9nfv+u9Bp6UC3bO0t7+k6FGjb3vDrFhcbxElU=" + "hash": "hPxOJHk0gapXfxaY4whuPCeKBFK+KihUX0o5Qes/FzM=" } }, "is_incremental": false, @@ -585,7 +585,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerBase.html", - "hash": "mpYV5LFl/G+d4zCFHbmRBYSi4Fjoc5yxEQwSPI9PT3Q=" + "hash": "hPdmbjSGW0e/o1FwFfrVsC6LjnqIsz/7znXF4BjX3dY=" } }, "is_incremental": false, @@ -597,7 +597,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerModes.html", - "hash": "3+8XKX9EjFpdTC+yht5ol6zh/bE83RNH9xqywOQxIBo=" + "hash": "D2WEUdyNgLVnf9UC5S90hHeHHiB/GPzXsIsgX3Dp000=" } }, "is_incremental": false, @@ -609,7 +609,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html", - "hash": "ncKgk8j7f2KfQou33lpmIh8rrTQts53cyc2bvRHCl9w=" + "hash": "+c9HJJ9/eZtzoa9MxxSwpn5csRwENatqKHOFtWR1FYc=" } }, "is_incremental": false, @@ -633,7 +633,7 @@ "output": { ".html": { "relative_path": "articles/intro.html", - "hash": "pHue7mNcMUyCoQ3x6yUSoKLnvVWG57+H8jHHsCT6w5Y=" + "hash": "6W/AuNFxl7jOrleuw2b5EeERMSpPSZV8QR4SuBYsaSU=" } }, "is_incremental": false, @@ -657,7 +657,7 @@ "output": { ".html": { "relative_path": "index.html", - "hash": "HFs69W1ioFN3N15xqYOZ26CxRalSRkJHIuMQeFSr4l0=" + "hash": "5MFSMr8Kd/304qSCF8Rxpq9BsAVJQBq8137W2w8ozA8=" } }, "is_incremental": false, diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index da98876..9701b73 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -322,12 +322,12 @@ references: commentId: T:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo nameWithType: AutoStreamSerializerInfo -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(System.Reflection.PropertyInfo) - name: AutoStreamSerializerInfo(PropertyInfo) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo__ctor_System_Reflection_PropertyInfo_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(System.Reflection.PropertyInfo) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AutoStreamSerializerInfo(System.Reflection.PropertyInfo) - nameWithType: AutoStreamSerializerInfo.AutoStreamSerializerInfo(PropertyInfo) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(PropertyInfoExt) + name: AutoStreamSerializerInfo(PropertyInfoExt) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo__ctor_PropertyInfoExt_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(PropertyInfoExt) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AutoStreamSerializerInfo(PropertyInfoExt) + nameWithType: AutoStreamSerializerInfo.AutoStreamSerializerInfo(PropertyInfoExt) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor* name: AutoStreamSerializerInfo href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo__ctor_ @@ -409,13 +409,13 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync nameWithType: AutoStreamSerializerInfo.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,System.Threading.CancellationToken) name: DeserializeAsync(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_DeserializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,CancellationToken) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_DeserializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Int32_System_Threading_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,System.Threading.CancellationToken) name.vb: DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, CancellationToken) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, System.Threading.CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, System.Threading.CancellationToken) nameWithType: AutoStreamSerializerInfo.DeserializeAsync(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) nameWithType.vb: AutoStreamSerializerInfo.DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer @@ -486,13 +486,13 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync nameWithType: AutoStreamSerializerInfo.SerializeAsync -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Threading.CancellationToken) name: SerializeAsync(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_SerializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,CancellationToken) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_SerializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Threading_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Threading.CancellationToken) name.vb: SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, CancellationToken) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Threading.CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Threading.CancellationToken) nameWithType: AutoStreamSerializerInfo.SerializeAsync(IAutoStreamSerializerConfig, T, Stream, CancellationToken) nameWithType.vb: AutoStreamSerializerInfo.SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer @@ -2120,6 +2120,53 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerException.SerializerException nameWithType: SerializerException.SerializerException +- uid: wan24.StreamSerializerExtensions.SerializerException.Wrap(Action,System.String) + name: Wrap(Action, String) + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_Wrap_Action_System_String_ + commentId: M:wan24.StreamSerializerExtensions.SerializerException.Wrap(Action,System.String) + fullName: wan24.StreamSerializerExtensions.SerializerException.Wrap(Action, System.String) + nameWithType: SerializerException.Wrap(Action, String) +- uid: wan24.StreamSerializerExtensions.SerializerException.Wrap* + name: Wrap + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_Wrap_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerException.Wrap + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerException.Wrap + nameWithType: SerializerException.Wrap +- uid: wan24.StreamSerializerExtensions.SerializerException.Wrap``1(Func{``0},System.String) + name: Wrap(Func, String) + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_Wrap__1_Func___0__System_String_ + commentId: M:wan24.StreamSerializerExtensions.SerializerException.Wrap``1(Func{``0},System.String) + name.vb: Wrap(Of T)(Func(Of T), String) + fullName: wan24.StreamSerializerExtensions.SerializerException.Wrap(Func, System.String) + fullName.vb: wan24.StreamSerializerExtensions.SerializerException.Wrap(Of T)(Func(Of T), System.String) + nameWithType: SerializerException.Wrap(Func, String) + nameWithType.vb: SerializerException.Wrap(Of T)(Func(Of T), String) +- uid: wan24.StreamSerializerExtensions.SerializerException.WrapAsync(Func{Task},System.String) + name: WrapAsync(Func, String) + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_WrapAsync_Func_Task__System_String_ + commentId: M:wan24.StreamSerializerExtensions.SerializerException.WrapAsync(Func{Task},System.String) + name.vb: WrapAsync(Func(Of Task), String) + fullName: wan24.StreamSerializerExtensions.SerializerException.WrapAsync(Func, System.String) + fullName.vb: wan24.StreamSerializerExtensions.SerializerException.WrapAsync(Func(Of Task), System.String) + nameWithType: SerializerException.WrapAsync(Func, String) + nameWithType.vb: SerializerException.WrapAsync(Func(Of Task), String) +- uid: wan24.StreamSerializerExtensions.SerializerException.WrapAsync* + name: WrapAsync + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_WrapAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerException.WrapAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerException.WrapAsync + nameWithType: SerializerException.WrapAsync +- uid: wan24.StreamSerializerExtensions.SerializerException.WrapAsync``1(Func{Task{``0}},System.String) + name: WrapAsync(Func>, String) + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_WrapAsync__1_Func_Task___0___System_String_ + commentId: M:wan24.StreamSerializerExtensions.SerializerException.WrapAsync``1(Func{Task{``0}},System.String) + name.vb: WrapAsync(Of T)(Func(Of Task(Of T)), String) + fullName: wan24.StreamSerializerExtensions.SerializerException.WrapAsync(Func>, System.String) + fullName.vb: wan24.StreamSerializerExtensions.SerializerException.WrapAsync(Of T)(Func(Of Task(Of T)), System.String) + nameWithType: SerializerException.WrapAsync(Func>, String) + nameWithType.vb: SerializerException.WrapAsync(Of T)(Func(Of Task(Of T)), String) - uid: wan24.StreamSerializerExtensions.SerializerHelper name: SerializerHelper href: api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -2394,22 +2441,22 @@ references: fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.ToObject(Of T)(System.Byte(), System.Boolean) nameWithType: SerializerHelper.ToObject(Byte[], Boolean) nameWithType.vb: SerializerHelper.ToObject(Of T)(Byte(), Boolean) -- uid: wan24.StreamSerializerExtensions.SerializerHelper.ValidateObject* - name: ValidateObject - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_ValidateObject_ - commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.ValidateObject - isSpec: "True" - fullName: wan24.StreamSerializerExtensions.SerializerHelper.ValidateObject - nameWithType: SerializerHelper.ValidateObject -- uid: wan24.StreamSerializerExtensions.SerializerHelper.ValidateObject``1(``0) - name: ValidateObject(T) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_ValidateObject__1___0_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.ValidateObject``1(``0) - name.vb: ValidateObject(Of T)(T) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.ValidateObject(T) - fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.ValidateObject(Of T)(T) - nameWithType: SerializerHelper.ValidateObject(T) - nameWithType.vb: SerializerHelper.ValidateObject(Of T)(T) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.ValidateDeserializedObject* + name: ValidateDeserializedObject + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_ValidateDeserializedObject_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.ValidateDeserializedObject + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.ValidateDeserializedObject + nameWithType: SerializerHelper.ValidateDeserializedObject +- uid: wan24.StreamSerializerExtensions.SerializerHelper.ValidateDeserializedObject``1(``0) + name: ValidateDeserializedObject(T) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_ValidateDeserializedObject__1___0_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.ValidateDeserializedObject``1(``0) + name.vb: ValidateDeserializedObject(Of T)(T) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.ValidateDeserializedObject(T) + fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.ValidateDeserializedObject(Of T)(T) + nameWithType: SerializerHelper.ValidateDeserializedObject(T) + nameWithType.vb: SerializerHelper.ValidateDeserializedObject(Of T)(T) - uid: wan24.StreamSerializerExtensions.SerializerOptionsBase name: SerializerOptionsBase href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html @@ -2694,18 +2741,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync nameWithType: StreamExtensions.ReadAnyAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsyncMethod - name: ReadAnyAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsyncMethod - nameWithType: StreamExtensions.ReadAnyAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyMethod - name: ReadAnyMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyMethod - nameWithType: StreamExtensions.ReadAnyMethod - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) name: ReadAnyNullable(Stream, Nullable, ISerializerOptions) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullable_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ @@ -2738,18 +2773,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync nameWithType: StreamExtensions.ReadAnyNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsyncMethod - name: ReadAnyNullableAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullableAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsyncMethod - nameWithType: StreamExtensions.ReadAnyNullableAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableMethod - name: ReadAnyNullableMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullableMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableMethod - nameWithType: StreamExtensions.ReadAnyNullableMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream,Type,System.Nullable{System.Int32}) + name: ReadAnyObject(Stream, Type, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObject_Stream_Type_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream,Type,System.Nullable{System.Int32}) + name.vb: ReadAnyObject(Stream, Type, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream, Type, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream, Type, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.ReadAnyObject(Stream, Type, Nullable) + nameWithType.vb: StreamExtensions.ReadAnyObject(Stream, Type, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject* name: ReadAnyObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObject_ @@ -2766,6 +2798,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Of T)(Stream, System.Nullable(Of System.Int32)) nameWithType: StreamExtensions.ReadAnyObject(Stream, Nullable) nameWithType.vb: StreamExtensions.ReadAnyObject(Of T)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) + name: ReadAnyObjectAsync(Stream, Type, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectAsync_Stream_Type_System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) + name.vb: ReadAnyObjectAsync(Stream, Type, Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream, Type, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream, Type, System.Nullable(Of System.Int32), CancellationToken) + nameWithType: StreamExtensions.ReadAnyObjectAsync(Stream, Type, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.ReadAnyObjectAsync(Stream, Type, Nullable(Of Int32), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync* name: ReadAnyObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectAsync_ @@ -2782,6 +2823,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) nameWithType: StreamExtensions.ReadAnyObjectAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.ReadAnyObjectAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream,Type,System.Nullable{System.Int32}) + name: ReadAnyObjectNullable(Stream, Type, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullable_Stream_Type_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream,Type,System.Nullable{System.Int32}) + name.vb: ReadAnyObjectNullable(Stream, Type, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream, Type, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream, Type, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.ReadAnyObjectNullable(Stream, Type, Nullable) + nameWithType.vb: StreamExtensions.ReadAnyObjectNullable(Stream, Type, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable* name: ReadAnyObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullable_ @@ -2798,6 +2848,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Of T)(Stream, System.Nullable(Of System.Int32)) nameWithType: StreamExtensions.ReadAnyObjectNullable(Stream, Nullable) nameWithType.vb: StreamExtensions.ReadAnyObjectNullable(Of T)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) + name: ReadAnyObjectNullableAsync(Stream, Type, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullableAsync_Stream_Type_System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) + name.vb: ReadAnyObjectNullableAsync(Stream, Type, Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, System.Nullable(Of System.Int32), CancellationToken) + nameWithType: StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, Nullable(Of Int32), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync* name: ReadAnyObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullableAsync_ @@ -2814,6 +2873,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) nameWithType: StreamExtensions.ReadAnyObjectNullableAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.ReadAnyObjectNullableAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadArray(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArray_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadArray(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadArray(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadArray(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray* name: ReadArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArray_ @@ -2830,6 +2898,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadArray(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadArray(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadArrayAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadArrayAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadArrayAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadArrayAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync* name: ReadArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsync_ @@ -2846,18 +2923,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) nameWithType: StreamExtensions.ReadArrayAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) nameWithType.vb: StreamExtensions.ReadArrayAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsyncMethod - name: ReadArrayAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsyncMethod - nameWithType: StreamExtensions.ReadArrayAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayMethod - name: ReadArrayMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayMethod - nameWithType: StreamExtensions.ReadArrayMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadArrayNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadArrayNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadArrayNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadArrayNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable* name: ReadArrayNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullable_ @@ -2874,6 +2948,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadArrayNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadArrayNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadArrayNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadArrayNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadArrayNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadArrayNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync* name: ReadArrayNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullableAsync_ @@ -3082,6 +3165,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync nameWithType: StreamExtensions.ReadDecimalNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadDict(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDict_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadDict(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadDict(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadDict(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict* name: ReadDict href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDict_ @@ -3098,6 +3190,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Of tKey, tValue)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadDict(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadDict(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadDictAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadDictAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadDictAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadDictAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync* name: ReadDictAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsync_ @@ -3114,18 +3215,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Of tKey, tValue)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) nameWithType: StreamExtensions.ReadDictAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) nameWithType.vb: StreamExtensions.ReadDictAsync(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsyncMethod - name: ReadDictAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsyncMethod - nameWithType: StreamExtensions.ReadDictAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictMethod - name: ReadDictMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictMethod - nameWithType: StreamExtensions.ReadDictMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadDictNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadDictNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadDictNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadDictNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable* name: ReadDictNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullable_ @@ -3142,6 +3240,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Of tKey, tValue)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadDictNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadDictNullable(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadDictNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadDictNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadDictNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadDictNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync* name: ReadDictNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullableAsync_ @@ -3222,6 +3329,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync nameWithType: StreamExtensions.ReadDoubleNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name: ReadEnum(Stream, Type, Nullable, ArrayPool) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnum_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name.vb: ReadEnum(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream, Type, System.Nullable, System.Buffers.ArrayPool) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) + nameWithType: StreamExtensions.ReadEnum(Stream, Type, Nullable, ArrayPool) + nameWithType.vb: StreamExtensions.ReadEnum(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum* name: ReadEnum href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnum_ @@ -3238,6 +3354,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) nameWithType: StreamExtensions.ReadEnum(Stream, Nullable, ArrayPool) nameWithType.vb: StreamExtensions.ReadEnum(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name: ReadEnumAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name.vb: ReadEnumAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.ReadEnumAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + nameWithType.vb: StreamExtensions.ReadEnumAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync* name: ReadEnumAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsync_ @@ -3254,18 +3379,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) nameWithType: StreamExtensions.ReadEnumAsync(Stream, Nullable, ArrayPool, CancellationToken) nameWithType.vb: StreamExtensions.ReadEnumAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsyncMethod - name: ReadEnumAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsyncMethod - nameWithType: StreamExtensions.ReadEnumAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumMethod - name: ReadEnumMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumMethod - nameWithType: StreamExtensions.ReadEnumMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name: ReadEnumNullable(Stream, Type, Nullable, ArrayPool) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name.vb: ReadEnumNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) + nameWithType: StreamExtensions.ReadEnumNullable(Stream, Type, Nullable, ArrayPool) + nameWithType.vb: StreamExtensions.ReadEnumNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable* name: ReadEnumNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullable_ @@ -3282,6 +3404,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) nameWithType: StreamExtensions.ReadEnumNullable(Stream, Nullable, ArrayPool) nameWithType.vb: StreamExtensions.ReadEnumNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name: ReadEnumNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name.vb: ReadEnumNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.ReadEnumNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + nameWithType.vb: StreamExtensions.ReadEnumNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync* name: ReadEnumNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullableAsync_ @@ -3458,6 +3589,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync nameWithType: StreamExtensions.ReadIntNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadList(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadList_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadList(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadList(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadList(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadList* name: ReadList href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadList_ @@ -3474,6 +3614,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadList(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadList(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadListAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadListAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadListAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadListAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync* name: ReadListAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsync_ @@ -3490,18 +3639,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) nameWithType: StreamExtensions.ReadListAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) nameWithType.vb: StreamExtensions.ReadListAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsyncMethod - name: ReadListAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsyncMethod - nameWithType: StreamExtensions.ReadListAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListMethod - name: ReadListMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadListMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListMethod - nameWithType: StreamExtensions.ReadListMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadListNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadListNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadListNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadListNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable* name: ReadListNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullable_ @@ -3518,6 +3664,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadListNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadListNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadListNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadListNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadListNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadListNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync* name: ReadListNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullableAsync_ @@ -3598,6 +3753,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync nameWithType: StreamExtensions.ReadLongNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name: ReadNumber(Stream, Type, Nullable, ArrayPool) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumber_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name.vb: ReadNumber(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream, Type, System.Nullable, System.Buffers.ArrayPool) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) + nameWithType: StreamExtensions.ReadNumber(Stream, Type, Nullable, ArrayPool) + nameWithType.vb: StreamExtensions.ReadNumber(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber* name: ReadNumber href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumber_ @@ -3614,6 +3778,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) nameWithType: StreamExtensions.ReadNumber(Stream, Nullable, ArrayPool) nameWithType.vb: StreamExtensions.ReadNumber(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name: ReadNumberAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name.vb: ReadNumberAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.ReadNumberAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + nameWithType.vb: StreamExtensions.ReadNumberAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync* name: ReadNumberAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsync_ @@ -3630,30 +3803,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) nameWithType: StreamExtensions.ReadNumberAsync(Stream, Nullable, ArrayPool, CancellationToken) nameWithType.vb: StreamExtensions.ReadNumberAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsyncMethod - name: ReadNumberAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsyncMethod - nameWithType: StreamExtensions.ReadNumberAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsyncMethod - name: ReadNumberIntAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberIntAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsyncMethod - nameWithType: StreamExtensions.ReadNumberIntAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntMethod - name: ReadNumberIntMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberIntMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntMethod - nameWithType: StreamExtensions.ReadNumberIntMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberMethod - name: ReadNumberMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberMethod - nameWithType: StreamExtensions.ReadNumberMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name: ReadNumberNullable(Stream, Type, Nullable, ArrayPool) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) + name.vb: ReadNumberNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) + nameWithType: StreamExtensions.ReadNumberNullable(Stream, Type, Nullable, ArrayPool) + nameWithType.vb: StreamExtensions.ReadNumberNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable* name: ReadNumberNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullable_ @@ -3670,6 +3828,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) nameWithType: StreamExtensions.ReadNumberNullable(Stream, Nullable, ArrayPool) nameWithType.vb: StreamExtensions.ReadNumberNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name: ReadNumberNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) + name.vb: ReadNumberNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.ReadNumberNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) + nameWithType.vb: StreamExtensions.ReadNumberNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync* name: ReadNumberNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullableAsync_ @@ -3686,6 +3853,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) nameWithType: StreamExtensions.ReadNumberNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) nameWithType.vb: StreamExtensions.ReadNumberNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadObject(Stream, Type, Nullable, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObject_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadObject(Stream, Type, Nullable(Of Int32), ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadObject(Stream, Type, Nullable, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadObject(Stream, Type, Nullable(Of Int32), ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject* name: ReadObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObject_ @@ -3702,6 +3878,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadObject(Stream, Nullable, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadObject(Of T)(Stream, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadObjectAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsync_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadObjectAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadObjectAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadObjectAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync* name: ReadObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsync_ @@ -3718,18 +3903,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) nameWithType: StreamExtensions.ReadObjectAsync(Stream, Nullable, ISerializerOptions, CancellationToken) nameWithType.vb: StreamExtensions.ReadObjectAsync(Of T)(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsyncMethod - name: ReadObjectAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsyncMethod - nameWithType: StreamExtensions.ReadObjectAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectMethod - name: ReadObjectMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectMethod - nameWithType: StreamExtensions.ReadObjectMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadObjectNullable(Stream, Type, Nullable, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullable_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadObjectNullable(Stream, Type, Nullable(Of Int32), ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadObjectNullable(Stream, Type, Nullable, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadObjectNullable(Stream, Type, Nullable(Of Int32), ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable* name: ReadObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullable_ @@ -3746,6 +3928,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadObjectNullable(Stream, Nullable, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadObjectNullable(Of T)(Stream, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadObjectNullableAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsync_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadObjectNullableAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadObjectNullableAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadObjectNullableAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync* name: ReadObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsync_ @@ -3762,18 +3953,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) nameWithType: StreamExtensions.ReadObjectNullableAsync(Stream, Nullable, ISerializerOptions, CancellationToken) nameWithType.vb: StreamExtensions.ReadObjectNullableAsync(Of T)(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsyncMethod - name: ReadObjectNullableAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsyncMethod - nameWithType: StreamExtensions.ReadObjectNullableAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableMethod - name: ReadObjectNullableMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableMethod - nameWithType: StreamExtensions.ReadObjectNullableMethod - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream,System.Nullable{System.Int32}) name: ReadOneByte(Stream, Nullable) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByte_Stream_System_Nullable_System_Int32__ @@ -3934,12 +4113,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) nameWithType: StreamExtensions.ReadSerializedAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.ReadSerializedAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsyncMethod - name: ReadSerializedAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsyncMethod - nameWithType: StreamExtensions.ReadSerializedAsyncMethod - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream,System.Int32,System.Buffers.ArrayPool{System.Byte}) name: ReadSerializedData(Stream, Int32, ArrayPool) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedData_Stream_System_Int32_System_Buffers_ArrayPool_System_Byte__ @@ -3972,12 +4145,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync nameWithType: StreamExtensions.ReadSerializedDataAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedMethod - name: ReadSerializedMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedMethod - nameWithType: StreamExtensions.ReadSerializedMethod - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable* name: ReadSerializedNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedNullable_ @@ -4196,6 +4363,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync nameWithType: StreamExtensions.ReadShortNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) + name: ReadStream(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStream_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) + name.vb: ReadStream(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64) + nameWithType: StreamExtensions.ReadStream(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) + nameWithType.vb: StreamExtensions.ReadStream(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream* name: ReadStream href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStream_ @@ -4203,15 +4379,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream nameWithType: StreamExtensions.ReadStream -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name: ReadStream(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStream__1_Stream___0_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStream``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name.vb: ReadStream(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream, T, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Of T)(Stream, T, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64) - nameWithType: StreamExtensions.ReadStream(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64) - nameWithType.vb: StreamExtensions.ReadStream(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) + name: ReadStreamAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamAsync_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) + name.vb: ReadStreamAsync(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64, CancellationToken) + nameWithType: StreamExtensions.ReadStreamAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) + nameWithType.vb: StreamExtensions.ReadStreamAsync(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync* name: ReadStreamAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamAsync_ @@ -4219,15 +4395,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync nameWithType: StreamExtensions.ReadStreamAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name: ReadStreamAsync(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamAsync__1_Stream___0_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name.vb: ReadStreamAsync(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream, T, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Of T)(Stream, T, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64, CancellationToken) - nameWithType: StreamExtensions.ReadStreamAsync(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStreamAsync(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) + name: ReadStreamNullable(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullable_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) + name.vb: ReadStreamNullable(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64) + nameWithType: StreamExtensions.ReadStreamNullable(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) + nameWithType.vb: StreamExtensions.ReadStreamNullable(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable* name: ReadStreamNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullable_ @@ -4235,15 +4411,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable nameWithType: StreamExtensions.ReadStreamNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name: ReadStreamNullable(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullable__1_Stream___0_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name.vb: ReadStreamNullable(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream, T, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Of T)(Stream, T, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64) - nameWithType: StreamExtensions.ReadStreamNullable(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64) - nameWithType.vb: StreamExtensions.ReadStreamNullable(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync* name: ReadStreamNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullableAsync_ @@ -4251,15 +4418,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync nameWithType: StreamExtensions.ReadStreamNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name: ReadStreamNullableAsync(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullableAsync__1_Stream___0_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync``1(Stream,``0,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name.vb: ReadStreamNullableAsync(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Stream, T, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Of T)(Stream, T, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64, CancellationToken) - nameWithType: StreamExtensions.ReadStreamNullableAsync(Stream, T, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStreamNullableAsync(Of T)(Stream, T, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync``1(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) + name: ReadStreamNullableAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullableAsync__1_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync``1(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) + name.vb: ReadStreamNullableAsync(Of T)(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Of T)(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64, CancellationToken) + nameWithType: StreamExtensions.ReadStreamNullableAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) + nameWithType.vb: StreamExtensions.ReadStreamNullableAsync(Of T)(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) name: ReadString(Stream, Nullable, ArrayPool, Int32, Int32) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ @@ -4720,6 +4887,78 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync nameWithType: StreamExtensions.ReadUShortNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Boolean) + name: Write(Stream, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Boolean) + nameWithType: StreamExtensions.Write(Stream, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Byte) + name: Write(Stream, Byte) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Byte_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Byte) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Byte) + nameWithType: StreamExtensions.Write(Stream, Byte) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Decimal) + name: Write(Stream, Decimal) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Decimal_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Decimal) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Decimal) + nameWithType: StreamExtensions.Write(Stream, Decimal) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Double) + name: Write(Stream, Double) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Double_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Double) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Double) + nameWithType: StreamExtensions.Write(Stream, Double) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int16) + name: Write(Stream, Int16) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int16_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int16) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int16) + nameWithType: StreamExtensions.Write(Stream, Int16) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int32) + name: Write(Stream, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int32) + nameWithType: StreamExtensions.Write(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int64) + name: Write(Stream, Int64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int64) + nameWithType: StreamExtensions.Write(Stream, Int64) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.SByte) + name: Write(Stream, SByte) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_SByte_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.SByte) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.SByte) + nameWithType: StreamExtensions.Write(Stream, SByte) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Single) + name: Write(Stream, Single) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Single_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Single) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Single) + nameWithType: StreamExtensions.Write(Stream, Single) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt16) + name: Write(Stream, UInt16) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt16_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt16) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt16) + nameWithType: StreamExtensions.Write(Stream, UInt16) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt32) + name: Write(Stream, UInt32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt32) + nameWithType: StreamExtensions.Write(Stream, UInt32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt64) + name: Write(Stream, UInt64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt64) + nameWithType: StreamExtensions.Write(Stream, UInt64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.Write* name: Write href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_ @@ -4727,114 +4966,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write nameWithType: StreamExtensions.Write -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Boolean) - name: Write(T, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Boolean) - name.vb: Write(Of T)(T, Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.Boolean) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.Boolean) - nameWithType: StreamExtensions.Write(T, Boolean) - nameWithType.vb: StreamExtensions.Write(Of T)(T, Boolean) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Byte) - name: Write(T, Byte) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Byte_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Byte) - name.vb: Write(Of T)(T, Byte) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.Byte) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.Byte) - nameWithType: StreamExtensions.Write(T, Byte) - nameWithType.vb: StreamExtensions.Write(Of T)(T, Byte) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Decimal) - name: Write(tStream, Decimal) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Decimal_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Decimal) - name.vb: Write(Of tStream)(tStream, Decimal) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(tStream, System.Decimal) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of tStream)(tStream, System.Decimal) - nameWithType: StreamExtensions.Write(tStream, Decimal) - nameWithType.vb: StreamExtensions.Write(Of tStream)(tStream, Decimal) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Double) - name: Write(T, Double) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Double_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Double) - name.vb: Write(Of T)(T, Double) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.Double) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.Double) - nameWithType: StreamExtensions.Write(T, Double) - nameWithType.vb: StreamExtensions.Write(Of T)(T, Double) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Int16) - name: Write(T, Int16) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Int16_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Int16) - name.vb: Write(Of T)(T, Int16) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.Int16) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.Int16) - nameWithType: StreamExtensions.Write(T, Int16) - nameWithType.vb: StreamExtensions.Write(Of T)(T, Int16) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Int32) - name: Write(T, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Int32) - name.vb: Write(Of T)(T, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.Int32) - nameWithType: StreamExtensions.Write(T, Int32) - nameWithType.vb: StreamExtensions.Write(Of T)(T, Int32) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Int64) - name: Write(T, Int64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Int64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Int64) - name.vb: Write(Of T)(T, Int64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.Int64) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.Int64) - nameWithType: StreamExtensions.Write(T, Int64) - nameWithType.vb: StreamExtensions.Write(Of T)(T, Int64) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.SByte) - name: Write(T, SByte) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_SByte_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.SByte) - name.vb: Write(Of T)(T, SByte) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.SByte) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.SByte) - nameWithType: StreamExtensions.Write(T, SByte) - nameWithType.vb: StreamExtensions.Write(Of T)(T, SByte) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Single) - name: Write(T, Single) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_Single_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.Single) - name.vb: Write(Of T)(T, Single) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.Single) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.Single) - nameWithType: StreamExtensions.Write(T, Single) - nameWithType.vb: StreamExtensions.Write(Of T)(T, Single) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.UInt16) - name: Write(T, UInt16) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_UInt16_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.UInt16) - name.vb: Write(Of T)(T, UInt16) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.UInt16) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.UInt16) - nameWithType: StreamExtensions.Write(T, UInt16) - nameWithType.vb: StreamExtensions.Write(Of T)(T, UInt16) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.UInt32) - name: Write(T, UInt32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_UInt32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.UInt32) - name.vb: Write(Of T)(T, UInt32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.UInt32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.UInt32) - nameWithType: StreamExtensions.Write(T, UInt32) - nameWithType.vb: StreamExtensions.Write(Of T)(T, UInt32) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.UInt64) - name: Write(T, UInt64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write__1___0_System_UInt64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write``1(``0,System.UInt64) - name.vb: Write(Of T)(T, UInt64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(T, System.UInt64) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Write(Of T)(T, System.UInt64) - nameWithType: StreamExtensions.Write(T, UInt64) - nameWithType.vb: StreamExtensions.Write(Of T)(T, UInt64) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object) + name: WriteAny(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAny_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream, System.Object) + nameWithType: StreamExtensions.WriteAny(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny* name: WriteAny href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAny_ @@ -4842,15 +4979,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny nameWithType: StreamExtensions.WriteAny -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny``1(``0,System.Object) - name: WriteAny(T, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAny__1___0_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAny``1(``0,System.Object) - name.vb: WriteAny(Of T)(T, Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(T, System.Object) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Of T)(T, System.Object) - nameWithType: StreamExtensions.WriteAny(T, Object) - nameWithType.vb: StreamExtensions.WriteAny(Of T)(T, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,CancellationToken) name: WriteAnyAsync(Stream, Object, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Stream_System_Object_CancellationToken_ @@ -4864,6 +4992,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync nameWithType: StreamExtensions.WriteAnyAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object) + name: WriteAnyNullable(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullable_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream, System.Object) + nameWithType: StreamExtensions.WriteAnyNullable(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable* name: WriteAnyNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullable_ @@ -4871,15 +5005,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable nameWithType: StreamExtensions.WriteAnyNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable``1(``0,System.Object) - name: WriteAnyNullable(T, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullable__1___0_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable``1(``0,System.Object) - name.vb: WriteAnyNullable(Of T)(T, Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(T, System.Object) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Of T)(T, System.Object) - nameWithType: StreamExtensions.WriteAnyNullable(T, Object) - nameWithType.vb: StreamExtensions.WriteAnyNullable(Of T)(T, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,CancellationToken) name: WriteAnyNullableAsync(Stream, Object, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Stream_System_Object_CancellationToken_ @@ -4893,6 +5018,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync nameWithType: StreamExtensions.WriteAnyNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream,System.Object) + name: WriteAnyObject(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObject_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream, System.Object) + nameWithType: StreamExtensions.WriteAnyObject(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject* name: WriteAnyObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObject_ @@ -4900,15 +5031,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject nameWithType: StreamExtensions.WriteAnyObject -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject``2(``0,``1) - name: WriteAnyObject(tStream, tObj) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObject__2___0___1_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject``2(``0,``1) - name.vb: WriteAnyObject(Of tStream, tObj)(tStream, tObj) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(tStream, tObj) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Of tStream, tObj)(tStream, tObj) - nameWithType: StreamExtensions.WriteAnyObject(tStream, tObj) - nameWithType.vb: StreamExtensions.WriteAnyObject(Of tStream, tObj)(tStream, tObj) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream,System.Object,CancellationToken) + name: WriteAnyObjectAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteAnyObjectAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync* name: WriteAnyObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_ @@ -4916,27 +5044,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync nameWithType: StreamExtensions.WriteAnyObjectAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync``1(Stream,``0,CancellationToken) - name: WriteAnyObjectAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync``1(Stream,``0,CancellationToken) - name.vb: WriteAnyObjectAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteAnyObjectAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAnyObjectAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsyncMethod - name: WriteAnyObjectAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsyncMethod - nameWithType: StreamExtensions.WriteAnyObjectAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectMethod - name: WriteAnyObjectMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectMethod - nameWithType: StreamExtensions.WriteAnyObjectMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream,System.Object) + name: WriteAnyObjectNullable(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullable_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream, System.Object) + nameWithType: StreamExtensions.WriteAnyObjectNullable(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable* name: WriteAnyObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullable_ @@ -4944,15 +5057,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable nameWithType: StreamExtensions.WriteAnyObjectNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable``2(``0,``1) - name: WriteAnyObjectNullable(tStream, tObj) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullable__2___0___1_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable``2(``0,``1) - name.vb: WriteAnyObjectNullable(Of tStream, tObj)(tStream, tObj) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(tStream, tObj) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Of tStream, tObj)(tStream, tObj) - nameWithType: StreamExtensions.WriteAnyObjectNullable(tStream, tObj) - nameWithType.vb: StreamExtensions.WriteAnyObjectNullable(Of tStream, tObj)(tStream, tObj) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream,System.Object,CancellationToken) + name: WriteAnyObjectNullableAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync* name: WriteAnyObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_ @@ -4960,15 +5070,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync nameWithType: StreamExtensions.WriteAnyObjectNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync``1(Stream,``0,CancellationToken) - name: WriteAnyObjectNullableAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync``1(Stream,``0,CancellationToken) - name.vb: WriteAnyObjectNullableAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAnyObjectNullableAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream,Array) + name: WriteArray(Stream, Array) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArray_Stream_Array_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream,Array) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream, Array) + nameWithType: StreamExtensions.WriteArray(Stream, Array) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray* name: WriteArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArray_ @@ -4976,15 +5083,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray nameWithType: StreamExtensions.WriteArray -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray``2(``0,``1[]) - name: WriteArray(tStream, tElement[]) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArray__2___0___1___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArray``2(``0,``1[]) - name.vb: WriteArray(Of tStream, tElement)(tStream, tElement()) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(tStream, tElement[]) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Of tStream, tElement)(tStream, tElement()) - nameWithType: StreamExtensions.WriteArray(tStream, tElement[]) - nameWithType.vb: StreamExtensions.WriteArray(Of tStream, tElement)(tStream, tElement()) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream,Array,CancellationToken) + name: WriteArrayAsync(Stream, Array, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_Stream_Array_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream,Array,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream, Array, CancellationToken) + nameWithType: StreamExtensions.WriteArrayAsync(Stream, Array, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync* name: WriteArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_ @@ -4992,27 +5096,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync nameWithType: StreamExtensions.WriteArrayAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync``1(Stream,``0[],CancellationToken) - name: WriteArrayAsync(Stream, T[], CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync__1_Stream___0___CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync``1(Stream,``0[],CancellationToken) - name.vb: WriteArrayAsync(Of T)(Stream, T(), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream, T[], CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Of T)(Stream, T(), CancellationToken) - nameWithType: StreamExtensions.WriteArrayAsync(Stream, T[], CancellationToken) - nameWithType.vb: StreamExtensions.WriteArrayAsync(Of T)(Stream, T(), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsyncMethod - name: WriteArrayAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsyncMethod - nameWithType: StreamExtensions.WriteArrayAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayMethod - name: WriteArrayMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayMethod - nameWithType: StreamExtensions.WriteArrayMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream,System.Nullable{Array}) + name: WriteArrayNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullable_Stream_System_Nullable_Array__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream,System.Nullable{Array}) + name.vb: WriteArrayNullable(Stream, Nullable(Of Array)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream, System.Nullable(Of Array)) + nameWithType: StreamExtensions.WriteArrayNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteArrayNullable(Stream, Nullable(Of Array)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable* name: WriteArrayNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullable_ @@ -5020,15 +5112,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable nameWithType: StreamExtensions.WriteArrayNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable``2(``0,``1[]) - name: WriteArrayNullable(tStream, tElement[]) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullable__2___0___1___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable``2(``0,``1[]) - name.vb: WriteArrayNullable(Of tStream, tElement)(tStream, tElement()) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(tStream, tElement[]) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Of tStream, tElement)(tStream, tElement()) - nameWithType: StreamExtensions.WriteArrayNullable(tStream, tElement[]) - nameWithType.vb: StreamExtensions.WriteArrayNullable(Of tStream, tElement)(tStream, tElement()) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream,System.Nullable{Array},CancellationToken) + name: WriteArrayNullableAsync(Stream, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_Stream_System_Nullable_Array__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream,System.Nullable{Array},CancellationToken) + name.vb: WriteArrayNullableAsync(Stream, Nullable(Of Array), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, System.Nullable(Of Array), CancellationToken) + nameWithType: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable(Of Array), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync* name: WriteArrayNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_ @@ -5036,15 +5128,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync nameWithType: StreamExtensions.WriteArrayNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync``1(Stream,``0[],CancellationToken) - name: WriteArrayNullableAsync(Stream, T[], CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync__1_Stream___0___CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync``1(Stream,``0[],CancellationToken) - name.vb: WriteArrayNullableAsync(Of T)(Stream, T(), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, T[], CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Of T)(Stream, T(), CancellationToken) - nameWithType: StreamExtensions.WriteArrayNullableAsync(Stream, T[], CancellationToken) - nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Of T)(Stream, T(), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Boolean,CancellationToken) name: WriteAsync(Stream, Boolean, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Boolean_CancellationToken_ @@ -5124,6 +5207,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync nameWithType: StreamExtensions.WriteAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,ReadOnlySpan{System.Byte}) + name: WriteBytes(Stream, ReadOnlySpan) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_Stream_ReadOnlySpan_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,ReadOnlySpan{System.Byte}) + name.vb: WriteBytes(Stream, ReadOnlySpan(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, ReadOnlySpan) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, ReadOnlySpan(Of System.Byte)) + nameWithType: StreamExtensions.WriteBytes(Stream, ReadOnlySpan) + nameWithType.vb: StreamExtensions.WriteBytes(Stream, ReadOnlySpan(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,Span{System.Byte}) + name: WriteBytes(Stream, Span) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_Stream_Span_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,Span{System.Byte}) + name.vb: WriteBytes(Stream, Span(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, Span) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, Span(Of System.Byte)) + nameWithType: StreamExtensions.WriteBytes(Stream, Span) + nameWithType.vb: StreamExtensions.WriteBytes(Stream, Span(Of Byte)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes* name: WriteBytes href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_ @@ -5131,24 +5232,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes nameWithType: StreamExtensions.WriteBytes -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes``1(``0,ReadOnlySpan{System.Byte}) - name: WriteBytes(T, ReadOnlySpan) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes__1___0_ReadOnlySpan_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes``1(``0,ReadOnlySpan{System.Byte}) - name.vb: WriteBytes(Of T)(T, ReadOnlySpan(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(T, ReadOnlySpan) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Of T)(T, ReadOnlySpan(Of System.Byte)) - nameWithType: StreamExtensions.WriteBytes(T, ReadOnlySpan) - nameWithType.vb: StreamExtensions.WriteBytes(Of T)(T, ReadOnlySpan(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes``1(``0,Span{System.Byte}) - name: WriteBytes(T, Span) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes__1___0_Span_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes``1(``0,Span{System.Byte}) - name.vb: WriteBytes(Of T)(T, Span(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(T, Span) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Of T)(T, Span(Of System.Byte)) - nameWithType: StreamExtensions.WriteBytes(T, Span) - nameWithType.vb: StreamExtensions.WriteBytes(Of T)(T, Span(Of Byte)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,Memory{System.Byte},CancellationToken) name: WriteBytesAsync(Stream, Memory, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Stream_Memory_System_Byte__CancellationToken_ @@ -5174,6 +5257,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync nameWithType: StreamExtensions.WriteBytesAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream,System.Byte[]) + name: WriteBytesNullable(Stream, Byte[]) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullable_Stream_System_Byte___ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream,System.Byte[]) + name.vb: WriteBytesNullable(Stream, Byte()) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream, System.Byte[]) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream, System.Byte()) + nameWithType: StreamExtensions.WriteBytesNullable(Stream, Byte[]) + nameWithType.vb: StreamExtensions.WriteBytesNullable(Stream, Byte()) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable* name: WriteBytesNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullable_ @@ -5181,15 +5273,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable nameWithType: StreamExtensions.WriteBytesNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable``1(``0,System.Byte[]) - name: WriteBytesNullable(T, Byte[]) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullable__1___0_System_Byte___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable``1(``0,System.Byte[]) - name.vb: WriteBytesNullable(Of T)(T, Byte()) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(T, System.Byte[]) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Of T)(T, System.Byte()) - nameWithType: StreamExtensions.WriteBytesNullable(T, Byte[]) - nameWithType.vb: StreamExtensions.WriteBytesNullable(Of T)(T, Byte()) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream,System.Byte[],CancellationToken) name: WriteBytesNullableAsync(Stream, Byte[], CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_Stream_System_Byte___CancellationToken_ @@ -5206,6 +5289,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync nameWithType: StreamExtensions.WriteBytesNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream,System.Collections.IDictionary) + name: WriteDict(Stream, IDictionary) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDict_Stream_System_Collections_IDictionary_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream,System.Collections.IDictionary) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream, System.Collections.IDictionary) + nameWithType: StreamExtensions.WriteDict(Stream, IDictionary) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict* name: WriteDict href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDict_ @@ -5213,15 +5302,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict nameWithType: StreamExtensions.WriteDict -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict``3(``0,Dictionary{``1,``2}) - name: WriteDict(tStream, Dictionary) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDict__3___0_Dictionary___1___2__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDict``3(``0,Dictionary{``1,``2}) - name.vb: WriteDict(Of tStream, tKey, tValue)(tStream, Dictionary(Of tKey, tValue)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(tStream, Dictionary) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Of tStream, tKey, tValue)(tStream, Dictionary(Of tKey, tValue)) - nameWithType: StreamExtensions.WriteDict(tStream, Dictionary) - nameWithType.vb: StreamExtensions.WriteDict(Of tStream, tKey, tValue)(tStream, Dictionary(Of tKey, tValue)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream,System.Collections.IDictionary,CancellationToken) + name: WriteDictAsync(Stream, IDictionary, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_Stream_System_Collections_IDictionary_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream,System.Collections.IDictionary,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream, System.Collections.IDictionary, CancellationToken) + nameWithType: StreamExtensions.WriteDictAsync(Stream, IDictionary, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync* name: WriteDictAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_ @@ -5229,27 +5315,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync nameWithType: StreamExtensions.WriteDictAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync``2(Stream,Dictionary{``0,``1},CancellationToken) - name: WriteDictAsync(Stream, Dictionary, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync__2_Stream_Dictionary___0___1__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync``2(Stream,Dictionary{``0,``1},CancellationToken) - name.vb: WriteDictAsync(Of tKey, tValue)(Stream, Dictionary(Of tKey, tValue), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream, Dictionary, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Of tKey, tValue)(Stream, Dictionary(Of tKey, tValue), CancellationToken) - nameWithType: StreamExtensions.WriteDictAsync(Stream, Dictionary, CancellationToken) - nameWithType.vb: StreamExtensions.WriteDictAsync(Of tKey, tValue)(Stream, Dictionary(Of tKey, tValue), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsyncMethod - name: WriteDictAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsyncMethod - nameWithType: StreamExtensions.WriteDictAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictMethod - name: WriteDictMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictMethod - nameWithType: StreamExtensions.WriteDictMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream,System.Collections.IDictionary) + name: WriteDictNullable(Stream, IDictionary) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullable_Stream_System_Collections_IDictionary_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream,System.Collections.IDictionary) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream, System.Collections.IDictionary) + nameWithType: StreamExtensions.WriteDictNullable(Stream, IDictionary) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable* name: WriteDictNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullable_ @@ -5257,15 +5328,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable nameWithType: StreamExtensions.WriteDictNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable``3(``0,System.Nullable{Dictionary{``1,``2}}) - name: WriteDictNullable(tStream, Nullable>) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullable__3___0_System_Nullable_Dictionary___1___2___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable``3(``0,System.Nullable{Dictionary{``1,``2}}) - name.vb: WriteDictNullable(Of tStream, tKey, tValue)(tStream, Nullable(Of Dictionary(Of tKey, tValue))) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(tStream, System.Nullable>) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Of tStream, tKey, tValue)(tStream, System.Nullable(Of Dictionary(Of tKey, tValue))) - nameWithType: StreamExtensions.WriteDictNullable(tStream, Nullable>) - nameWithType.vb: StreamExtensions.WriteDictNullable(Of tStream, tKey, tValue)(tStream, Nullable(Of Dictionary(Of tKey, tValue))) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream,System.Collections.IDictionary,CancellationToken) + name: WriteDictNullableAsync(Stream, IDictionary, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_Stream_System_Collections_IDictionary_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream,System.Collections.IDictionary,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream, System.Collections.IDictionary, CancellationToken) + nameWithType: StreamExtensions.WriteDictNullableAsync(Stream, IDictionary, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync* name: WriteDictNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_ @@ -5273,15 +5341,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync nameWithType: StreamExtensions.WriteDictNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync``2(Stream,System.Nullable{Dictionary{``0,``1}},CancellationToken) - name: WriteDictNullableAsync(Stream, Nullable>, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync__2_Stream_System_Nullable_Dictionary___0___1___CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync``2(Stream,System.Nullable{Dictionary{``0,``1}},CancellationToken) - name.vb: WriteDictNullableAsync(Of tKey, tValue)(Stream, Nullable(Of Dictionary(Of tKey, tValue)), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream, System.Nullable>, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Of tKey, tValue)(Stream, System.Nullable(Of Dictionary(Of tKey, tValue)), CancellationToken) - nameWithType: StreamExtensions.WriteDictNullableAsync(Stream, Nullable>, CancellationToken) - nameWithType.vb: StreamExtensions.WriteDictNullableAsync(Of tKey, tValue)(Stream, Nullable(Of Dictionary(Of tKey, tValue)), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream,System.Object) + name: WriteEnum(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream, System.Object) + nameWithType: StreamExtensions.WriteEnum(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum* name: WriteEnum href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum_ @@ -5289,15 +5354,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum nameWithType: StreamExtensions.WriteEnum -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``2(``0,``1) - name: WriteEnum(tStream, tEnum) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum__2___0___1_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``2(``0,``1) - name.vb: WriteEnum(Of tStream, tEnum)(tStream, tEnum) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(tStream, tEnum) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Of tStream, tEnum)(tStream, tEnum) - nameWithType: StreamExtensions.WriteEnum(tStream, tEnum) - nameWithType.vb: StreamExtensions.WriteEnum(Of tStream, tEnum)(tStream, tEnum) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``1(Stream,``0) + name: WriteEnum(Stream, T) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum__1_Stream___0_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``1(Stream,``0) + name.vb: WriteEnum(Of T)(Stream, T) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream, T) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Of T)(Stream, T) + nameWithType: StreamExtensions.WriteEnum(Stream, T) + nameWithType.vb: StreamExtensions.WriteEnum(Of T)(Stream, T) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream,System.Object,CancellationToken) + name: WriteEnumAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteEnumAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync* name: WriteEnumAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_ @@ -5314,18 +5385,12 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteEnumAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteEnumAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsyncMethod - name: WriteEnumAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsyncMethod - nameWithType: StreamExtensions.WriteEnumAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumMethod - name: WriteEnumMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumMethod - nameWithType: StreamExtensions.WriteEnumMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream,System.Object) + name: WriteEnumNullable(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream, System.Object) + nameWithType: StreamExtensions.WriteEnumNullable(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable* name: WriteEnumNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable_ @@ -5333,15 +5398,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable nameWithType: StreamExtensions.WriteEnumNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``2(``0,System.Nullable{``1}) - name: WriteEnumNullable(tStream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable__2___0_System_Nullable___1__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``2(``0,System.Nullable{``1}) - name.vb: WriteEnumNullable(Of tStream, tEnum)(tStream, Nullable(Of tEnum)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(tStream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Of tStream, tEnum)(tStream, System.Nullable(Of tEnum)) - nameWithType: StreamExtensions.WriteEnumNullable(tStream, Nullable) - nameWithType.vb: StreamExtensions.WriteEnumNullable(Of tStream, tEnum)(tStream, Nullable(Of tEnum)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``1(Stream,System.Nullable{``0}) + name: WriteEnumNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable__1_Stream_System_Nullable___0__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``1(Stream,System.Nullable{``0}) + name.vb: WriteEnumNullable(Of T)(Stream, Nullable(Of T)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Of T)(Stream, System.Nullable(Of T)) + nameWithType: StreamExtensions.WriteEnumNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteEnumNullable(Of T)(Stream, Nullable(Of T)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream,System.Object,CancellationToken) + name: WriteEnumNullableAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync* name: WriteEnumNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_ @@ -5365,15 +5436,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray nameWithType: StreamExtensions.WriteFixedArray -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``2(``0,Span{``1}) - name: WriteFixedArray(tStream, Span) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__2___0_Span___1__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``2(``0,Span{``1}) - name.vb: WriteFixedArray(Of tStream, tElement)(tStream, Span(Of tElement)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(tStream, Span) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of tStream, tElement)(tStream, Span(Of tElement)) - nameWithType: StreamExtensions.WriteFixedArray(tStream, Span) - nameWithType.vb: StreamExtensions.WriteFixedArray(Of tStream, tElement)(tStream, Span(Of tElement)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,Span{``0}) + name: WriteFixedArray(Stream, Span) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__1_Stream_Span___0__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,Span{``0}) + name.vb: WriteFixedArray(Of T)(Stream, Span(Of T)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, Span) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T)) + nameWithType: StreamExtensions.WriteFixedArray(Stream, Span) + nameWithType.vb: StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync* name: WriteFixedArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_ @@ -5390,6 +5461,62 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), CancellationToken) nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Memory, CancellationToken) nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull* + name: WriteIfNull + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNull_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull + nameWithType: StreamExtensions.WriteIfNull +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0) + name: WriteIfNull(Stream, T) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNull__1_Stream___0_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0) + name.vb: WriteIfNull(Of T)(Stream, T) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Stream, T) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Of T)(Stream, T) + nameWithType: StreamExtensions.WriteIfNull(Stream, T) + nameWithType.vb: StreamExtensions.WriteIfNull(Of T)(Stream, T) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0,Action) + name: WriteIfNull(Stream, T, Action) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNull__1_Stream___0_Action_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0,Action) + name.vb: WriteIfNull(Of T)(Stream, T, Action) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Stream, T, Action) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Of T)(Stream, T, Action) + nameWithType: StreamExtensions.WriteIfNull(Stream, T, Action) + nameWithType.vb: StreamExtensions.WriteIfNull(Of T)(Stream, T, Action) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync* + name: WriteIfNullAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNullAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync + nameWithType: StreamExtensions.WriteIfNullAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,CancellationToken) + name: WriteIfNullAsync(Stream, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNullAsync__1_Stream___0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,CancellationToken) + name.vb: WriteIfNullAsync(Of T)(Stream, T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Stream, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, CancellationToken) + nameWithType: StreamExtensions.WriteIfNullAsync(Stream, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,Func{Task},CancellationToken) + name: WriteIfNullAsync(Stream, T, Func, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNullAsync__1_Stream___0_Func_Task__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,Func{Task},CancellationToken) + name.vb: WriteIfNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Stream, T, Func, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) + nameWithType: StreamExtensions.WriteIfNullAsync(Stream, T, Func, CancellationToken) + nameWithType.vb: StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream,System.Collections.IList) + name: WriteList(Stream, IList) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteList_Stream_System_Collections_IList_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream,System.Collections.IList) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream, System.Collections.IList) + nameWithType: StreamExtensions.WriteList(Stream, IList) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteList* name: WriteList href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteList_ @@ -5397,15 +5524,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteList nameWithType: StreamExtensions.WriteList -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteList``2(``0,List{``1}) - name: WriteList(tStream, List) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteList__2___0_List___1__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteList``2(``0,List{``1}) - name.vb: WriteList(Of tStream, tElement)(tStream, List(Of tElement)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(tStream, List) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Of tStream, tElement)(tStream, List(Of tElement)) - nameWithType: StreamExtensions.WriteList(tStream, List) - nameWithType.vb: StreamExtensions.WriteList(Of tStream, tElement)(tStream, List(Of tElement)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream,System.Collections.IList,CancellationToken) + name: WriteListAsync(Stream, IList, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_Stream_System_Collections_IList_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream,System.Collections.IList,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream, System.Collections.IList, CancellationToken) + nameWithType: StreamExtensions.WriteListAsync(Stream, IList, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync* name: WriteListAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_ @@ -5413,27 +5537,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync nameWithType: StreamExtensions.WriteListAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync``1(Stream,List{``0},CancellationToken) - name: WriteListAsync(Stream, List, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync__1_Stream_List___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync``1(Stream,List{``0},CancellationToken) - name.vb: WriteListAsync(Of T)(Stream, List(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream, List, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Of T)(Stream, List(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteListAsync(Stream, List, CancellationToken) - nameWithType.vb: StreamExtensions.WriteListAsync(Of T)(Stream, List(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsyncMethod - name: WriteListAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsyncMethod - nameWithType: StreamExtensions.WriteListAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListMethod - name: WriteListMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteListMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListMethod - nameWithType: StreamExtensions.WriteListMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream,System.Collections.IList) + name: WriteListNullable(Stream, IList) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullable_Stream_System_Collections_IList_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream,System.Collections.IList) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream, System.Collections.IList) + nameWithType: StreamExtensions.WriteListNullable(Stream, IList) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable* name: WriteListNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullable_ @@ -5441,15 +5550,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable nameWithType: StreamExtensions.WriteListNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable``2(``0,System.Nullable{List{``1}}) - name: WriteListNullable(tStream, Nullable>) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullable__2___0_System_Nullable_List___1___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable``2(``0,System.Nullable{List{``1}}) - name.vb: WriteListNullable(Of tStream, tElement)(tStream, Nullable(Of List(Of tElement))) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(tStream, System.Nullable>) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Of tStream, tElement)(tStream, System.Nullable(Of List(Of tElement))) - nameWithType: StreamExtensions.WriteListNullable(tStream, Nullable>) - nameWithType.vb: StreamExtensions.WriteListNullable(Of tStream, tElement)(tStream, Nullable(Of List(Of tElement))) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream,System.Collections.IList,CancellationToken) + name: WriteListNullableAsync(Stream, IList, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_Stream_System_Collections_IList_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream,System.Collections.IList,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream, System.Collections.IList, CancellationToken) + nameWithType: StreamExtensions.WriteListNullableAsync(Stream, IList, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync* name: WriteListNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_ @@ -5457,15 +5563,114 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync nameWithType: StreamExtensions.WriteListNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync``1(Stream,System.Nullable{List{``0}},CancellationToken) - name: WriteListNullableAsync(Stream, Nullable>, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync__1_Stream_System_Nullable_List___0___CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync``1(Stream,System.Nullable{List{``0}},CancellationToken) - name.vb: WriteListNullableAsync(Of T)(Stream, Nullable(Of List(Of T)), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream, System.Nullable>, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Of T)(Stream, System.Nullable(Of List(Of T)), CancellationToken) - nameWithType: StreamExtensions.WriteListNullableAsync(Stream, Nullable>, CancellationToken) - nameWithType.vb: StreamExtensions.WriteListNullableAsync(Of T)(Stream, Nullable(Of List(Of T)), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Boolean}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Boolean__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Boolean}) + name.vb: WriteNullable(Stream, Nullable(Of Boolean)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Boolean)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Boolean)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Byte}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Byte}) + name.vb: WriteNullable(Stream, Nullable(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Byte)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Decimal}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Decimal__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Decimal}) + name.vb: WriteNullable(Stream, Nullable(Of Decimal)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Decimal)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Decimal)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Double}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Double__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Double}) + name.vb: WriteNullable(Stream, Nullable(Of Double)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Double)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Double)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int16}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int16__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int16}) + name.vb: WriteNullable(Stream, Nullable(Of Int16)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int16)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int16)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int32}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int32}) + name.vb: WriteNullable(Stream, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int64}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int64__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int64}) + name.vb: WriteNullable(Stream, Nullable(Of Int64)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int64)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int64)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.SByte}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_SByte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.SByte}) + name.vb: WriteNullable(Stream, Nullable(Of SByte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.SByte)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of SByte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Single}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Single__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Single}) + name.vb: WriteNullable(Stream, Nullable(Of Single)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Single)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Single)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt16}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt16__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt16}) + name.vb: WriteNullable(Stream, Nullable(Of UInt16)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt16)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt16)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt32}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt32}) + name.vb: WriteNullable(Stream, Nullable(Of UInt32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt32)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt64}) + name: WriteNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt64__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt64}) + name.vb: WriteNullable(Stream, Nullable(Of UInt64)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt64)) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt64)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable* name: WriteNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_ @@ -5473,114 +5678,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable nameWithType: StreamExtensions.WriteNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Boolean}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Boolean__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Boolean}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Boolean)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Boolean)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Boolean)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Byte}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Byte}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Byte)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Decimal}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Decimal__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Decimal}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Decimal)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Decimal)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Decimal)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Double}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Double__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Double}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Double)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Double)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Double)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Int16}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Int16__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Int16}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Int16)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Int16)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Int16)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Int32}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Int32}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Int32)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Int64}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Int64__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Int64}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Int64)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Int64)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Int64)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.SByte}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_SByte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.SByte}) - name.vb: WriteNullable(Of T)(T, Nullable(Of SByte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.SByte)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of SByte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Single}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_Single__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.Single}) - name.vb: WriteNullable(Of T)(T, Nullable(Of Single)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.Single)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of Single)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.UInt16}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_UInt16__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.UInt16}) - name.vb: WriteNullable(Of T)(T, Nullable(Of UInt16)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.UInt16)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of UInt16)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.UInt32}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_UInt32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.UInt32}) - name.vb: WriteNullable(Of T)(T, Nullable(Of UInt32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.UInt32)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of UInt32)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.UInt64}) - name: WriteNullable(T, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable__1___0_System_Nullable_System_UInt64__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable``1(``0,System.Nullable{System.UInt64}) - name.vb: WriteNullable(Of T)(T, Nullable(Of UInt64)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(T, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Of T)(T, System.Nullable(Of System.UInt64)) - nameWithType: StreamExtensions.WriteNullable(T, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Of T)(T, Nullable(Of UInt64)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Boolean},CancellationToken) name: WriteNullableAsync(Stream, Nullable, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Boolean__CancellationToken_ @@ -5696,6 +5793,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync nameWithType: StreamExtensions.WriteNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream,System.Object) + name: WriteNumber(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream, System.Object) + nameWithType: StreamExtensions.WriteNumber(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber* name: WriteNumber href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber_ @@ -5703,15 +5806,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber nameWithType: StreamExtensions.WriteNumber -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``2(``0,``1) - name: WriteNumber(tStream, tNumber) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber__2___0___1_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``2(``0,``1) - name.vb: WriteNumber(Of tStream, tNumber)(tStream, tNumber) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(tStream, tNumber) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Of tStream, tNumber)(tStream, tNumber) - nameWithType: StreamExtensions.WriteNumber(tStream, tNumber) - nameWithType.vb: StreamExtensions.WriteNumber(Of tStream, tNumber)(tStream, tNumber) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``1(Stream,``0) + name: WriteNumber(Stream, T) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber__1_Stream___0_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``1(Stream,``0) + name.vb: WriteNumber(Of T)(Stream, T) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream, T) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Of T)(Stream, T) + nameWithType: StreamExtensions.WriteNumber(Stream, T) + nameWithType.vb: StreamExtensions.WriteNumber(Of T)(Stream, T) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream,System.Object,CancellationToken) + name: WriteNumberAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteNumberAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync* name: WriteNumberAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_ @@ -5728,12 +5837,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteNumberAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsyncMethod - name: WriteNumberAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsyncMethod - nameWithType: StreamExtensions.WriteNumberAsyncMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) + name: WriteNumberInt(Stream, Object, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberInt_Stream_System_Object_System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) + name.vb: WriteNumberInt(Stream, Object, Nullable(Of NumberTypes)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream, System.Object, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes)) + nameWithType: StreamExtensions.WriteNumberInt(Stream, Object, Nullable) + nameWithType.vb: StreamExtensions.WriteNumberInt(Stream, Object, Nullable(Of NumberTypes)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt* name: WriteNumberInt href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberInt_ @@ -5741,21 +5853,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt nameWithType: StreamExtensions.WriteNumberInt -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt``1(``0,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) - name: WriteNumberInt(T, Object, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberInt__1___0_System_Object_System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt``1(``0,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) - name.vb: WriteNumberInt(Of T)(T, Object, Nullable(Of NumberTypes)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(T, System.Object, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Of T)(T, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes)) - nameWithType: StreamExtensions.WriteNumberInt(T, Object, Nullable) - nameWithType.vb: StreamExtensions.WriteNumberInt(Of T)(T, Object, Nullable(Of NumberTypes)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberMethod - name: WriteNumberMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberMethod - nameWithType: StreamExtensions.WriteNumberMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object) + name: WriteNumberNullable(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream, System.Object) + nameWithType: StreamExtensions.WriteNumberNullable(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable* name: WriteNumberNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable_ @@ -5763,15 +5866,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable nameWithType: StreamExtensions.WriteNumberNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``2(``0,System.Nullable{``1}) - name: WriteNumberNullable(tStream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable__2___0_System_Nullable___1__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``2(``0,System.Nullable{``1}) - name.vb: WriteNumberNullable(Of tStream, tNumber)(tStream, Nullable(Of tNumber)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(tStream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Of tStream, tNumber)(tStream, System.Nullable(Of tNumber)) - nameWithType: StreamExtensions.WriteNumberNullable(tStream, Nullable) - nameWithType.vb: StreamExtensions.WriteNumberNullable(Of tStream, tNumber)(tStream, Nullable(Of tNumber)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``1(Stream,System.Nullable{``0}) + name: WriteNumberNullable(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable__1_Stream_System_Nullable___0__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``1(Stream,System.Nullable{``0}) + name.vb: WriteNumberNullable(Of T)(Stream, Nullable(Of T)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Of T)(Stream, System.Nullable(Of T)) + nameWithType: StreamExtensions.WriteNumberNullable(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNumberNullable(Of T)(Stream, Nullable(Of T)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream,System.Object,CancellationToken) + name: WriteNumberNullableAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync* name: WriteNumberNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_ @@ -5788,6 +5897,12 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream,System.Object) + name: WriteObject(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObject_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream, System.Object) + nameWithType: StreamExtensions.WriteObject(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject* name: WriteObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObject_ @@ -5795,15 +5910,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject nameWithType: StreamExtensions.WriteObject -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject``2(``0,``1) - name: WriteObject(tStream, tObj) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObject__2___0___1_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObject``2(``0,``1) - name.vb: WriteObject(Of tStream, tObj)(tStream, tObj) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(tStream, tObj) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Of tStream, tObj)(tStream, tObj) - nameWithType: StreamExtensions.WriteObject(tStream, tObj) - nameWithType.vb: StreamExtensions.WriteObject(Of tStream, tObj)(tStream, tObj) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream,System.Object,CancellationToken) + name: WriteObjectAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteObjectAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync* name: WriteObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_ @@ -5811,27 +5923,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync nameWithType: StreamExtensions.WriteObjectAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync``1(Stream,``0,CancellationToken) - name: WriteObjectAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync``1(Stream,``0,CancellationToken) - name.vb: WriteObjectAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteObjectAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteObjectAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsyncMethod - name: WriteObjectAsyncMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsyncMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsyncMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsyncMethod - nameWithType: StreamExtensions.WriteObjectAsyncMethod -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectMethod - name: WriteObjectMethod - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectMethod - commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectMethod - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectMethod - nameWithType: StreamExtensions.WriteObjectMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream,System.Object) + name: WriteObjectNullable(Stream, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullable_Stream_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream, System.Object) + nameWithType: StreamExtensions.WriteObjectNullable(Stream, Object) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable* name: WriteObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullable_ @@ -5839,15 +5936,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable nameWithType: StreamExtensions.WriteObjectNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable``2(``0,``1) - name: WriteObjectNullable(tStream, tObj) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullable__2___0___1_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable``2(``0,``1) - name.vb: WriteObjectNullable(Of tStream, tObj)(tStream, tObj) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(tStream, tObj) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Of tStream, tObj)(tStream, tObj) - nameWithType: StreamExtensions.WriteObjectNullable(tStream, tObj) - nameWithType.vb: StreamExtensions.WriteObjectNullable(Of tStream, tObj)(tStream, tObj) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream,System.Object,CancellationToken) + name: WriteObjectNullableAsync(Stream, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_Stream_System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream,System.Object,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream, System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteObjectNullableAsync(Stream, Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync* name: WriteObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_ @@ -5855,15 +5949,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync nameWithType: StreamExtensions.WriteObjectNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync``1(Stream,``0,CancellationToken) - name: WriteObjectNullableAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync``1(Stream,``0,CancellationToken) - name.vb: WriteObjectNullableAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteObjectNullableAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteObjectNullableAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) + name: WriteSerialized(Stream, IStreamSerializer) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream, wan24.StreamSerializerExtensions.IStreamSerializer) + nameWithType: StreamExtensions.WriteSerialized(Stream, IStreamSerializer) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized* name: WriteSerialized href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized_ @@ -5871,15 +5962,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized nameWithType: StreamExtensions.WriteSerialized -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(``0,wan24.StreamSerializerExtensions.IStreamSerializer) - name: WriteSerialized(T, IStreamSerializer) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized__1___0_wan24_StreamSerializerExtensions_IStreamSerializer_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(``0,wan24.StreamSerializerExtensions.IStreamSerializer) - name.vb: WriteSerialized(Of T)(T, IStreamSerializer) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(T, wan24.StreamSerializerExtensions.IStreamSerializer) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Of T)(T, wan24.StreamSerializerExtensions.IStreamSerializer) - nameWithType: StreamExtensions.WriteSerialized(T, IStreamSerializer) - nameWithType.vb: StreamExtensions.WriteSerialized(Of T)(T, IStreamSerializer) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) name: WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ @@ -5893,6 +5975,44 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync nameWithType: StreamExtensions.WriteSerializedAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte}) + name: WriteSerializedData(Stream, Byte[], Int32, ArrayPool) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_Stream_System_Byte___System_Int32_System_Buffers_ArrayPool_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte}) + name.vb: WriteSerializedData(Stream, Byte(), Int32, ArrayPool(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream, System.Byte[], System.Int32, System.Buffers.ArrayPool) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream, System.Byte(), System.Int32, System.Buffers.ArrayPool(Of System.Byte)) + nameWithType: StreamExtensions.WriteSerializedData(Stream, Byte[], Int32, ArrayPool) + nameWithType.vb: StreamExtensions.WriteSerializedData(Stream, Byte(), Int32, ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData* + name: WriteSerializedData + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData + nameWithType: StreamExtensions.WriteSerializedData +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte},CancellationToken) + name: WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedDataAsync_Stream_System_Byte___System_Int32_System_Buffers_ArrayPool_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte},CancellationToken) + name.vb: WriteSerializedDataAsync(Stream, Byte(), Int32, ArrayPool(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream, System.Byte[], System.Int32, System.Buffers.ArrayPool, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream, System.Byte(), System.Int32, System.Buffers.ArrayPool(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedDataAsync(Stream, Byte(), Int32, ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync* + name: WriteSerializedDataAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedDataAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync + nameWithType: StreamExtensions.WriteSerializedDataAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) + name: WriteSerializedNullable(Stream, IStreamSerializer) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream, wan24.StreamSerializerExtensions.IStreamSerializer) + nameWithType: StreamExtensions.WriteSerializedNullable(Stream, IStreamSerializer) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable* name: WriteSerializedNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable_ @@ -5900,15 +6020,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable nameWithType: StreamExtensions.WriteSerializedNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(``0,wan24.StreamSerializerExtensions.IStreamSerializer) - name: WriteSerializedNullable(T, IStreamSerializer) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable__1___0_wan24_StreamSerializerExtensions_IStreamSerializer_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(``0,wan24.StreamSerializerExtensions.IStreamSerializer) - name.vb: WriteSerializedNullable(Of T)(T, IStreamSerializer) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(T, wan24.StreamSerializerExtensions.IStreamSerializer) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Of T)(T, wan24.StreamSerializerExtensions.IStreamSerializer) - nameWithType: StreamExtensions.WriteSerializedNullable(T, IStreamSerializer) - nameWithType.vb: StreamExtensions.WriteSerializedNullable(Of T)(T, IStreamSerializer) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) name: WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ @@ -5922,6 +6033,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync nameWithType: StreamExtensions.WriteSerializedNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) + name: WriteSerializerVersion(Stream) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion_Stream_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) + nameWithType: StreamExtensions.WriteSerializerVersion(Stream) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion* name: WriteSerializerVersion href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion_ @@ -5929,15 +6046,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion nameWithType: StreamExtensions.WriteSerializerVersion -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion``1(``0) - name: WriteSerializerVersion(T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion__1___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion``1(``0) - name.vb: WriteSerializerVersion(Of T)(T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Of T)(T) - nameWithType: StreamExtensions.WriteSerializerVersion(T) - nameWithType.vb: StreamExtensions.WriteSerializerVersion(Of T)(T) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream,CancellationToken) name: WriteSerializerVersionAsync(Stream, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_Stream_CancellationToken_ @@ -5951,6 +6059,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync nameWithType: StreamExtensions.WriteSerializerVersionAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) + name: WriteStream(Stream, Stream, ArrayPool, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStream_Stream_Stream_System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) + name.vb: WriteStream(Stream, Stream, ArrayPool(Of Byte), Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream, Stream, System.Buffers.ArrayPool, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream, Stream, System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStream(Stream, Stream, ArrayPool, Nullable) + nameWithType.vb: StreamExtensions.WriteStream(Stream, Stream, ArrayPool(Of Byte), Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream* name: WriteStream href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStream_ @@ -5958,15 +6075,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream nameWithType: StreamExtensions.WriteStream -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream``1(``0,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name: WriteStream(T, Stream, ArrayPool, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStream__1___0_Stream_System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStream``1(``0,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name.vb: WriteStream(Of T)(T, Stream, ArrayPool(Of Byte), Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(T, Stream, System.Buffers.ArrayPool, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Of T)(T, Stream, System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.WriteStream(T, Stream, ArrayPool, Nullable) - nameWithType.vb: StreamExtensions.WriteStream(Of T)(T, Stream, ArrayPool(Of Byte), Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) name: WriteStreamAsync(Stream, Stream, ArrayPool, Nullable, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_Stream_Stream_System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ @@ -5983,6 +6091,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync nameWithType: StreamExtensions.WriteStreamAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) + name: WriteStreamNullable(Stream, Nullable, ArrayPool, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullable_Stream_System_Nullable_Stream__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) + name.vb: WriteStreamNullable(Stream, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream, System.Nullable(Of Stream), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStreamNullable(Stream, Nullable, ArrayPool, Nullable) + nameWithType.vb: StreamExtensions.WriteStreamNullable(Stream, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable* name: WriteStreamNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullable_ @@ -5990,15 +6107,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable nameWithType: StreamExtensions.WriteStreamNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable``1(``0,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name: WriteStreamNullable(T, Nullable, ArrayPool, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullable__1___0_System_Nullable_Stream__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable``1(``0,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name.vb: WriteStreamNullable(Of T)(T, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(T, System.Nullable, System.Buffers.ArrayPool, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Of T)(T, System.Nullable(Of Stream), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.WriteStreamNullable(T, Nullable, ArrayPool, Nullable) - nameWithType.vb: StreamExtensions.WriteStreamNullable(Of T)(T, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) name: WriteStreamNullableAsync(Stream, Nullable, ArrayPool, Nullable, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_Stream_System_Nullable_Stream__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ @@ -6015,6 +6123,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync nameWithType: StreamExtensions.WriteStreamNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream,System.String) + name: WriteString(Stream, String) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString_Stream_System_String_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream,System.String) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream, System.String) + nameWithType: StreamExtensions.WriteString(Stream, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString* name: WriteString href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString_ @@ -6022,15 +6136,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString nameWithType: StreamExtensions.WriteString -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString``1(``0,System.String) - name: WriteString(T, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString__1___0_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString``1(``0,System.String) - name.vb: WriteString(Of T)(T, String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(T, System.String) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Of T)(T, System.String) - nameWithType: StreamExtensions.WriteString(T, String) - nameWithType.vb: StreamExtensions.WriteString(Of T)(T, String) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream,System.String) + name: WriteString16(Stream, String) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16_Stream_System_String_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream,System.String) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream, System.String) + nameWithType: StreamExtensions.WriteString16(Stream, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16* name: WriteString16 href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16_ @@ -6038,15 +6149,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16 nameWithType: StreamExtensions.WriteString16 -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16``1(``0,System.String) - name: WriteString16(T, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16__1___0_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16``1(``0,System.String) - name.vb: WriteString16(Of T)(T, String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(T, System.String) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Of T)(T, System.String) - nameWithType: StreamExtensions.WriteString16(T, String) - nameWithType.vb: StreamExtensions.WriteString16(Of T)(T, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream,System.String,CancellationToken) name: WriteString16Async(Stream, String, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_Stream_System_String_CancellationToken_ @@ -6067,15 +6169,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable nameWithType: StreamExtensions.WriteString16Nullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable``1(``0,System.String) - name: WriteString16Nullable(T, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Nullable__1___0_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable``1(``0,System.String) - name.vb: WriteString16Nullable(Of T)(T, String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(T, System.String) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Of T)(T, System.String) - nameWithType: StreamExtensions.WriteString16Nullable(T, String) - nameWithType.vb: StreamExtensions.WriteString16Nullable(Of T)(T, String) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable``1(Stream,System.String) + name: WriteString16Nullable(Stream, String) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Nullable__1_Stream_System_String_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable``1(Stream,System.String) + name.vb: WriteString16Nullable(Of T)(Stream, String) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Stream, System.String) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Of T)(Stream, System.String) + nameWithType: StreamExtensions.WriteString16Nullable(Stream, String) + nameWithType.vb: StreamExtensions.WriteString16Nullable(Of T)(Stream, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream,System.String,CancellationToken) name: WriteString16NullableAsync(Stream, String, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_Stream_System_String_CancellationToken_ @@ -6089,6 +6191,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync nameWithType: StreamExtensions.WriteString16NullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream,System.String) + name: WriteString32(Stream, String) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32_Stream_System_String_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream,System.String) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream, System.String) + nameWithType: StreamExtensions.WriteString32(Stream, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32* name: WriteString32 href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32_ @@ -6096,15 +6204,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32 nameWithType: StreamExtensions.WriteString32 -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32``1(``0,System.String) - name: WriteString32(T, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32__1___0_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32``1(``0,System.String) - name.vb: WriteString32(Of T)(T, String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(T, System.String) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Of T)(T, System.String) - nameWithType: StreamExtensions.WriteString32(T, String) - nameWithType.vb: StreamExtensions.WriteString32(Of T)(T, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream,System.String,CancellationToken) name: WriteString32Async(Stream, String, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_Stream_System_String_CancellationToken_ @@ -6118,6 +6217,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async nameWithType: StreamExtensions.WriteString32Async +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream,System.String) + name: WriteString32Nullable(Stream, String) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Nullable_Stream_System_String_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream,System.String) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream, System.String) + nameWithType: StreamExtensions.WriteString32Nullable(Stream, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable* name: WriteString32Nullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Nullable_ @@ -6125,15 +6230,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable nameWithType: StreamExtensions.WriteString32Nullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable``1(``0,System.String) - name: WriteString32Nullable(T, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Nullable__1___0_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable``1(``0,System.String) - name.vb: WriteString32Nullable(Of T)(T, String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(T, System.String) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Of T)(T, System.String) - nameWithType: StreamExtensions.WriteString32Nullable(T, String) - nameWithType.vb: StreamExtensions.WriteString32Nullable(Of T)(T, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream,System.String,CancellationToken) name: WriteString32NullableAsync(Stream, String, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_Stream_System_String_CancellationToken_ @@ -6160,6 +6256,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync nameWithType: StreamExtensions.WriteStringAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream,System.String) + name: WriteStringNullable(Stream, String) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullable_Stream_System_String_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream,System.String) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream, System.String) + nameWithType: StreamExtensions.WriteStringNullable(Stream, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable* name: WriteStringNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullable_ @@ -6167,15 +6269,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable nameWithType: StreamExtensions.WriteStringNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable``1(``0,System.String) - name: WriteStringNullable(T, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullable__1___0_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable``1(``0,System.String) - name.vb: WriteStringNullable(Of T)(T, String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(T, System.String) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Of T)(T, System.String) - nameWithType: StreamExtensions.WriteStringNullable(T, String) - nameWithType.vb: StreamExtensions.WriteStringNullable(Of T)(T, String) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream,System.String,CancellationToken) name: WriteStringNullableAsync(Stream, String, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_Stream_System_String_CancellationToken_ @@ -6189,6 +6282,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync nameWithType: StreamExtensions.WriteStringNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream,System.Object,System.Boolean) + name: WriteStruct(Stream, Object, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct_Stream_System_Object_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream,System.Object,System.Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream, System.Object, System.Boolean) + nameWithType: StreamExtensions.WriteStruct(Stream, Object, Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct* name: WriteStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct_ @@ -6196,15 +6295,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct nameWithType: StreamExtensions.WriteStruct -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``2(``0,``1,System.Boolean) - name: WriteStruct(tStream, tStruct, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct__2___0___1_System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``2(``0,``1,System.Boolean) - name.vb: WriteStruct(Of tStream, tStruct)(tStream, tStruct, Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(tStream, tStruct, System.Boolean) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Of tStream, tStruct)(tStream, tStruct, System.Boolean) - nameWithType: StreamExtensions.WriteStruct(tStream, tStruct, Boolean) - nameWithType.vb: StreamExtensions.WriteStruct(Of tStream, tStruct)(tStream, tStruct, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,System.Boolean,CancellationToken) + name: WriteStructAsync(Stream, Object, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_Stream_System_Object_System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,System.Boolean,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream, System.Object, System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructAsync(Stream, Object, Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync* name: WriteStructAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_ @@ -6212,15 +6308,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync nameWithType: StreamExtensions.WriteStructAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``2(``0,``1,System.Boolean,CancellationToken) - name: WriteStructAsync(tStream, tStruct, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync__2___0___1_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``2(``0,``1,System.Boolean,CancellationToken) - name.vb: WriteStructAsync(Of tStream, tStruct)(tStream, tStruct, Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(tStream, tStruct, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of tStream, tStruct)(tStream, tStruct, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructAsync(tStream, tStruct, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructAsync(Of tStream, tStruct)(tStream, tStruct, Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,System.Boolean) + name: WriteStructNullable(Stream, Object, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable_Stream_System_Object_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,System.Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream, System.Object, System.Boolean) + nameWithType: StreamExtensions.WriteStructNullable(Stream, Object, Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable* name: WriteStructNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable_ @@ -6228,15 +6321,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable nameWithType: StreamExtensions.WriteStructNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``2(``0,System.Nullable{``1},System.Boolean) - name: WriteStructNullable(tStream, Nullable, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable__2___0_System_Nullable___1__System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``2(``0,System.Nullable{``1},System.Boolean) - name.vb: WriteStructNullable(Of tStream, tStruct)(tStream, Nullable(Of tStruct), Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(tStream, System.Nullable, System.Boolean) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Of tStream, tStruct)(tStream, System.Nullable(Of tStruct), System.Boolean) - nameWithType: StreamExtensions.WriteStructNullable(tStream, Nullable, Boolean) - nameWithType.vb: StreamExtensions.WriteStructNullable(Of tStream, tStruct)(tStream, Nullable(Of tStruct), Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,System.Boolean,CancellationToken) + name: WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_Stream_System_Object_System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,System.Boolean,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream, System.Object, System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync* name: WriteStructNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_ @@ -6244,15 +6334,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync nameWithType: StreamExtensions.WriteStructNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``2(``0,System.Nullable{``1},System.Boolean,CancellationToken) - name: WriteStructNullableAsync(tStream, Nullable, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync__2___0_System_Nullable___1__System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``2(``0,System.Nullable{``1},System.Boolean,CancellationToken) - name.vb: WriteStructNullableAsync(Of tStream, tStruct)(tStream, Nullable(Of tStruct), Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(tStream, System.Nullable, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of tStream, tStruct)(tStream, System.Nullable(Of tStruct), System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructNullableAsync(tStream, Nullable, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of tStream, tStruct)(tStream, Nullable(Of tStruct), Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializer name: StreamSerializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -6346,13 +6427,13 @@ references: commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate fullName: wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate nameWithType: StreamSerializer.FindAsyncSerializer_Delegate -- uid: wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type,IEnumerable{Type}) +- uid: wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type,System.Collections.IEnumerable{Type}) name: FindDelegateType(Type, IEnumerable) - href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_FindDelegateType_Type_IEnumerable_Type__ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type,IEnumerable{Type}) + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_FindDelegateType_Type_System_Collections_IEnumerable_Type__ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type,System.Collections.IEnumerable{Type}) name.vb: FindDelegateType(Type, IEnumerable(Of Type)) - fullName: wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type, IEnumerable) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type, IEnumerable(Of Type)) + fullName: wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type, System.Collections.IEnumerable) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType(Type, System.Collections.IEnumerable(Of Type)) nameWithType: StreamSerializer.FindDelegateType(Type, IEnumerable) nameWithType.vb: StreamSerializer.FindDelegateType(Type, IEnumerable(Of Type)) - uid: wan24.StreamSerializerExtensions.StreamSerializer.FindDelegateType* @@ -6480,19 +6561,6 @@ references: commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate fullName: wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate nameWithType: StreamSerializer.Serialize_Delegate -- uid: wan24.StreamSerializerExtensions.StreamSerializer.StreamDeserializer(Stream,Type,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: StreamDeserializer(Stream, Type, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_StreamDeserializer_Stream_Type_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.StreamDeserializer(Stream,Type,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializer.StreamDeserializer(Stream, Type, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamSerializer.StreamDeserializer(Stream, Type, Int32, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamSerializer.StreamDeserializer* - name: StreamDeserializer - href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_StreamDeserializer_ - commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializer.StreamDeserializer - isSpec: "True" - fullName: wan24.StreamSerializerExtensions.StreamSerializer.StreamDeserializer - nameWithType: StreamSerializer.StreamDeserializer - uid: wan24.StreamSerializerExtensions.StreamSerializer.SyncDeserializer name: SyncDeserializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_SyncDeserializer diff --git a/src/Stream-Serializer-Extensions Docs/Stream-Serializer-Extensions Docs.csproj b/src/Stream-Serializer-Extensions Docs/Stream-Serializer-Extensions Docs.csproj index be7f546..828a053 100644 --- a/src/Stream-Serializer-Extensions Docs/Stream-Serializer-Extensions Docs.csproj +++ b/src/Stream-Serializer-Extensions Docs/Stream-Serializer-Extensions Docs.csproj @@ -5,6 +5,7 @@ Stream_Serializer_Extensions_Docs enable enable + Debug;Release;Trunk diff --git a/src/Stream-Serializer-Extensions Tests/Stream-Serializer-Extensions Tests.csproj b/src/Stream-Serializer-Extensions Tests/Stream-Serializer-Extensions Tests.csproj index fa0c57c..a79e312 100644 --- a/src/Stream-Serializer-Extensions Tests/Stream-Serializer-Extensions Tests.csproj +++ b/src/Stream-Serializer-Extensions Tests/Stream-Serializer-Extensions Tests.csproj @@ -7,6 +7,8 @@ enable false + + Debug;Release;Trunk diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Basic.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Basic.cs new file mode 100644 index 0000000..f3315df --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Basic.cs @@ -0,0 +1,63 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Bool_Tests() + { + using MemoryStream ms = new(); + ms.Write(true); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsTrue(ms.ReadBool()); + ms.SetLength(0); + ms.Position = 0; + ms.Write(false); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsFalse(ms.ReadBool()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((bool?)null); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsNull(ms.ReadBoolNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(true); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsTrue(ms.ReadBoolNullable()); + } + + [TestMethod] + public async Task BoolAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync(true); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsTrue(await ms.ReadBoolAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteAsync(false); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsFalse(await ms.ReadBoolAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((bool?)null); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsNull(await ms.ReadBoolNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(true); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsTrue(await ms.ReadBoolNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.cs new file mode 100644 index 0000000..25b081e --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.cs @@ -0,0 +1,7 @@ +namespace Stream_Serializer_Extensions_Tests +{ + [TestClass] + public partial class StreamExtensions_Tests + { + } +} diff --git a/src/Stream-Serializer-Extensions.sln b/src/Stream-Serializer-Extensions.sln index 333f219..4b1999d 100644 --- a/src/Stream-Serializer-Extensions.sln +++ b/src/Stream-Serializer-Extensions.sln @@ -7,26 +7,49 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Stream-Serializer-Extension EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Stream-Serializer-Extensions Tests", "Stream-Serializer-Extensions Tests\Stream-Serializer-Extensions Tests.csproj", "{0B38A3F4-CE52-4324-BBA7-A648845D2F47}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stream-Serializer-Extensions Docs", "Stream-Serializer-Extensions Docs\Stream-Serializer-Extensions Docs.csproj", "{7E29CC27-3AB4-4CEC-A32E-1E94607C5924}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Stream-Serializer-Extensions Docs", "Stream-Serializer-Extensions Docs\Stream-Serializer-Extensions Docs.csproj", "{7E29CC27-3AB4-4CEC-A32E-1E94607C5924}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ObjectValidation", "..\..\ObjectValidation\src\ObjectValidation\ObjectValidation.csproj", "{F8293296-B214-4304-B87A-D954AD821BC8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wan24-Core", "..\..\wan24-Core\src\Wan24-Core\Wan24-Core.csproj", "{7D2B294F-AF0D-48AB-834B-9AF91529BC64}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU + Trunk|Any CPU = Trunk|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {40B13FA3-D1FB-4FC9-BDD1-ED638EA40C3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {40B13FA3-D1FB-4FC9-BDD1-ED638EA40C3C}.Debug|Any CPU.Build.0 = Debug|Any CPU {40B13FA3-D1FB-4FC9-BDD1-ED638EA40C3C}.Release|Any CPU.ActiveCfg = Release|Any CPU {40B13FA3-D1FB-4FC9-BDD1-ED638EA40C3C}.Release|Any CPU.Build.0 = Release|Any CPU + {40B13FA3-D1FB-4FC9-BDD1-ED638EA40C3C}.Trunk|Any CPU.ActiveCfg = Trunk|Any CPU + {40B13FA3-D1FB-4FC9-BDD1-ED638EA40C3C}.Trunk|Any CPU.Build.0 = Trunk|Any CPU {0B38A3F4-CE52-4324-BBA7-A648845D2F47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0B38A3F4-CE52-4324-BBA7-A648845D2F47}.Debug|Any CPU.Build.0 = Debug|Any CPU {0B38A3F4-CE52-4324-BBA7-A648845D2F47}.Release|Any CPU.ActiveCfg = Release|Any CPU {0B38A3F4-CE52-4324-BBA7-A648845D2F47}.Release|Any CPU.Build.0 = Release|Any CPU + {0B38A3F4-CE52-4324-BBA7-A648845D2F47}.Trunk|Any CPU.ActiveCfg = Trunk|Any CPU + {0B38A3F4-CE52-4324-BBA7-A648845D2F47}.Trunk|Any CPU.Build.0 = Trunk|Any CPU {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Debug|Any CPU.Build.0 = Debug|Any CPU {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Release|Any CPU.Build.0 = Release|Any CPU + {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Trunk|Any CPU.ActiveCfg = Trunk|Any CPU + {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Trunk|Any CPU.Build.0 = Trunk|Any CPU + {F8293296-B214-4304-B87A-D954AD821BC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8293296-B214-4304-B87A-D954AD821BC8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8293296-B214-4304-B87A-D954AD821BC8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8293296-B214-4304-B87A-D954AD821BC8}.Release|Any CPU.Build.0 = Release|Any CPU + {F8293296-B214-4304-B87A-D954AD821BC8}.Trunk|Any CPU.ActiveCfg = Debug|Any CPU + {F8293296-B214-4304-B87A-D954AD821BC8}.Trunk|Any CPU.Build.0 = Debug|Any CPU + {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Release|Any CPU.Build.0 = Release|Any CPU + {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Trunk|Any CPU.ActiveCfg = Debug|Any CPU + {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Trunk|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs index a834dbc..5999cf8 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs @@ -26,7 +26,7 @@ public AutoStreamSerializerConfig(bool initDefaultValues = true) throw new InvalidProgramException($"{typeof(StreamSerializerAttribute)}.{nameof(StreamSerializerAttribute.Mode)} ({Attribute.Mode}) of {typeof(T)} not supported"); // Collect property informations Infos = new(from pi in StreamSerializerAttribute.GetWriteProperties(Type, version: 0) - select new KeyValuePair(pi.Name, new AutoStreamSerializerInfo(pi))); + select new KeyValuePair(pi.Property.Name, new AutoStreamSerializerInfo(pi))); // Initialize the default values if (Attribute.UseDefaultValues) { @@ -58,7 +58,7 @@ public AutoStreamSerializerConfig(bool initDefaultValues = true) /// Stream public void Serialize(T obj, Stream stream) { - (PropertyInfo[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); + (PropertyInfoExt[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); if (defaultValueBits != null) try { @@ -68,11 +68,11 @@ public void Serialize(T obj, Stream stream) { StreamSerializer.BufferPool.Return(defaultValueBits); } - foreach (PropertyInfo pi in properties) + foreach (PropertyInfoExt pi in properties) { - if (usedDefaultValue?.Contains(pi.Name) ?? false) continue; - if (!Infos.TryGetValue(pi.Name, out AutoStreamSerializerInfo? info)) - throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Name}", new InvalidProgramException()); + if (usedDefaultValue?.Contains(pi.Property.Name) ?? false) continue; + if (!Infos.TryGetValue(pi.Property.Name, out AutoStreamSerializerInfo? info)) + throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Property.Name}", new InvalidProgramException()); info.Serialize(this, obj, stream); } } @@ -85,7 +85,7 @@ public void Serialize(T obj, Stream stream) /// Cancellation token public async Task SerializeAsync(T obj, Stream stream, CancellationToken cancellationToken) { - (PropertyInfo[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); + (PropertyInfoExt[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); if (defaultValueBits != null) try { @@ -95,11 +95,11 @@ public async Task SerializeAsync(T obj, Stream stream, CancellationToken cancell { StreamSerializer.BufferPool.Return(defaultValueBits); } - foreach (PropertyInfo pi in properties) + foreach (PropertyInfoExt pi in properties) { - if (usedDefaultValue?.Contains(pi.Name) ?? false) continue; - if (!Infos.TryGetValue(pi.Name, out AutoStreamSerializerInfo? info)) - throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Name}", new InvalidProgramException()); + if (usedDefaultValue?.Contains(pi.Property.Name) ?? false) continue; + if (!Infos.TryGetValue(pi.Property.Name, out AutoStreamSerializerInfo? info)) + throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Property.Name}", new InvalidProgramException()); await info.SerializeAsync(this, obj, stream, cancellationToken).DynamicContext(); } } @@ -112,18 +112,24 @@ public async Task SerializeAsync(T obj, Stream stream, CancellationToken cancell /// Serializer version public void Deserialize(T obj, Stream stream, int version) { - PropertyInfo[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), version).ToArray(); + PropertyInfoExt[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), version).ToArray(); List? usedDefaultValue = null; if (DefaultValues != null) { - PropertyInfo[] props = properties.Where(p => DefaultValues.ContainsKey(p.Name) && Infos[p.Name].Attribute.GetUseDefaultValue(Attribute.Version!.Value)).ToArray(); - usedDefaultValue = PrepareDeserialization(obj, props, StreamExtensions.ReadSerializedData(stream, (int)Math.Ceiling((decimal)props.Length / 8), StreamSerializer.BufferPool)); + PropertyInfoExt[] props = properties + .Where(p => DefaultValues.ContainsKey(p.Property.Name) && Infos[p.Property.Name].Attribute.GetUseDefaultValue(Attribute.Version!.Value)) + .ToArray(); + usedDefaultValue = PrepareDeserialization( + obj, + props, + StreamExtensions.ReadSerializedData(stream, (int)Math.Ceiling((decimal)props.Length / 8), StreamSerializer.BufferPool) + ); } - foreach (PropertyInfo pi in properties) + foreach (PropertyInfoExt pi in properties) { - if (usedDefaultValue?.Contains(pi.Name) ?? false) continue; - if (!Infos.TryGetValue(pi.Name, out AutoStreamSerializerInfo? info)) - throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Name}", new InvalidProgramException()); + if (usedDefaultValue?.Contains(pi.Property.Name) ?? false) continue; + if (!Infos.TryGetValue(pi.Property.Name, out AutoStreamSerializerInfo? info)) + throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Property.Name}", new InvalidProgramException()); info.Deserialize(this, obj, stream, version); } } @@ -137,15 +143,18 @@ public void Deserialize(T obj, Stream stream, int version) /// Cancellation token public async Task DeserializeAsync(T obj, Stream stream, int version, CancellationToken cancellationToken) { - PropertyInfo[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), version).ToArray(); + PropertyInfoExt[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), version).ToArray(); List? usedDefaultValue = null; if (DefaultValues != null) { - PropertyInfo[] props = properties.Where(p => DefaultValues.ContainsKey(p.Name) && Infos[p.Name].Attribute.GetUseDefaultValue(Attribute.Version!.Value)).ToArray(); + PropertyInfoExt[] props = properties + .Where(p => DefaultValues.ContainsKey(p.Property.Name) && Infos[p.Property.Name].Attribute.GetUseDefaultValue(Attribute.Version!.Value)) + .ToArray(); usedDefaultValue = PrepareDeserialization( obj, props, - await StreamExtensions.ReadSerializedDataAsync(stream, (int)Math.Ceiling((decimal)props.Length / 8), StreamSerializer.BufferPool, cancellationToken).DynamicContext() + await StreamExtensions.ReadSerializedDataAsync(stream, (int)Math.Ceiling((decimal)props.Length / 8), StreamSerializer.BufferPool, cancellationToken) + .DynamicContext() ); } foreach (PropertyInfo pi in properties) @@ -163,42 +172,41 @@ await StreamExtensions.ReadSerializedDataAsync(stream, (int)Math.Ceiling((decima public void InitDefaultValues() { if (DefaultValues == null) return; - object instance = Type.ConstructAuto(usePrivate: true) ?? throw new SerializerException($"Can't instance {Type} for getting the default values", new InvalidProgramException()); + object instance = Type.ConstructAuto(usePrivate: true) + ?? throw new SerializerException($"Can't instance {Type} for getting the default values", new InvalidProgramException()); foreach (AutoStreamSerializerInfo info in Infos.Values) - { - if (!info.Attribute.UseDefaultValues) continue; - DefaultValues[info.Property.Name] = info.Property.GetValue(instance); - } + if (info.Attribute.UseDefaultValues) + DefaultValues[info.Property.Property.Name] = info.Property.Getter!(instance); } /// /// Prepare the serialization /// /// Serialized object - /// Properties, used default value property names, default value bits (needs to be returned to the ) and their length in bytes - private (PropertyInfo[] Properties, List? UsedDefaultValue, byte[]? DefaultValueBits, int? DefaultBitsLength) PrepareSerialization(T obj) + /// Properties, used default value property names, default value bits (needs to be returned to the ) and their length + /// in bytes + private (PropertyInfoExt[] Properties, List? UsedDefaultValue, byte[]? DefaultValueBits, int? DefaultBitsLength) PrepareSerialization(T obj) { - PropertyInfo[] properties = StreamSerializerAttribute.GetWriteProperties(obj.GetType()).ToArray(); + PropertyInfoExt[] properties = StreamSerializerAttribute.GetWriteProperties(obj.GetType()).ToArray(); List? usedDefaultValue = null; byte[]? defaultValueBits = null; int? defaultValueBitsLength = 0; if (DefaultValues == null) return (properties, usedDefaultValue, defaultValueBits, defaultValueBitsLength); usedDefaultValue = new(); - int byteOffset = 0, - bitOffset = 0; bool usedDefault; - PropertyInfo[] props = properties.Where(p => DefaultValues.ContainsKey(p.Name) && Infos[p.Name].Attribute.GetUseDefaultValue(Attribute.Version!.Value)).ToArray(); + PropertyInfoExt[] props = properties + .Where(p => DefaultValues.ContainsKey(p.Property.Name) && Infos[p.Property.Name].Attribute.GetUseDefaultValue(Attribute.Version!.Value)) + .ToArray(); defaultValueBitsLength = (int)Math.Ceiling((decimal)props.Length / 8); defaultValueBits = StreamSerializer.BufferPool.RentClean(defaultValueBitsLength.Value); try { - foreach (PropertyInfo pi in props) + Bitmap bits = new(defaultValueBits, bitCount: 0); + foreach (PropertyInfoExt pi in props) { - if (usedDefault = ObjectHelper.AreEqual(pi.GetValue(obj), DefaultValues[pi.Name])) defaultValueBits[byteOffset] |= 1.ShiftLeft(bitOffset).ToByte(); - if (usedDefault || (!pi.IsNullable() && pi.PropertyType == typeof(bool))) usedDefaultValue.Add(pi.Name); - if (++bitOffset != 8) continue; - byteOffset++; - bitOffset = 0; + bits.AddBits(usedDefault = ObjectHelper.AreEqual(pi.Getter!(obj), DefaultValues[pi.Property.Name])); + if (usedDefault || (!pi.Property.IsNullable() && pi.Property.PropertyType == typeof(bool))) + usedDefaultValue.Add(pi.Property.Name); } } catch @@ -216,7 +224,7 @@ public void InitDefaultValues() /// Properties /// Default value bits (needs to be returned to the ) /// Properties, used default value property names and default value bits - private List? PrepareDeserialization(T obj, PropertyInfo[] properties, byte[]? defaultValueBits) + private List? PrepareDeserialization(T obj, PropertyInfoExt[] properties, byte[]? defaultValueBits) { List? usedDefaultValue = null; if (DefaultValues == null) return usedDefaultValue; @@ -224,22 +232,20 @@ public void InitDefaultValues() usedDefaultValue = new(); try { - int byteOffset = 0, - bitOffset = 0; - foreach (PropertyInfo pi in properties) + Bitmap bits = new(defaultValueBits); + PropertyInfoExt pi; + for (int i = 0, len = properties.Length; i < len; i++) { - if (defaultValueBits[byteOffset].HasFlags(1.ShiftLeft(bitOffset).ToByte())) + pi = properties[i]; + if (bits[i]) { - usedDefaultValue.Add(pi.Name); + usedDefaultValue.Add(pi.Property.Name); } - else if (!pi.IsNullable() && pi.PropertyType == typeof(bool)) + else if (!pi.Property.IsNullable() && pi.Property.PropertyType == typeof(bool)) { - usedDefaultValue.Add(pi.Name); - pi.SetValue(obj, !(bool)pi.GetValue(obj)!); + usedDefaultValue.Add(pi.Property.Name); + pi.Setter!(obj, !(bool)pi.Getter!(obj)!); } - if (++bitOffset != 8) continue; - byteOffset++; - bitOffset = 0; } } finally diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs index 6a7a725..66e3241 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using System.Threading; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -12,17 +12,18 @@ public sealed class AutoStreamSerializerInfo /// Constructor /// /// Property - public AutoStreamSerializerInfo(PropertyInfo property) + public AutoStreamSerializerInfo(PropertyInfoExt property) { Property = property; - IsNullable = property.IsNullable(); - Attribute = Property.GetCustomAttribute() ?? throw new ArgumentException($"Missing {typeof(StreamSerializerAttribute)}", nameof(property)); + IsNullable = property.Property.IsNullable(); + Attribute = property.Property.GetCustomAttributeCached() + ?? throw new ArgumentException($"Missing {typeof(StreamSerializerAttribute)}", nameof(property)); } /// /// Property /// - public PropertyInfo Property { get; } + public PropertyInfoExt Property { get; } /// /// Is the property value nullable? @@ -67,16 +68,19 @@ public void Serialize(IAutoStreamSerializerConfig config, T obj, Stream strea { if (IsNullable) { - stream.WriteObjectNullable(Property.GetValue(obj)); + stream.WriteObjectNullable(Property.Getter!(obj)); } else { - stream.WriteObject(Property.GetValue(obj) ?? throw new SerializerException($"{Property.DeclaringType}.{Property.Name} value is NULL", new InvalidDataException())); + stream.WriteObject( + Property.Getter!(obj) + ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()) + ); } } else { - Serializer(config, this, obj, Property.GetValue(obj), stream); + Serializer(config, this, obj, Property.Getter!(obj), stream); } } @@ -94,19 +98,19 @@ public async Task SerializeAsync(IAutoStreamSerializerConfig config, T obj, S { if (IsNullable) { - await stream.WriteObjectNullableAsync(Property.GetValue(obj), cancellationToken).DynamicContext(); + await stream.WriteObjectNullableAsync(Property.Getter!(obj), cancellationToken).DynamicContext(); } else { await stream.WriteObjectAsync( - Property.GetValue(obj) ?? throw new SerializerException($"{Property.DeclaringType}.{Property.Name} value is NULL", new InvalidDataException()), + Property.Getter!(obj) ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()), cancellationToken ).DynamicContext(); } } else { - await AsyncSerializer(config, this, obj, Property.GetValue(obj), stream, cancellationToken).DynamicContext(); + await AsyncSerializer(config, this, obj, Property.Getter!(obj), stream, cancellationToken).DynamicContext(); } } @@ -122,20 +126,14 @@ public void Deserialize(IAutoStreamSerializerConfig config, T obj, Stream str { if (Deserializer == null) { - if (IsNullable) - { - Property.SetValue(obj, StreamExtensions.ReadObjectNullableMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAuto(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default))); - } - else - { - Property.SetValue(obj, StreamExtensions.ReadObjectMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAuto(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default))); - } + ISerializerOptions? options = Property.Property.GetSerializerOptions(stream, version, default); + Property.Setter!(obj, IsNullable + ? stream.ReadObjectNullable(Property.Property.PropertyType, version, options) + : stream.ReadObject(Property.Property.PropertyType, version, options)); } else { - Property.SetValue(obj, Deserializer(config, this, obj, stream, version)); + Property.Setter!(obj, Deserializer(config, this, obj, stream, version)); } } @@ -148,30 +146,19 @@ public void Deserialize(IAutoStreamSerializerConfig config, T obj, Stream str /// Stream /// Serializer version /// Cancellation token - public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, Stream stream, int version, CancellationToken cancellationToken) where T : IAutoStreamSerializer + public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, Stream stream, int version, CancellationToken cancellationToken) + where T : IAutoStreamSerializer { if (AsyncDeserializer == null) { - if (IsNullable) - { - Property.SetValue( - obj, - await StreamExtensions.ReadObjectNullableAsyncMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAutoAsync(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default), cancellationToken).DynamicContext() - ); - } - else - { - Property.SetValue( - obj, - await StreamExtensions.ReadObjectAsyncMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAutoAsync(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default), cancellationToken).DynamicContext() - ); - } + ISerializerOptions? options = Property.Property.GetSerializerOptions(stream, version, cancellationToken); + Property.Setter!(obj, IsNullable + ? await stream.ReadObjectNullableAsync(Property.Property.PropertyType, version, options, cancellationToken).DynamicContext() + : await stream.ReadObjectAsync(Property.Property.PropertyType, version, options, cancellationToken).DynamicContext()); } else { - Property.SetValue(obj, await AsyncDeserializer(config, this, obj, stream, version, cancellationToken).DynamicContext()); + Property.Setter!(obj, await AsyncDeserializer(config, this, obj, stream, version, cancellationToken).DynamicContext()); } } diff --git a/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs b/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs index 47182e4..9f55168 100644 --- a/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs @@ -1,5 +1,4 @@ using System.ComponentModel.DataAnnotations; -using System.Reflection; using wan24.Core; using wan24.ObjectValidation; @@ -32,7 +31,8 @@ public abstract class DisposableStreamSerializerBase : DisposableBase, IStreamSe /// Constructor /// /// Object version - protected DisposableStreamSerializerBase(int? objectVersion = null) : base() => _ObjectVersion = objectVersion ?? GetType().GetCustomAttribute()?.Version; + protected DisposableStreamSerializerBase(int? objectVersion = null) : base() + => _ObjectVersion = objectVersion ?? GetType().GetCustomAttributeCached()?.Version; /// /// Constructor @@ -161,7 +161,8 @@ private async Task DeserializeIntAsync(Stream stream, int version, CancellationT void IStreamSerializer.Deserialize(Stream stream, int version) => IfUndisposed(() => DeserializeInt(stream, version)); /// - Task IStreamSerializer.DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) => IfUndisposed(() => DeserializeIntAsync(stream, version, cancellationToken)); + Task IStreamSerializer.DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) + => IfUndisposed(() => DeserializeIntAsync(stream, version, cancellationToken)); /// IEnumerable IValidatableObject.Validate(ValidationContext validationContext) => IfUndisposed(() => ValidatableObjectBase.ObjectValidatable(this)); diff --git a/src/Stream-Serializer-Extensions/NumberTypes.cs b/src/Stream-Serializer-Extensions/NumberTypes.cs index 562dfde..00af7c5 100644 --- a/src/Stream-Serializer-Extensions/NumberTypes.cs +++ b/src/Stream-Serializer-Extensions/NumberTypes.cs @@ -39,7 +39,7 @@ public enum NumberTypes : byte /// Decimal = 7, /// - /// Enumeration default value (for enumeration writing/reading) + /// Enumeration default value (for enumeration writing/reading) or default nullable numeric writing action /// Default = 30, /// diff --git a/src/Stream-Serializer-Extensions/ObjectTypes.cs b/src/Stream-Serializer-Extensions/ObjectTypes.cs index 9d00fe2..ed22c25 100644 --- a/src/Stream-Serializer-Extensions/ObjectTypes.cs +++ b/src/Stream-Serializer-Extensions/ObjectTypes.cs @@ -11,7 +11,7 @@ public enum ObjectTypes : byte /// Null = 0, /// - /// Boolean + /// Boolean (boolean ) /// Bool = 1, /// @@ -83,7 +83,7 @@ public enum ObjectTypes : byte /// Unsigned = 64, /// - /// Empty (or zero) + /// Empty (or zero or boolean ) /// Empty = 128, /// diff --git a/src/Stream-Serializer-Extensions/SerializerException.cs b/src/Stream-Serializer-Extensions/SerializerException.cs index 2901f96..498c5f6 100644 --- a/src/Stream-Serializer-Extensions/SerializerException.cs +++ b/src/Stream-Serializer-Extensions/SerializerException.cs @@ -1,4 +1,7 @@ -namespace wan24.StreamSerializerExtensions +using System.Runtime; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions { /// /// Thrown on serialization errors @@ -22,5 +25,95 @@ public SerializerException(string? message) : base(message) { } /// Message /// Inner exception public SerializerException(string? message, Exception inner) : base(message, inner) { } + + /// + /// Wrap an exception in a serializer exception + /// + /// Action + /// Message + [TargetedPatchingOptOut("Tiny method")] + public static void Wrap(Action action, string? message = null) + { + try + { + action(); + } + catch (SerializerException) + { + throw; + } + catch(Exception ex) + { + throw new SerializerException(message ?? ex.Message, ex); + } + } + + /// + /// Wrap an exception in a serializer exception + /// + /// Return type + /// Function + /// Message + [TargetedPatchingOptOut("Tiny method")] + public static T Wrap(Func func, string? message = null) + { + try + { + return func(); + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw new SerializerException(message ?? ex.Message, ex); + } + } + + /// + /// Wrap an exception in a serializer exception + /// + /// Action + /// Message + [TargetedPatchingOptOut("Tiny method")] + public static async Task WrapAsync(Func action, string? message = null) + { + try + { + await action().DynamicContext(); + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw new SerializerException(message ?? ex.Message, ex); + } + } + + /// + /// Wrap an exception in a serializer exception + /// + /// Return type + /// Function + /// Message + [TargetedPatchingOptOut("Tiny method")] + public static async Task WrapAsync(Func> func, string? message = null) + { + try + { + return await func().DynamicContext(); + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw new SerializerException(message ?? ex.Message, ex); + } + } } } diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index f039236..eb2f10b 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -3,6 +3,7 @@ using System.Reflection; using System.Runtime; using wan24.Core; +using wan24.ObjectValidation; namespace wan24.StreamSerializerExtensions { @@ -96,6 +97,7 @@ public static class SerializerHelper /// /// Type /// A number? + [TargetedPatchingOptOut("Tiny method")] public static bool IsNumber(this ObjectTypes type) => type.RemoveFlags() switch { ObjectTypes.Short => true, @@ -116,8 +118,8 @@ public static class SerializerHelper public static NumberTypes GetNumberType(this object number, bool useFlags = true) => number switch { - sbyte => useFlags - ? (sbyte)number switch + sbyte sb => useFlags + ? sb switch { 0 => NumberTypes.Zero, sbyte.MinValue => NumberTypes.Byte | NumberTypes.MinValue, @@ -125,16 +127,16 @@ public static NumberTypes GetNumberType(this object number, bool useFlags = true _ => NumberTypes.Byte } : NumberTypes.Byte, - byte => useFlags - ? (byte)number switch + byte b => useFlags + ? b switch { 0 => NumberTypes.Zero, byte.MaxValue => NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned, _ => NumberTypes.Byte | NumberTypes.Unsigned } : NumberTypes.Byte | NumberTypes.Unsigned, - short => useFlags - ? (short)number switch + short s => useFlags + ? s switch { 0 => NumberTypes.Zero, short.MinValue => NumberTypes.Short | NumberTypes.MinValue, @@ -142,16 +144,16 @@ public static NumberTypes GetNumberType(this object number, bool useFlags = true _ => NumberTypes.Short } : NumberTypes.Short, - ushort => useFlags - ? (ushort)number switch + ushort us => useFlags + ? us switch { 0 => NumberTypes.Zero, ushort.MaxValue => NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned, _ => NumberTypes.Short | NumberTypes.Unsigned } : NumberTypes.Short | NumberTypes.Unsigned, - int => useFlags - ? (int)number switch + int i => useFlags + ? i switch { 0 => NumberTypes.Zero, int.MinValue => NumberTypes.Int | NumberTypes.MinValue, @@ -159,16 +161,16 @@ public static NumberTypes GetNumberType(this object number, bool useFlags = true _ => NumberTypes.Int } : NumberTypes.Int, - uint => useFlags - ? (uint)number switch + uint ui => useFlags + ? ui switch { 0 => NumberTypes.Zero, uint.MaxValue => NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned, _ => NumberTypes.Int | NumberTypes.Unsigned } : NumberTypes.Int | NumberTypes.Unsigned, - long => useFlags - ? (long)number switch + long l => useFlags + ? l switch { 0 => NumberTypes.Zero, long.MinValue => NumberTypes.Long | NumberTypes.MinValue, @@ -176,16 +178,16 @@ public static NumberTypes GetNumberType(this object number, bool useFlags = true _ => NumberTypes.Long } : NumberTypes.Long, - ulong => useFlags - ? (ulong)number switch + ulong ul => useFlags + ? ul switch { 0 => NumberTypes.Zero, ulong.MaxValue => NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned, _ => NumberTypes.Long | NumberTypes.Unsigned } : NumberTypes.Long | NumberTypes.Unsigned, - float => useFlags - ? (float)number switch + float f => useFlags + ? f switch { 0 => NumberTypes.Zero, float.MinValue => NumberTypes.Float | NumberTypes.MinValue, @@ -193,8 +195,8 @@ public static NumberTypes GetNumberType(this object number, bool useFlags = true _ => NumberTypes.Float } : NumberTypes.Float, - double => useFlags - ? (double)number switch + double d => useFlags + ? d switch { 0 => NumberTypes.Zero, double.MinValue => NumberTypes.Double | NumberTypes.MinValue, @@ -202,8 +204,8 @@ public static NumberTypes GetNumberType(this object number, bool useFlags = true _ => NumberTypes.Double } : NumberTypes.Double, - decimal => useFlags - ? (decimal)number switch + decimal m => useFlags + ? m switch { 0 => NumberTypes.Zero, decimal.MinValue => NumberTypes.Decimal | NumberTypes.MinValue, @@ -508,11 +510,7 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje /// Value /// Non-null value [TargetedPatchingOptOut("Tiny method")] - public static object EnsureNotNull(object? value) - { - if (value == null) throw new ArgumentNullException(nameof(value)); - return value; - } + public static object EnsureNotNull(object? value) => value ?? throw new ArgumentNullException(nameof(value)); /// /// Ensure a valid length @@ -548,12 +546,15 @@ public static long EnsureValidLength(long len, long min = 0, long max = long.Max /// Object type /// Value /// Value - public static T ValidateObject(this T value) where T : notnull + /// If the validation failed + [TargetedPatchingOptOut("Tiny method")] + public static T ValidateDeserializedObject(this T value) where T : notnull { - List results = new(); - if (!Validator.TryValidateObject(value, new(value, serviceProvider: null, items: null), results, validateAllProperties: true) || - !Validator.TryValidateObject(value, new(value, serviceProvider: null, items: null), results, validateAllProperties: false)) - throw new SerializerException($"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})"); + if (!value.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); return value; } @@ -563,6 +564,7 @@ public static T ValidateObject(this T value) where T : notnull /// Object /// Include the serializer version number? /// Bytes + [TargetedPatchingOptOut("Tiny method")] public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerVersion = true) { using MemoryStream ms = new(); @@ -578,6 +580,7 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV /// Bytes /// Serializer version number included? /// Object + [TargetedPatchingOptOut("Tiny method")] public static T ToObject(this byte[] bytes, bool includesSerializerVersion = true) where T : class, IStreamSerializer, new() { using MemoryStream ms = new(bytes); diff --git a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs index 057f6cc..02238a7 100644 --- a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs +++ b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.Reflection; +using wan24.Core; using wan24.ObjectValidation; namespace wan24.StreamSerializerExtensions @@ -18,7 +19,7 @@ protected SerializerOptionsBase(PropertyInfo? property, StreamSerializerAttribut { Property = property; Attribute = attr ?? - property?.GetCustomAttribute() ?? + property?.GetCustomAttributeCached() ?? throw (property == null ? new ArgumentNullException(nameof(attr)) : new ArgumentException($"{typeof(StreamSerializerAttribute)} attribute required", nameof(property))); } @@ -33,29 +34,29 @@ public virtual int GetMinLen(int defaultValue) { int? res = (int?)Attribute.MinLen; if (res == null && Property != null) - if (Property.GetCustomAttribute() is RangeAttribute range) + if (Property.GetCustomAttributeCached() is RangeAttribute range) { res = (int)range.Minimum; } - else if (Property.GetCustomAttribute() is CountLimitAttribute countLimit) + else if (Property.GetCustomAttributeCached() is CountLimitAttribute countLimit) { res = (int?)countLimit.Min; } - else if (Property.GetCustomAttribute() is MinLengthAttribute minLength) + else if (Property.GetCustomAttributeCached() is MinLengthAttribute minLength) { res = minLength.Length; } else if (Property.PropertyType == typeof(string)) { - if (Property.GetCustomAttribute() is StringLengthAttribute stringLength && stringLength.MinimumLength > 0) + if (Property.GetCustomAttributeCached() is StringLengthAttribute stringLength && stringLength.MinimumLength > 0) { res = stringLength.MinimumLength; } - else if (Property.GetCustomAttribute() != null) + else if (Property.GetCustomAttributeCached() != null) { res = 1; } - else if (Property.GetCustomAttribute() is StringLengthAttribute stringLength2) + else if (Property.GetCustomAttributeCached() is StringLengthAttribute stringLength2) { res = stringLength2.MinimumLength; } @@ -68,19 +69,19 @@ public virtual int GetMaxLen(int defaultValue) { int? res = (int?)Attribute.MaxLen; if (res == null && Property != null) - if (Property.GetCustomAttribute() is RangeAttribute range) + if (Property.GetCustomAttributeCached() is RangeAttribute range) { res = (int)range.Maximum; } - else if (Property.GetCustomAttribute() is CountLimitAttribute countLimit) + else if (Property.GetCustomAttributeCached() is CountLimitAttribute countLimit) { res = (int)countLimit.Max; } - else if (Property.GetCustomAttribute() is MaxLengthAttribute maxLength) + else if (Property.GetCustomAttributeCached() is MaxLengthAttribute maxLength) { res = maxLength.Length; } - else if (Property.PropertyType == typeof(string) && Property.GetCustomAttribute() is StringLengthAttribute stringLength) + else if (Property.PropertyType == typeof(string) && Property.GetCustomAttributeCached() is StringLengthAttribute stringLength) { res = stringLength.MaximumLength; } @@ -92,29 +93,29 @@ public virtual long GetMinLen(long defaultValue) { long? res = Attribute.MinLen; if (res == null && Property != null) - if (Property.GetCustomAttribute() is RangeAttribute range) + if (Property.GetCustomAttributeCached() is RangeAttribute range) { res = (long)range.Minimum; } - else if (Property.GetCustomAttribute() is CountLimitAttribute countLimit) + else if (Property.GetCustomAttributeCached() is CountLimitAttribute countLimit) { res = countLimit.Min; } - else if (Property.GetCustomAttribute() is MinLengthAttribute minLength) + else if (Property.GetCustomAttributeCached() is MinLengthAttribute minLength) { res = minLength.Length; } else if (Property.PropertyType == typeof(string)) { - if (Property.GetCustomAttribute() is StringLengthAttribute stringLength && stringLength.MinimumLength > 0) + if (Property.GetCustomAttributeCached() is StringLengthAttribute stringLength && stringLength.MinimumLength > 0) { res = stringLength.MinimumLength; } - else if (Property.GetCustomAttribute() != null) + else if (Property.GetCustomAttributeCached() != null) { res = 1; } - else if (Property.GetCustomAttribute() is StringLengthAttribute stringLength2) + else if (Property.GetCustomAttributeCached() is StringLengthAttribute stringLength2) { res = stringLength2.MinimumLength; } @@ -127,19 +128,19 @@ public virtual long GetMaxLen(long defaultValue) { long? res = Attribute.MaxLen; if (res == null && Property != null) - if (Property.GetCustomAttribute() is RangeAttribute range) + if (Property.GetCustomAttributeCached() is RangeAttribute range) { res = (long)range.Maximum; } - else if (Property.GetCustomAttribute() is CountLimitAttribute countLimit) + else if (Property.GetCustomAttributeCached() is CountLimitAttribute countLimit) { res = countLimit.Max; } - else if (Property.GetCustomAttribute() is MaxLengthAttribute maxLength) + else if (Property.GetCustomAttributeCached() is MaxLengthAttribute maxLength) { res = maxLength.Length; } - else if (Property.PropertyType == typeof(string) && Property.GetCustomAttribute() is StringLengthAttribute stringLength) + else if (Property.PropertyType == typeof(string) && Property.GetCustomAttributeCached() is StringLengthAttribute stringLength) { res = stringLength.MaximumLength; } diff --git a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj index ff610d0..4ad6b73 100644 --- a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj +++ b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj @@ -1,4 +1,4 @@ - + net6.0 @@ -9,7 +9,7 @@ True Stream-Serializer-Extensions Stream-Serializer-Extensions - 2.5.0 + 3.0.0 nd1012 Andreas Zimmermann, wan24.de Stream-Serializer-Extensions @@ -24,11 +24,14 @@ README.md embedded true + Debug;Release;Trunk - - + + + + diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs index 2cffc47..719c539 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs @@ -13,8 +13,7 @@ public static partial class StreamExtensions /// Options /// Object public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions? options = null) - { - try + => SerializerException.Wrap(() => { ObjectTypes objType; byte[] data = ReadSerializedData(stream, len: 1); @@ -27,16 +26,7 @@ public static object ReadAny(this Stream stream, int? version = null, ISerialize StreamSerializer.BufferPool.Return(data); } return ReadAnyInt(stream, version, objType, options); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read any object @@ -47,135 +37,132 @@ public static object ReadAny(this Stream stream, int? version = null, ISerialize /// Options /// Object private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objType, ISerializerOptions? options) - { - if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); - bool isEmpty = objType.HasFlag(ObjectTypes.Empty), - isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), - readType = true; - Type? type = null; - switch (objType.RemoveFlags()) + => SerializerException.Wrap(() => { - case ObjectTypes.Bool: - return !isEmpty; - case ObjectTypes.Byte: - case ObjectTypes.Short: - case ObjectTypes.Int: - case ObjectTypes.Long: - case ObjectTypes.Float: - case ObjectTypes.Double: - case ObjectTypes.Decimal: - type = objType.RemoveFlags() switch - { - ObjectTypes.Byte => isUnsigned ? typeof(byte) : typeof(sbyte), - ObjectTypes.Short => isUnsigned ? typeof(ushort) : typeof(short), - ObjectTypes.Int => isUnsigned ? typeof(uint) : typeof(int), - ObjectTypes.Long => isUnsigned ? typeof(ulong) : typeof(long), - ObjectTypes.Float => typeof(float), - ObjectTypes.Double => typeof(double), - ObjectTypes.Decimal => typeof(decimal), - _ => throw new InvalidProgramException() - }; - break; - case ObjectTypes.String: - return isEmpty - ? string.Empty - : ReadString( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue - ); - case ObjectTypes.Bytes: - return isEmpty - ? Array.Empty() - : ReadBytes( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue - ).Value; - case ObjectTypes.Stream: - readType = false; - break; - } - if (readType) type ??= StreamSerializer.LoadType(ReadString(stream, version, minLen: 1, maxLen: short.MaxValue)); - switch (objType.RemoveFlags()) - { - case ObjectTypes.Byte: - case ObjectTypes.Short: - case ObjectTypes.Int: - case ObjectTypes.Long: - case ObjectTypes.Float: - case ObjectTypes.Double: - case ObjectTypes.Decimal: - return isEmpty ? Activator.CreateInstance(type!)! : ReadNumberMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version)!; - case ObjectTypes.Array: - if (isEmpty) return ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)!; - return ReadArrayMethod.MakeGenericMethod(type!.GetElementType()!) - .InvokeAuto( - obj: null, + if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); + bool isEmpty = objType.HasFlag(ObjectTypes.Empty), + isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), + readType = true; + Type? type = null; + switch (objType.RemoveFlags()) + { + case ObjectTypes.Bool: + return !isEmpty; + case ObjectTypes.Byte: + case ObjectTypes.Short: + case ObjectTypes.Int: + case ObjectTypes.Long: + case ObjectTypes.Float: + case ObjectTypes.Double: + case ObjectTypes.Decimal: + type = objType.RemoveFlags() switch + { + ObjectTypes.Byte => isUnsigned ? typeof(byte) : typeof(sbyte), + ObjectTypes.Short => isUnsigned ? typeof(ushort) : typeof(short), + ObjectTypes.Int => isUnsigned ? typeof(uint) : typeof(int), + ObjectTypes.Long => isUnsigned ? typeof(ulong) : typeof(long), + ObjectTypes.Float => typeof(float), + ObjectTypes.Double => typeof(double), + ObjectTypes.Decimal => typeof(decimal), + _ => throw new InvalidProgramException() + }; + break; + case ObjectTypes.String: + return isEmpty + ? string.Empty + : ReadString( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ); + case ObjectTypes.Bytes: + return isEmpty + ? Array.Empty() + : ReadBytes( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ).Value; + case ObjectTypes.Stream: + readType = false; + break; + } + if (readType && type == null) type = StreamSerializer.LoadType(ReadString(stream, version, minLen: 1, maxLen: short.MaxValue)); + switch (objType.RemoveFlags()) + { + case ObjectTypes.Byte: + case ObjectTypes.Short: + case ObjectTypes.Int: + case ObjectTypes.Long: + case ObjectTypes.Float: + case ObjectTypes.Double: + case ObjectTypes.Decimal: + return isEmpty ? Activator.CreateInstance(type!)! : ReadNumber(stream, type!, version)!; + case ObjectTypes.Array: + if (isEmpty) return ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)!; + return ReadArray( stream, + type!, version, - null, + pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default) - )!; - case ObjectTypes.List: - if (isEmpty) return Activator.CreateInstance(type!)!; - return ReadListMethod.MakeGenericMethod(type!.GetGenericArguments()[0]) - .InvokeAuto( - obj: null, + ); + case ObjectTypes.List: + if (isEmpty) return Activator.CreateInstance(type!)!; + return ReadList( stream, + type!, version, - null, + pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default) - )!; - case ObjectTypes.Dict: - if (isEmpty) return Activator.CreateInstance(type!)!; - Type[] genericArgs = type!.GetGenericArguments(); - return ReadDictMethod.MakeGenericMethod(genericArgs[0], genericArgs[1]) - .InvokeAuto( - obj: null, + ); + case ObjectTypes.Dict: + if (isEmpty) return Activator.CreateInstance(type!)!; + return ReadDict( stream, + type!, version, - null, + pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default), - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default) - )!; - case ObjectTypes.Object: - return ReadObjectMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version, options)!; - case ObjectTypes.Struct: - return ReadStructMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version)!; - case ObjectTypes.Serializable: - return ReadSerializedObject(stream, type!, version); - case ObjectTypes.Stream: - Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( - Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), - FileMode.OpenOrCreate, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); - if (objType.IsEmpty()) return res; - try - { - return ReadStream(stream, res, version, minLen: options?.GetMinLen(0L) ?? 0, maxLen: options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); - } - catch - { - res.Dispose(); - throw; - } - default: - throw new InvalidProgramException(); - } - } + options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION), + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION) + ); + case ObjectTypes.Object: + return ReadObject(stream, type!, version, options); + case ObjectTypes.Struct: + return ReadStructMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version)!; + case ObjectTypes.Serializable: + return ReadSerializedObject(stream, type!, version); + case ObjectTypes.Stream: + Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( + Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), + FileMode.OpenOrCreate, + FileAccess.ReadWrite, + FileShare.None, + bufferSize: Settings.BufferSize, + FileOptions.RandomAccess | FileOptions.DeleteOnClose + ); + if (objType.IsEmpty()) return res; + try + { + return ReadStream(stream, res, version, minLen: options?.GetMinLen(0L) ?? 0, maxLen: options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); + } + catch + { + res.Dispose(); + throw; + } + default: + throw new InvalidProgramException(); + } + }); /// /// Read any object @@ -185,9 +172,8 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp /// Options /// Cancellation token /// Object - public static async Task ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) - { - try + public static Task ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { ObjectTypes objType; byte[] data = await ReadSerializedDataAsync(stream, len: 1, cancellationToken: cancellationToken).DynamicContext(); @@ -200,16 +186,7 @@ public static async Task ReadAnyAsync(this Stream stream, int? version = StreamSerializer.BufferPool.Return(data); } return await ReadAnyIntAsync(stream, version, objType, options, cancellationToken).DynamicContext(); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read any object @@ -220,157 +197,151 @@ public static async Task ReadAnyAsync(this Stream stream, int? version = /// Options /// Cancellation token /// Object - private static async Task ReadAnyIntAsync(Stream stream, int? version, ObjectTypes objType, ISerializerOptions? options, CancellationToken cancellationToken) - { - if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); - bool isEmpty = objType.HasFlag(ObjectTypes.Empty), - isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), - readType = true; - Type? type = null; - Task task; - switch (objType.RemoveFlags()) + private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectTypes objType, ISerializerOptions? options, CancellationToken cancellationToken) + => SerializerException.WrapAsync(async () => { - case ObjectTypes.Bool: - return !isEmpty; - case ObjectTypes.Byte: - case ObjectTypes.Short: - case ObjectTypes.Int: - case ObjectTypes.Long: - case ObjectTypes.Float: - case ObjectTypes.Double: - case ObjectTypes.Decimal: - type = objType.RemoveFlags() switch - { - ObjectTypes.Byte => isUnsigned ? typeof(byte) : typeof(sbyte), - ObjectTypes.Short => isUnsigned ? typeof(ushort) : typeof(short), - ObjectTypes.Int => isUnsigned ? typeof(uint) : typeof(int), - ObjectTypes.Long => isUnsigned ? typeof(ulong) : typeof(long), - ObjectTypes.Float => typeof(float), - ObjectTypes.Double => typeof(double), - ObjectTypes.Decimal => typeof(decimal), - _ => throw new InvalidProgramException() - }; - break; - case ObjectTypes.String: - return isEmpty - ? string.Empty - : await ReadStringAsync( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - cancellationToken: cancellationToken - ).DynamicContext(); - case ObjectTypes.Bytes: - return isEmpty - ? Array.Empty() - : (await ReadBytesAsync( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - cancellationToken: cancellationToken - ).DynamicContext()).Value; - case ObjectTypes.Stream: - readType = false; - break; - } - if (readType) type ??= StreamSerializer.LoadType(await ReadStringAsync(stream, version, pool: null, minLen: 1, maxLen: short.MaxValue, cancellationToken).DynamicContext()); - switch (objType.RemoveFlags()) - { - case ObjectTypes.Byte: - case ObjectTypes.Short: - case ObjectTypes.Int: - case ObjectTypes.Long: - case ObjectTypes.Float: - case ObjectTypes.Double: - case ObjectTypes.Decimal: - if (isEmpty) return Activator.CreateInstance(type!)!; - task = (Task)ReadNumberAsyncMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version, null, cancellationToken)!; - break; - case ObjectTypes.Array: - if (isEmpty) return ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)!; - task = (Task)ReadArrayAsyncMethod.MakeGenericMethod(type!.GetElementType()!) - .InvokeAuto( - obj: null, + if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); + bool isEmpty = objType.HasFlag(ObjectTypes.Empty), + isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), + readType = true; + Type? type = null; + Task task; + switch (objType.RemoveFlags()) + { + case ObjectTypes.Bool: + return !isEmpty; + case ObjectTypes.Byte: + case ObjectTypes.Short: + case ObjectTypes.Int: + case ObjectTypes.Long: + case ObjectTypes.Float: + case ObjectTypes.Double: + case ObjectTypes.Decimal: + type = objType.RemoveFlags() switch + { + ObjectTypes.Byte => isUnsigned ? typeof(byte) : typeof(sbyte), + ObjectTypes.Short => isUnsigned ? typeof(ushort) : typeof(short), + ObjectTypes.Int => isUnsigned ? typeof(uint) : typeof(int), + ObjectTypes.Long => isUnsigned ? typeof(ulong) : typeof(long), + ObjectTypes.Float => typeof(float), + ObjectTypes.Double => typeof(double), + ObjectTypes.Decimal => typeof(decimal), + _ => throw new InvalidProgramException() + }; + break; + case ObjectTypes.String: + return isEmpty + ? string.Empty + : await ReadStringAsync( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, + cancellationToken: cancellationToken + ).DynamicContext(); + case ObjectTypes.Bytes: + return isEmpty + ? Array.Empty() + : (await ReadBytesAsync( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, + cancellationToken: cancellationToken + ).DynamicContext()).Value; + case ObjectTypes.Stream: + readType = false; + break; + } + if (readType && type == null) + type = StreamSerializer.LoadType(await ReadStringAsync(stream, version, pool: null, minLen: 1, maxLen: short.MaxValue, cancellationToken).DynamicContext()); + switch (objType.RemoveFlags()) + { + case ObjectTypes.Byte: + case ObjectTypes.Short: + case ObjectTypes.Int: + case ObjectTypes.Long: + case ObjectTypes.Float: + case ObjectTypes.Double: + case ObjectTypes.Decimal: + if (isEmpty) return Activator.CreateInstance(type!)!; + return await ReadNumberAsync(stream, type!, version, cancellationToken: cancellationToken).DynamicContext(); + case ObjectTypes.Array: + if (isEmpty) return ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)!; + return await ReadArrayAsync( stream, + type!, version, - null, + pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default), cancellationToken - )!; - break; - case ObjectTypes.List: - if (isEmpty) return Activator.CreateInstance(type!)!; - task = (Task)ReadListAsyncMethod.MakeGenericMethod(type!.GetGenericArguments()[0]) - .InvokeAuto( - obj: null, + ).DynamicContext(); + case ObjectTypes.List: + if (isEmpty) return Activator.CreateInstance(type!)!; + return await ReadListAsync( stream, + type!, version, - null, + pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default), cancellationToken - )!; - break; - case ObjectTypes.Dict: - if (isEmpty) return Activator.CreateInstance(type!)!; - Type[] genericArgs = type!.GetGenericArguments(); - task = (Task)ReadDictAsyncMethod.MakeGenericMethod(genericArgs[0], genericArgs[1]) - .InvokeAuto( - obj: null, + ).DynamicContext(); + case ObjectTypes.Dict: + if (isEmpty) return Activator.CreateInstance(type!)!; + return await ReadDictAsync( stream, + type!, version, - null, + pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), - cancellationToken)!; - break; - case ObjectTypes.Object: - task = (Task)ReadObjectAsyncMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version, options, cancellationToken)!; - break; - case ObjectTypes.Struct: - task = (Task)ReadStructAsyncMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version, cancellationToken)!; - break; - case ObjectTypes.Serializable: - return await ReadSerializedObjectAsync(stream, type!, version, cancellationToken)!.DynamicContext(); - case ObjectTypes.Stream: - Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( - Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), - FileMode.OpenOrCreate, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); - if (objType.IsEmpty()) return res; - try - { - return await ReadStreamAsync( - stream, - res, - version, - minLen: options?.GetMinLen(0L) ?? 0, - maxLen: options?.GetMaxLen(long.MaxValue) ?? long.MaxValue, - cancellationToken: cancellationToken + cancellationToken ).DynamicContext(); - } - catch - { - res.Dispose(); - throw; - } - default: - throw new InvalidProgramException(); - } - await task.DynamicContext(); - return task.GetResult(type!); - } + case ObjectTypes.Object: + return await ReadObjectAsync(stream, type!, version, options, cancellationToken).DynamicContext(); + case ObjectTypes.Struct: + task = (Task)ReadStructAsyncMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version, cancellationToken)!; + break; + case ObjectTypes.Serializable: + return await ReadSerializedObjectAsync(stream, type!, version, cancellationToken)!.DynamicContext(); + case ObjectTypes.Stream: + Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( + Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), + FileMode.OpenOrCreate, + FileAccess.ReadWrite, + FileShare.None, + bufferSize: Settings.BufferSize, + FileOptions.RandomAccess | FileOptions.DeleteOnClose + ); + if (objType.IsEmpty()) return res; + try + { + return await ReadStreamAsync( + stream, + res, + version, + minLen: options?.GetMinLen(0L) ?? 0, + maxLen: options?.GetMaxLen(long.MaxValue) ?? long.MaxValue, + cancellationToken: cancellationToken + ).DynamicContext(); + } + catch + { + res.Dispose(); + throw; + } + default: + throw new InvalidProgramException(); + } + await task.DynamicContext(); + return task.GetResult(type!); + }); /// /// Read any object @@ -380,8 +351,7 @@ private static async Task ReadAnyIntAsync(Stream stream, int? version, O /// Options /// Object public static object? ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) - { - try + => SerializerException.Wrap(() => { ObjectTypes objType; byte[] data = ReadSerializedData(stream, len: 1); @@ -394,16 +364,7 @@ private static async Task ReadAnyIntAsync(Stream stream, int? version, O StreamSerializer.BufferPool.Return(data); } return objType == ObjectTypes.Null ? null : ReadAnyInt(stream, version, objType, options); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read any object @@ -413,9 +374,13 @@ private static async Task ReadAnyIntAsync(Stream stream, int? version, O /// Options /// Cancellation token /// Object - public static async Task ReadAnyNullableAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) - { - try + public static Task ReadAnyNullableAsync( + this Stream stream, + int? version = null, + ISerializerOptions? options = null, + CancellationToken cancellationToken = default + ) + => SerializerException.WrapAsync(async () => { ObjectTypes objType; byte[] data = await ReadSerializedDataAsync(stream, len: 1, cancellationToken: cancellationToken).DynamicContext(); @@ -428,15 +393,6 @@ private static async Task ReadAnyIntAsync(Stream stream, int? version, O StreamSerializer.BufferPool.Return(data); } return objType == ObjectTypes.Null ? null : await ReadAnyIntAsync(stream, version, objType, options, cancellationToken).DynamicContext(); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs index b754ffe..6b89bb8 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs @@ -18,26 +18,55 @@ public static partial class StreamExtensions /// Maximum length /// Value serializer options /// Value - public static T[] ReadArray(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null) - { - if (typeof(T) == typeof(byte)) return (ReadBytes(stream, version, buffer: null, pool, minLen, maxLen) as T[])!; - try + public static T[] ReadArray( + this Stream stream, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null + ) + => SerializerException.Wrap(() => { + if (typeof(T) == typeof(byte)) return (ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value as T[])!; int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); T[] res = new T[len]; for (int i = 0; i < len; res[i] = ReadObject(stream, version, valueOptions), i++) ; return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + }); + + /// + /// Read + /// + /// Stream + /// Array type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Value + public static Array ReadArray( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null + ) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - } + if (type.GetElementType() == typeof(byte)) return ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value; + ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type"); + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type elementType = type.GetElementType()!; + Array res = Array.CreateInstance(elementType, len); + for (int i = 0; i < len; res.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; + return res; + }); /// /// Read @@ -51,7 +80,7 @@ public static T[] ReadArray(this Stream stream, int? version = null, ArrayPoo /// Value serializer options /// Cancellation token /// Value - public static async Task ReadArrayAsync( + public static Task ReadArrayAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -60,26 +89,51 @@ public static async Task ReadArrayAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - { - if (typeof(T) == typeof(byte)) - return (await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!; - try + => SerializerException.WrapAsync(async () => { + if (typeof(T) == typeof(byte)) + return (await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); T[] res = new T[len]; for (int i = 0; i < len; res[i] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(), i++) ; return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + }); + + /// + /// Read + /// + /// Stream + /// Array type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Cancellation token + /// Value + public static Task ReadArrayAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + if (type.GetElementType() == typeof(byte)) + return (await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext()).Value; + ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type"); + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type elementType = type.GetElementType()!; + Array res = Array.CreateInstance(elementType, len); + for (int i = 0; i < len; res.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++) ; + return res; + }); /// /// Read @@ -101,9 +155,30 @@ public static async Task ReadArrayAsync( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) -#pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version, pool) ? ReadArray(stream, version, pool, minLen, maxLen, valueOptions) : default(T[]?); -#pragma warning restore IDE0034 // default expression can be simplified + => ReadBool(stream, version, pool) ? ReadArray(stream, version, pool, minLen, maxLen, valueOptions) : null; + + /// + /// Read + /// + /// Stream + /// Array type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static Array? ReadArrayNullable( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null + ) + => ReadBool(stream, version, pool) ? ReadArray(stream, type, version, pool, minLen, maxLen, valueOptions) : null; /// /// Read @@ -129,7 +204,34 @@ public static async Task ReadArrayAsync( ) => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadArrayAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : default(T[]?); + : null; + + /// + /// Read + /// + /// Stream + /// Array type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static async Task ReadArrayNullableAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadArrayAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + : null; /// /// Read @@ -141,21 +243,11 @@ public static async Task ReadArrayAsync( /// Value serializer options /// Value public static T[] ReadFixedArray(this Stream stream, T[] arr, int? version = null, ISerializerOptions? valueOptions = null) - { - try + => SerializerException.Wrap(() => { for (int i = 0; i < arr.Length; arr[i] = ReadObject(stream, version, valueOptions), i++) ; return arr; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read @@ -167,27 +259,17 @@ public static T[] ReadFixedArray(this Stream stream, T[] arr, int? version = /// Value serializer options /// Cancellation token /// Value - public static async Task ReadFixedArrayAsync( + public static Task ReadFixedArrayAsync( this Stream stream, T[] arr, int? version = null, ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - { - try + => SerializerException.WrapAsync(async () => { for (int i = 0; i < arr.Length; arr[i] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(), i++) ; return arr; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs index c89e18d..a5384ff 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs @@ -14,25 +14,9 @@ public static partial class StreamExtensions /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static bool ReadBool(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 - { - byte[] data = ReadSerializedData(stream, len: 1, pool); - try - { - return data[0] == 1; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(bool), version, pool, (data) => data[0] == 1); /// /// Read @@ -42,25 +26,9 @@ public static bool ReadBool(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadBoolAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: 1, pool, cancellationToken: cancellationToken).DynamicContext(); - try - { - return data[0] == 1; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadBoolAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(bool), version, pool, (data) => data[0] == 1, cancellationToken); /// /// Read @@ -71,7 +39,23 @@ public static async Task ReadBoolAsync(this Stream stream, int? version = /// Value [TargetedPatchingOptOut("Tiny method")] public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadBool(stream, version, pool) : default(bool?); + { + switch (version ??= StreamSerializer.VERSION) + { + case 1: + case 2: + return ReadBool(stream, version, pool) ? ReadBool(stream, version, pool) : null; + default: + ObjectTypes type = (ObjectTypes)ReadOneByte(stream, version); + return type switch + { + ObjectTypes.Null => null, + ObjectTypes.Bool => true, + ObjectTypes.Empty => false, + _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) + }; + } + } /// /// Read @@ -83,9 +67,25 @@ public static async Task ReadBoolAsync(this Stream stream, int? version = /// Value [TargetedPatchingOptOut("Tiny method")] public static async Task ReadBoolNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(bool?); + { + switch (version ??= StreamSerializer.VERSION) + { + case 1: + case 2: + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + : null; + default: + ObjectTypes type = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + return type switch + { + ObjectTypes.Null => null, + ObjectTypes.Bool => true, + ObjectTypes.Empty => false, + _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) + }; + } + } /// /// Read @@ -95,16 +95,7 @@ public static async Task ReadBoolAsync(this Stream stream, int? version = /// Value [TargetedPatchingOptOut("Tiny method")] public static sbyte ReadOneSByte(this Stream stream, int? version = null) - { - try - { - return (sbyte)ReadOneByte(stream, version); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + => (sbyte)ReadOneByte(stream, version); /// /// Read @@ -115,12 +106,9 @@ public static sbyte ReadOneSByte(this Stream stream, int? version = null) /// Value #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + public static Task ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) #pragma warning restore IDE0060 // Remove unused parameter - { - await Task.Yield(); - return ReadOneSByte(stream, version); - } + => Task.FromResult(ReadOneSByte(stream, version)); /// /// Read @@ -130,7 +118,7 @@ public static async Task ReadOneSByteAsync(this Stream stream, int? versi /// Value [TargetedPatchingOptOut("Tiny method")] public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null) - => ReadBool(stream, version) ? ReadOneSByte(stream, version) : default(sbyte?); + => ReadNullableNumeric(stream, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, version, pool: null, (data) => (sbyte)data[0]); /// /// Read @@ -140,10 +128,8 @@ public static async Task ReadOneSByteAsync(this Stream stream, int? versi /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadOneSByteAsync(stream, version, cancellationToken).DynamicContext() - : default(sbyte?); + public static Task ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, version, pool: null, (data) => Task.FromResult((sbyte)data[0]), cancellationToken); /// /// Read @@ -155,18 +141,12 @@ public static async Task ReadOneSByteAsync(this Stream stream, int? versi [TargetedPatchingOptOut("Tiny method")] public static byte ReadOneByte(this Stream stream, int? version = null) #pragma warning restore IDE0060 // Remove unused parameter - { - try + => SerializerException.Wrap(() => { int res = stream.ReadByte(); if (res < 0) throw new SerializerException("Failed to read one byte from stream"); return (byte)res; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read @@ -177,12 +157,9 @@ public static byte ReadOneByte(this Stream stream, int? version = null) /// Value #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + public static Task ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) #pragma warning restore IDE0060 // Remove unused parameter - { - await Task.Yield(); - return ReadOneByte(stream, version); - } + => Task.FromResult(ReadOneByte(stream, version)); /// /// Read @@ -192,7 +169,7 @@ public static async Task ReadOneByteAsync(this Stream stream, int? version /// Value [TargetedPatchingOptOut("Tiny method")] public static ushort? ReadOneByteNullable(this Stream stream, int? version = null) - => ReadBool(stream, version) ? ReadOneByte(stream, version) : default(ushort?); + => ReadNullableNumeric(stream, sizeof(byte), byte.MinValue, byte.MaxValue, version, pool: null, (data) => data[0]); /// /// Read @@ -202,10 +179,8 @@ public static async Task ReadOneByteAsync(this Stream stream, int? version /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() - : default(ushort?); + public static Task ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(byte), byte.MinValue, byte.MaxValue, version, pool: null, (data) => Task.FromResult(data[0]), cancellationToken); /// /// Read @@ -214,25 +189,9 @@ public static async Task ReadOneByteAsync(this Stream stream, int? version /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static short ReadShort(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(short), pool); - try - { - return data.AsSpan().ToShort(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(short), version, pool, (data) => data.AsSpan().ToShort()); /// /// Read @@ -242,25 +201,9 @@ public static short ReadShort(this Stream stream, int? version = null, ArrayPool /// Array pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(short), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToShort(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(short), version, pool, (data) => data.AsSpan().ToShort(), cancellationToken); /// /// Read @@ -271,7 +214,7 @@ public static async Task ReadShortAsync(this Stream stream, int? version /// Value [TargetedPatchingOptOut("Tiny method")] public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadShort(stream, version, pool) : default(short?); + => ReadNullableNumeric(stream, sizeof(short), short.MinValue, short.MaxValue, version, pool, (data) => data.AsSpan().ToShort()); /// /// Read @@ -282,10 +225,8 @@ public static async Task ReadShortAsync(this Stream stream, int? version /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadShortAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(short?); + public static Task ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(short), short.MinValue, short.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToShort()), cancellationToken); /// /// Read @@ -294,25 +235,9 @@ public static async Task ReadShortAsync(this Stream stream, int? version /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(ushort), pool); - try - { - return data.AsSpan().ToUShort(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(ushort), version, pool, (data) => data.AsSpan().ToUShort()); /// /// Read @@ -322,25 +247,9 @@ public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPo /// Array pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadUShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(ushort), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToUShort(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadUShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(ushort), version, pool, (data) => data.AsSpan().ToUShort(), cancellationToken); /// /// Read @@ -351,7 +260,7 @@ public static async Task ReadUShortAsync(this Stream stream, int? versio /// Value [TargetedPatchingOptOut("Tiny method")] public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadUShort(stream, version, pool) : default(ushort?); + => ReadNullableNumeric(stream, sizeof(ushort), ushort.MinValue, ushort.MaxValue, version, pool, (data) => data.AsSpan().ToUShort()); /// /// Read @@ -362,10 +271,8 @@ public static async Task ReadUShortAsync(this Stream stream, int? versio /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadUShortAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(ushort?); + public static Task ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(ushort), ushort.MinValue, ushort.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToUShort()), cancellationToken); /// /// Read @@ -374,25 +281,9 @@ public static async Task ReadUShortAsync(this Stream stream, int? versio /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static int ReadInt(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(int), pool); - try - { - return data.AsSpan().ToInt(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(int), version, pool, (data) => data.AsSpan().ToInt()); /// /// Read @@ -402,25 +293,9 @@ public static int ReadInt(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(int), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToInt(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(int), version, pool, (data) => data.AsSpan().ToInt(), cancellationToken); /// /// Read @@ -431,7 +306,7 @@ public static async Task ReadIntAsync(this Stream stream, int? version = nu /// Value [TargetedPatchingOptOut("Tiny method")] public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadInt(stream, version, pool) : default(int?); + => ReadNullableNumeric(stream, sizeof(int), int.MinValue, int.MaxValue, version, pool, (data) => data.AsSpan().ToInt()); /// /// Read @@ -442,10 +317,8 @@ public static async Task ReadIntAsync(this Stream stream, int? version = nu /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadIntAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(int?); + public static Task ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(int), int.MinValue, int.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToInt()), cancellationToken); /// /// Read @@ -454,25 +327,9 @@ public static async Task ReadIntAsync(this Stream stream, int? version = nu /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(uint), pool); - try - { - return data.AsSpan().ToUInt(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(uint), version, pool, (data) => data.AsSpan().ToUInt()); /// /// Read @@ -482,25 +339,9 @@ public static uint ReadUInt(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadUIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(uint), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToUInt(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadUIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(uint), version, pool, (data) => data.AsSpan().ToUInt(), cancellationToken); /// /// Read @@ -511,7 +352,7 @@ public static async Task ReadUIntAsync(this Stream stream, int? version = /// Value [TargetedPatchingOptOut("Tiny method")] public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadUInt(stream, version, pool) : default(uint?); + => ReadNullableNumeric(stream, sizeof(uint), uint.MinValue, uint.MaxValue, version, pool, (data) => data.AsSpan().ToUInt()); /// /// Read @@ -522,10 +363,8 @@ public static async Task ReadUIntAsync(this Stream stream, int? version = /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadUIntAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(uint?); + public static Task ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(uint), uint.MinValue, uint.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToUInt()), cancellationToken); /// /// Read @@ -534,25 +373,9 @@ public static async Task ReadUIntAsync(this Stream stream, int? version = /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static long ReadLong(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(long), pool); - try - { - return data.AsSpan().ToLong(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(long), version, pool, (data) => data.AsSpan().ToLong()); /// /// Read @@ -562,25 +385,9 @@ public static long ReadLong(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadLongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(long), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToLong(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadLongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(long), version, pool, (data) => data.AsSpan().ToLong(), cancellationToken); /// /// Read @@ -591,7 +398,7 @@ public static async Task ReadLongAsync(this Stream stream, int? version = /// Value [TargetedPatchingOptOut("Tiny method")] public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadLong(stream, version, pool) : default(long?); + => ReadNullableNumeric(stream, sizeof(long), long.MinValue, long.MaxValue, version, pool, (data) => data.AsSpan().ToLong()); /// /// Read @@ -602,10 +409,8 @@ public static async Task ReadLongAsync(this Stream stream, int? version = /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadLongAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(long?); + public static Task ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(long), long.MinValue, long.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToLong()), cancellationToken); /// /// Read @@ -614,25 +419,9 @@ public static async Task ReadLongAsync(this Stream stream, int? version = /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(ulong), pool); - try - { - return data.AsSpan().ToULong(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(ulong), version, pool, (data) => data.AsSpan().ToULong()); /// /// Read @@ -642,25 +431,9 @@ public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool /// Array pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadULongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(ulong), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToULong(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadULongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(ulong), version, pool, (data) => data.AsSpan().ToULong(), cancellationToken); /// /// Read @@ -671,7 +444,7 @@ public static async Task ReadULongAsync(this Stream stream, int? version /// Value [TargetedPatchingOptOut("Tiny method")] public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadULong(stream, version, pool) : default(ulong?); + => ReadNullableNumeric(stream, sizeof(ulong), ulong.MinValue, ulong.MaxValue, version, pool, (data) => data.AsSpan().ToULong()); /// /// Read @@ -682,10 +455,8 @@ public static async Task ReadULongAsync(this Stream stream, int? version /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadULongAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(ulong?); + public static Task ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(ulong), ulong.MinValue, ulong.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToULong()), cancellationToken); /// /// Read @@ -694,25 +465,9 @@ public static async Task ReadULongAsync(this Stream stream, int? version /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static float ReadFloat(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(float), pool); - try - { - return data.AsSpan().ToFloat(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(float), version, pool, (data) => data.AsSpan().ToFloat()); /// /// Read @@ -722,25 +477,9 @@ public static float ReadFloat(this Stream stream, int? version = null, ArrayPool /// Array pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadFloatAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(float), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToFloat(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadFloatAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(float), version, pool, (data) => data.AsSpan().ToFloat(), cancellationToken); /// /// Read @@ -751,7 +490,7 @@ public static async Task ReadFloatAsync(this Stream stream, int? version /// Value [TargetedPatchingOptOut("Tiny method")] public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadFloat(stream, version, pool) : default(float?); + => ReadNullableNumeric(stream, sizeof(float), float.MinValue, float.MaxValue, version, pool, (data) => data.AsSpan().ToFloat()); /// /// Read @@ -762,10 +501,8 @@ public static async Task ReadFloatAsync(this Stream stream, int? version /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadFloatAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(float?); + public static Task ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(float), float.MinValue, float.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToFloat()), cancellationToken); /// /// Read @@ -774,25 +511,9 @@ public static async Task ReadFloatAsync(this Stream stream, int? version /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static double ReadDouble(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(double), pool); - try - { - return data.AsSpan().ToDouble(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(double), version, pool, (data) => data.AsSpan().ToDouble()); /// /// Read @@ -802,25 +523,9 @@ public static double ReadDouble(this Stream stream, int? version = null, ArrayPo /// Array pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(double), pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToDouble(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumericAsync(stream, sizeof(double), version, pool, (data) => data.AsSpan().ToDouble(), cancellationToken); /// /// Read @@ -831,7 +536,7 @@ public static async Task ReadDoubleAsync(this Stream stream, int? versio /// Value [TargetedPatchingOptOut("Tiny method")] public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadDouble(stream, version, pool) : default(double?); + => ReadNullableNumeric(stream, sizeof(double), double.MinValue, double.MaxValue, version, pool, (data) => data.AsSpan().ToDouble()); /// /// Read @@ -842,10 +547,8 @@ public static async Task ReadDoubleAsync(this Stream stream, int? versio /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDoubleAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(double?); + public static Task ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNullableNumericAsync(stream, sizeof(double), double.MinValue, double.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToDouble()), cancellationToken); /// /// Read @@ -854,25 +557,9 @@ public static async Task ReadDoubleAsync(this Stream stream, int? versio /// Serializer version /// Array pool /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool? pool = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = ReadSerializedData(stream, len: sizeof(int) << 2, pool); - try - { - return data.AsSpan().ToDecimal(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + => ReadNumeric(stream, sizeof(decimal), version, pool, (data) => data.AsSpan().ToDecimal()); /// /// Read @@ -882,25 +569,14 @@ public static decimal ReadDecimal(this Stream stream, int? version = null, Array /// Array pool /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadDecimalAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - { - byte[] data = await ReadSerializedDataAsync(stream, len: sizeof(int) << 2, pool, cancellationToken).DynamicContext(); - try - { - return data.AsSpan().ToDecimal(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + public static Task ReadDecimalAsync( + this Stream stream, + int? version = null, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) + => ReadNumericAsync(stream, sizeof(decimal), version, pool, (data) => data.AsSpan().ToDecimal(), cancellationToken); /// /// Read @@ -911,7 +587,7 @@ public static async Task ReadDecimalAsync(this Stream stream, int? vers /// Value [TargetedPatchingOptOut("Tiny method")] public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadDecimal(stream, version, pool) : default(decimal?); + => ReadNullableNumeric(stream, sizeof(decimal), decimal.MinValue, decimal.MaxValue, version, pool, (data) => data.AsSpan().ToDecimal()); /// /// Read @@ -922,304 +598,167 @@ public static async Task ReadDecimalAsync(this Stream stream, int? vers /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadDecimalNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDecimalAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(decimal?); + public static Task ReadDecimalNullableAsync( + this Stream stream, + int? version = null, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) + => ReadNullableNumericAsync( + stream, + sizeof(decimal), + decimal.MinValue, + decimal.MaxValue, + version, + pool, + (data) => Task.FromResult(data.AsSpan().ToDecimal()), + cancellationToken + ); /// - /// Read + /// Read a numeric value /// + /// Numeric type /// Stream + /// Serialized data size in bytes /// Serializer version /// Array pool + /// Deserializer action /// Value - public static T ReadNumber(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible - => ReadNumberInt(stream, version, numberType: null, pool); - - /// - /// Read - /// - /// Stream - /// Serializer version - /// Number type - /// Array pool - /// Value - private static T ReadNumberInt(Stream stream, int? version, NumberTypes? numberType, ArrayPool? pool) where T : struct, IConvertible +#pragma warning disable IDE0060 // Remove unused parameter + [TargetedPatchingOptOut("Tiny method")] + private static T ReadNumeric(Stream stream, int size, int? version, ArrayPool? pool, Func action) where T : struct, IConvertible +#pragma warning restore IDE0060 // Remove unused parameter { - byte[] data = numberType == null ? ReadSerializedData(stream, len: 1, pool) : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); + byte[] data = ReadSerializedData(stream, size, pool); try { - NumberTypes type = numberType ?? (NumberTypes)data[0]; - if (type.IsZero()) return (T)Activator.CreateInstance(typeof(T))!; - switch (type.RemoveValueFlags()) - { - case NumberTypes.Byte: - switch (type) - { - case NumberTypes.Byte | NumberTypes.MinValue: - return (T)(object)sbyte.MinValue; - case NumberTypes.Byte | NumberTypes.MaxValue: - return (T)(object)sbyte.MaxValue; - } - if (stream.Read(data.AsSpan(0, 1)) != 1) throw new SerializerException("Failed to read serialized data (1 bytes)"); - return data[0].ConvertType(); - case NumberTypes.Byte | NumberTypes.Unsigned: - switch (type) - { - case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: - return (T)(object)byte.MaxValue; - } - if (stream.Read(data.AsSpan(0, 1)) != 1) throw new SerializerException("Failed to read serialized data (1 bytes)"); - return data[0].ConvertType(); - case NumberTypes.Short: - return type switch - { - NumberTypes.Short | NumberTypes.MinValue => (T)(object)short.MinValue, - NumberTypes.Short | NumberTypes.MaxValue => (T)(object)short.MaxValue, - _ => ReadShort(stream, version, pool).ConvertType() - }; - case NumberTypes.Short | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned => (T)(object)ushort.MaxValue, - _ => ReadUShort(stream, version, pool).ConvertType() - }; - case NumberTypes.Int: - return type switch - { - NumberTypes.Int | NumberTypes.MinValue => (T)(object)int.MinValue, - NumberTypes.Int | NumberTypes.MaxValue => (T)(object)int.MaxValue, - _ => ReadInt(stream, version, pool).ConvertType() - }; - case NumberTypes.Int | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned => (T)(object)uint.MaxValue, - _ => ReadUInt(stream, version, pool).ConvertType() - }; - case NumberTypes.Long: - return type switch - { - NumberTypes.Long | NumberTypes.MinValue => (T)(object)long.MinValue, - NumberTypes.Long | NumberTypes.MaxValue => (T)(object)long.MaxValue, - _ => ReadLong(stream, version, pool).ConvertType() - }; - case NumberTypes.Long | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned => (T)(object)ulong.MaxValue, - _ => ReadULong(stream, version, pool).ConvertType() - }; - case NumberTypes.Float: - return type switch - { - NumberTypes.Float | NumberTypes.MinValue => (T)(object)float.MinValue, - NumberTypes.Float | NumberTypes.MaxValue => (T)(object)float.MaxValue, - _ => ReadFloat(stream, version, pool).ConvertType() - }; - case NumberTypes.Double: - return type switch - { - NumberTypes.Double | NumberTypes.MinValue => (T)(object)double.MinValue, - NumberTypes.Double | NumberTypes.MaxValue => (T)(object)double.MaxValue, - _ => ReadDouble(stream, version, pool).ConvertType() - }; - case NumberTypes.Decimal: - return type switch - { - NumberTypes.Decimal | NumberTypes.MinValue => (T)(object)decimal.MinValue, - NumberTypes.Decimal | NumberTypes.MaxValue => (T)(object)decimal.MaxValue, - _ => ReadDecimal(stream, version, pool).ConvertType() - }; - default: - throw new SerializerException($"Unknown numeric type {type}"); - } - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); + return action(data); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data); + (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); } } /// - /// Read - /// - /// Stream - /// Serializer version - /// Array pool - /// Cancellation token - /// Value - public static Task ReadNumberAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - where T : struct, IConvertible - => ReadNumberIntAsync(stream, version, numberType: null, pool, cancellationToken); - - /// - /// Read + /// Read a numeric value /// + /// Numeric type /// Stream + /// Serialized data size in bytes /// Serializer version - /// Number type /// Array pool + /// Deserializer action /// Cancellation token /// Value - private static async Task ReadNumberIntAsync(Stream stream, int? version, NumberTypes? numberType, ArrayPool? pool, CancellationToken cancellationToken) +#pragma warning disable IDE0060 // Remove unused parameter + [TargetedPatchingOptOut("Tiny method")] + private static async Task ReadNumericAsync(Stream stream, int size, int? version, ArrayPool? pool, Func action, CancellationToken cancellationToken) +#pragma warning restore IDE0060 // Remove unused parameter where T : struct, IConvertible { - byte[] data = numberType == null - ? await ReadSerializedDataAsync(stream, len: 1, pool, cancellationToken).DynamicContext() - : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); + byte[] data = await ReadSerializedDataAsync(stream, size, pool, cancellationToken).DynamicContext(); try { - NumberTypes type = numberType ?? (NumberTypes)data[0]; - if (type.IsZero()) return (T)Activator.CreateInstance(typeof(T))!; - switch (type.RemoveValueFlags()) - { - case NumberTypes.Byte: - switch (type) - { - case NumberTypes.Byte | NumberTypes.MinValue: - return (T)(object)sbyte.MinValue; - case NumberTypes.Byte | NumberTypes.MaxValue: - return (T)(object)sbyte.MaxValue; - } - if (await stream.ReadAsync(data.AsMemory(0, 1), cancellationToken).DynamicContext() != 1) - throw new SerializerException("Failed to read serialized data (1 bytes)"); - return data[0].ConvertType(); - case NumberTypes.Byte | NumberTypes.Unsigned: - switch (type) - { - case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: - return (T)(object)byte.MaxValue; - } - if (await stream.ReadAsync(data.AsMemory(0, 1), cancellationToken).DynamicContext() != 1) - throw new SerializerException("Failed to read serialized data (1 bytes)"); - return data[0].ConvertType(); - case NumberTypes.Short: - return type switch - { - NumberTypes.Short | NumberTypes.MinValue => (T)(object)short.MinValue, - NumberTypes.Short | NumberTypes.MaxValue => (T)(object)short.MaxValue, - _ => (await ReadShortAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Short | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned => (T)(object)ushort.MaxValue, - _ => (await ReadUShortAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Int: - return type switch - { - NumberTypes.Int | NumberTypes.MinValue => (T)(object)int.MinValue, - NumberTypes.Int | NumberTypes.MaxValue => (T)(object)int.MaxValue, - _ => (await ReadIntAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Int | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned => (T)(object)uint.MaxValue, - _ => (await ReadUIntAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Long: - return type switch - { - NumberTypes.Long | NumberTypes.MinValue => (T)(object)long.MinValue, - NumberTypes.Long | NumberTypes.MaxValue => (T)(object)long.MaxValue, - _ => (await ReadLongAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Long | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned => (T)(object)ulong.MaxValue, - _ => (await ReadULongAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Float: - return type switch - { - NumberTypes.Float | NumberTypes.MinValue => (T)(object)float.MinValue, - NumberTypes.Float | NumberTypes.MaxValue => (T)(object)float.MaxValue, - _ => (await ReadFloatAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Double: - return type switch - { - NumberTypes.Double | NumberTypes.MinValue => (T)(object)double.MinValue, - NumberTypes.Double | NumberTypes.MaxValue => (T)(object)double.MaxValue, - _ => (await ReadDoubleAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - case NumberTypes.Decimal: - return type switch - { - NumberTypes.Decimal | NumberTypes.MinValue => (T)(object)decimal.MinValue, - NumberTypes.Decimal | NumberTypes.MaxValue => (T)(object)decimal.MaxValue, - _ => (await ReadDecimalAsync(stream, version, pool, cancellationToken).DynamicContext()).ConvertType() - }; - default: - throw new SerializerException($"Unknown numeric type {type}"); - } - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); + return action(data); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data); + (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); } } /// - /// Read + /// Read a nullable numeric /// + /// Numeric type /// Stream + /// Serialized data size in bytes + /// Minimum + /// Maximum /// Serializer version /// Array pool + /// Action to execute, if the red value isn't a default handleable numeric value /// Value - [TargetedPatchingOptOut("Tiny method")] - public static T? ReadNumberNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible + private static T? ReadNullableNumeric(Stream stream, int size, T min, T max, int? version, ArrayPool? pool, Func action) where T : struct, IConvertible { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch (version ??= StreamSerializer.VERSION) { case 1: - return ReadBool(stream, version, pool) ? ReadNumber(stream, version, pool) : null; + case 2: + if (!ReadBool(stream, version, pool)) return null; + break; default: + switch ((NumberTypes)ReadOneByte(stream, version)) { - using RentedArray buffer = new(len: 1, pool, clean: false); - NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); - return numberType == NumberTypes.Null ? default(T?) : ReadNumberInt(stream, version, numberType, pool); + case NumberTypes.Null: return null; + case NumberTypes.MinValue: return min; + case NumberTypes.MaxValue: return max; + case NumberTypes.Zero: return default(T); } + break; + } + byte[] data = ReadSerializedData(stream, size, pool); + try + { + return action(data); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); } } /// - /// Read + /// Read a nullable numeric /// + /// Numeric type /// Stream + /// Serialized data size in bytes + /// Minimum + /// Maximum /// Serializer version /// Array pool + /// Action to execute, if the red value isn't a default handleable numeric value /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadNumberNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + private static async Task ReadNullableNumericAsync( + Stream stream, + int size, + T min, + T max, + int? version, + ArrayPool? pool, + Func> action, + CancellationToken cancellationToken + ) where T : struct, IConvertible { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch (version ??= StreamSerializer.VERSION) { case 1: - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext() - : null; + case 2: + if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) return null; + break; default: + switch ((NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext()) { - using RentedArray buffer = new(len: 1, pool, clean: false); - NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null ? null : await ReadNumberIntAsync(stream, version, numberType, pool, cancellationToken).DynamicContext(); ; + case NumberTypes.Null: return null; + case NumberTypes.MinValue: return min; + case NumberTypes.MaxValue: return max; + case NumberTypes.Zero: return default(T); } + break; + } + byte[] data = await ReadSerializedDataAsync(stream, size, pool, cancellationToken).DynamicContext(); + try + { + return await action(data).DynamicContext(); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs index 717e4bb..606c491 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs @@ -17,30 +17,35 @@ public static partial class StreamExtensions /// Minimum length in bytes /// Maximum length in bytes /// Value and length - public static (byte[] Value, int Length) ReadBytes(this Stream stream, int? version = null, byte[]? buffer = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) + public static (byte[] Value, int Length) ReadBytes( + this Stream stream, + int? version = null, + byte[]? buffer = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue + ) { bool rented = false; try { - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) throw new ArgumentException($"Buffer too small ({len} bytes required)", nameof(buffer)); - if (len != 0 && stream.Read(buffer.AsSpan(0, len)) != len) throw new SerializerException($"Failed to read serialized data ({len} bytes)"); - return (buffer, len); + return SerializerException.Wrap(() => + { + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0 && buffer == null) buffer = Array.Empty(); + rented = buffer == null && pool != null; + buffer ??= rented ? pool!.Rent(len) : new byte[len]; + if (buffer.Length < len) throw new ArgumentException($"Buffer too small ({len} bytes required)", nameof(buffer)); + if (len != 0 && stream.Read(buffer.AsSpan(0, len)) != len) throw new SerializerException($"Failed to read serialized data ({len} bytes)"); + return (buffer, len); + }); } - catch (SerializerException) + catch { if (rented) pool!.Return(buffer!); throw; } - catch (Exception ex) - { - if (rented) pool!.Return(buffer!); - throw new SerializerException(message: null, ex); - } } /// @@ -67,26 +72,24 @@ public static (byte[] Value, int Length) ReadBytes(this Stream stream, int? vers bool rented = false; try { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) throw new ArgumentException($"Buffer too small ({len} bytes required)", nameof(buffer)); - if (len != 0 && await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext() != len) - throw new SerializerException($"Failed to read serialized data ({len} bytes)"); - return (buffer, len); + return await SerializerException.WrapAsync(async () => + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0 && buffer == null) buffer = Array.Empty(); + rented = buffer == null && pool != null; + buffer ??= rented ? pool!.Rent(len) : new byte[len]; + if (buffer.Length < len) throw new ArgumentException($"Buffer too small ({len} bytes required)", nameof(buffer)); + if (len != 0 && await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext() != len) + throw new SerializerException($"Failed to read serialized data ({len} bytes)"); + return (buffer, len); + }).DynamicContext(); } - catch (SerializerException) + catch { if (rented) pool!.Return(buffer!); throw; } - catch (Exception ex) - { - if (rented) pool!.Return(buffer!); - throw new SerializerException(message: null, ex); - } } /// @@ -108,7 +111,7 @@ public static (byte[] Value, int Length)? ReadBytesNullable( int minLen = 0, int maxLen = int.MaxValue ) - => ReadBool(stream, version, pool) ? ReadBytes(stream, version, buffer, pool, minLen, maxLen) : default((byte[] Value, int Length)?); + => ReadBool(stream, version, pool) ? ReadBytes(stream, version, buffer, pool, minLen, maxLen) : null; /// /// Read @@ -133,6 +136,6 @@ public static (byte[] Value, int Length)? ReadBytesNullable( ) => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadBytesAsync(stream, version, buffer, pool, minLen, maxLen, cancellationToken).DynamicContext() - : default((byte[] Value, int Length)?); + : null; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs index 02a404c..e69c467 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs @@ -1,4 +1,5 @@ using System.Buffers; +using System.Collections; using System.Runtime; using wan24.Core; @@ -30,8 +31,7 @@ public static Dictionary ReadDict( ISerializerOptions? valueOptions = null ) where tKey : notnull - { - try + => SerializerException.Wrap(() => { int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); @@ -40,16 +40,46 @@ public static Dictionary ReadDict( res[ReadObject(stream, version, keyOptions)] = ReadObject(stream, version, valueOptions); return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + }); + + /// + /// Read + /// + /// Stream + /// Dictionary type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Key serializer options + /// Value serializer options + /// Value + public static IDictionary ReadDict( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? keyOptions = null, + ISerializerOptions? valueOptions = null + ) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - } + ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a dictionary type" + ); + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type[] types = type.GetGenericArguments(); + IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; i++) + res[ReadObject(stream, types[0], version, keyOptions)] + = ReadObject(stream, types[1], version, valueOptions); + return res; + }); /// /// Read @@ -65,7 +95,7 @@ public static Dictionary ReadDict( /// Value serializer options /// Cancellation token /// Value - public static async Task> ReadDictAsync( + public static Task> ReadDictAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -76,8 +106,7 @@ public static async Task> ReadDictAsync( CancellationToken cancellationToken = default ) where tKey : notnull - { - try + => SerializerException.WrapAsync(async () => { int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); @@ -86,16 +115,48 @@ public static async Task> ReadDictAsync( res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken).DynamicContext()] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + }); + + /// + /// Read + /// + /// Stream + /// Dictionary type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Key serializer options + /// Value serializer options + /// Cancellation token + /// Value + public static Task ReadDictAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? keyOptions = null, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a dictionary type" + ); + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type[] types = type.GetGenericArguments(); + IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; i++) + res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationToken).DynamicContext()] + = await ReadObjectAsync(stream, types[1], version, valueOptions, cancellationToken).DynamicContext(); + return res; + }); /// /// Read @@ -121,9 +182,32 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). ISerializerOptions? valueOptions = null ) where tKey : notnull -#pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version, pool) ? ReadDict(stream, version, pool, minLen, maxLen, keyOptions, valueOptions) : default(Dictionary?); -#pragma warning restore IDE0034 // default expression can be simplified + => ReadBool(stream, version, pool) ? ReadDict(stream, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; + + /// + /// Read + /// + /// Stream + /// Dictionary type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Key serializer options + /// Value serializer options + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static IDictionary? ReadDictNullable( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? keyOptions = null, + ISerializerOptions? valueOptions = null + ) + => ReadBool(stream, version, pool) ? ReadDict(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; /// /// Read @@ -153,6 +237,35 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). where tKey : notnull => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadDictAsync(stream, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() - : default(Dictionary?); + : null; + + /// + /// Read + /// + /// Stream + /// Dictionary type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Key serializer options + /// Value serializer options + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static async Task ReadDictNullableAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? keyOptions = null, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadDictAsync(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() + : null; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs index 647fc32..ba75252 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs @@ -16,40 +16,44 @@ public static partial class StreamExtensions /// Array pool /// Value public static T ReadEnum(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum - => ReadEnumInt(stream, version, numberType: null, pool); + => (T)ReadEnumInt(stream, typeof(T), version, numberType: null, pool); + + /// + /// Read + /// + /// Stream + /// Enumeration type + /// Serializer version + /// Array pool + /// Value + public static Enum ReadEnum(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) + => ReadEnumInt(stream, type, version, numberType: null, pool); /// /// Read /// - /// Enumeration type /// Stream + /// Enumeration type /// Serializer version /// Number type /// Array pool /// Value - private static T ReadEnumInt(Stream stream, int? version, NumberTypes? numberType, ArrayPool? pool) where T : struct, Enum - { - try + private static Enum ReadEnumInt(Stream stream, Type type, int? version, NumberTypes? numberType, ArrayPool? pool) + => SerializerException.Wrap(() => { - if ((numberType ?? NumberTypes.None) == NumberTypes.Default) return default; + IEnumInfo info = type.GetEnumInfo(); + if ((numberType ?? NumberTypes.None) == NumberTypes.Default) + return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); numberType ??= (NumberTypes)ReadOneByte(stream, version); - if ((version ?? StreamSerializer.VERSION) > 1 && numberType == NumberTypes.Default) return default; - T res = (T)Enum.ToObject( - typeof(T), - ReadNumberIntMethod.MakeGenericMethod(typeof(T).GetEnumUnderlyingType()).InvokeAuto(obj: null, stream, version, numberType, pool)! + if ((version ?? StreamSerializer.VERSION) > 1 && numberType == NumberTypes.Default) + return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + Enum res = (Enum)Enum.ToObject( + type, + ReadNumber(stream, type.GetEnumUnderlyingType()!, version, pool) ); - if (!res.IsValid()) throw new SerializerException($"Unknown enumeration value {res} for {typeof(T)}"); + if (!info.IsValidEnumerationValue()) throw new SerializerException($"Unknown enumeration value {res} for {type}"); return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read @@ -60,44 +64,44 @@ private static T ReadEnumInt(Stream stream, int? version, NumberTypes? number /// Array pool /// Cancellation token /// Value - public static Task ReadEnumAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + public static async Task ReadEnumAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) where T : struct, Enum - => ReadEnumIntAsync(stream, version, numberType: null, pool, cancellationToken); + => (T)await ReadEnumIntAsync(stream, typeof(T), version, numberType: null, pool, cancellationToken).DynamicContext(); /// /// Read /// - /// Enumeration type /// Stream + /// Enumeration type + /// Serializer version + /// Array pool + /// Cancellation token + /// Value + public static Task ReadEnumAsync(this Stream stream, Type type, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadEnumIntAsync(stream, type, version, numberType: null, pool, cancellationToken); + + /// + /// Read + /// + /// Stream + /// Enumeration type /// Serializer version /// Number type /// Array pool /// Cancellation token /// Value - private static async Task ReadEnumIntAsync(Stream stream, int? version, NumberTypes? numberType, ArrayPool? pool, CancellationToken cancellationToken) - where T : struct, Enum - { - try + private static Task ReadEnumIntAsync(Stream stream, Type type, int? version, NumberTypes? numberType, ArrayPool? pool, CancellationToken cancellationToken) + => SerializerException.WrapAsync(async () => { - if ((numberType ?? NumberTypes.None) == NumberTypes.Default) return default; + if ((numberType ?? NumberTypes.None) == NumberTypes.Default) + return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); numberType ??= (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - if ((version ?? StreamSerializer.VERSION) > 1 && numberType == NumberTypes.Default) return default; - Type type = typeof(T).GetEnumUnderlyingType(); - Task task = (Task)ReadNumberIntAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, version, numberType, pool, cancellationToken)!; - await task.DynamicContext(); - T res = (T)Enum.ToObject(typeof(T), task.GetResult(type)); - if (!res.IsValid()) throw new SerializerException($"Unknown enumeration value {res} for {typeof(T)}"); + if ((version ?? StreamSerializer.VERSION) > 1 && numberType == NumberTypes.Default) + return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + Enum res = (Enum)Enum.ToObject(type, await ReadNumberIntAsync(stream, type.GetEnumUnderlyingType(), version, numberType, pool, cancellationToken).DynamicContext()); + if (!res.IsValidEnumerationValue()) throw new SerializerException($"Unknown enumeration value {res} for {type}"); return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read @@ -109,16 +113,43 @@ private static async Task ReadEnumIntAsync(Stream stream, int? version, Nu /// Value [TargetedPatchingOptOut("Tiny method")] public static T? ReadEnumNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum - { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + => SerializerException.Wrap(() => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return ReadBool(stream, version, pool) ? ReadEnum(stream, version, pool) : null; + default: + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); + return numberType == NumberTypes.Null ? null : (T?)ReadEnumInt(stream, typeof(T), version, numberType, pool); + } + }); + + /// + /// Read + /// + /// Stream + /// Enumeration type + /// Serializer version + /// Array pool + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static Enum? ReadEnumNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) + => SerializerException.Wrap(() => { - case 1: - return ReadBool(stream, version, pool) ? ReadEnum(stream, version, pool) : default(T?); - default: - NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); - return numberType == NumberTypes.Null ? default(T?) : ReadEnumInt(stream, version, numberType, pool); - } - } + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return ReadBool(stream, version, pool) + ? ReadEnum(stream, type, version, pool) + : (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + default: + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); + return numberType == NumberTypes.Null + ? (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")) + : ReadEnumInt(stream, type, version, numberType, pool); + } + }); /// /// Read @@ -130,19 +161,55 @@ private static async Task ReadEnumIntAsync(Stream stream, int? version, Nu /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadEnumNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + public static Task ReadEnumNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) where T : struct, Enum - { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + => SerializerException.WrapAsync(async () => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext() + : default(T?); + default: + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + return numberType == NumberTypes.Null + ? default(T?) + : (T)await ReadEnumIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken).DynamicContext(); + } + }); + + /// + /// Read + /// + /// Stream + /// Enumeration type + /// Serializer version + /// Array pool + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static Task ReadEnumNullableAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) + => SerializerException.WrapAsync(async () => { - case 1: - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(T?); - default: - NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null ? default(T?) : await ReadEnumIntAsync(stream, version, numberType, pool, cancellationToken).DynamicContext(); - } - } + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadEnumAsync(stream, type, version, pool, cancellationToken).DynamicContext() + : (Enum?)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + default: + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + return numberType == NumberTypes.Null + ? (Enum?)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")) + : await ReadEnumIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); + } + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs index 0e2b1db..98e8cfb 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs @@ -1,4 +1,5 @@ using System.Buffers; +using System.Collections; using System.Runtime; using wan24.Core; @@ -26,25 +27,51 @@ public static List ReadList( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - { - if (typeof(T) == typeof(byte)) return new List((ReadBytes(stream, version, buffer: null, pool, minLen, maxLen) as T[])!); - try + => SerializerException.Wrap(() => { + if (typeof(T) == typeof(byte)) return new List((ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value as T[])!); int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); for (int i = 0; i < len; res.Add(ReadObject(stream, version, valueOptions)), i++) ; return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + }); + + /// + /// Read + /// + /// Stream + /// List type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Value + public static IList ReadList( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null + ) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - } + if (type.GetElementType() == typeof(byte)) return new List(ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value); + ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a list type" + ); + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type itemType = type.GetGenericArgumentsCached()[0]; + IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; res.Add(ReadObject(stream, itemType, version, valueOptions)), i++) ; + return res; + }); /// /// Read @@ -58,7 +85,7 @@ public static List ReadList( /// Value serializer options /// Cancellation token /// Value - public static async Task> ReadListAsync( + public static Task> ReadListAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -67,26 +94,55 @@ public static async Task> ReadListAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - { - if (typeof(T) == typeof(byte)) - return new List((await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!); - try + => SerializerException.WrapAsync(async () => { + if (typeof(T) == typeof(byte)) + return new List((await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!); int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext()), i++) ; return res; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + }); + + /// + /// Read + /// + /// Stream + /// List type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Cancellation token + /// Value + public static Task ReadListAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + if (type.GetElementType() == typeof(byte)) + return new List((await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext()).Value); + ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a list type" + ); + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type itemType = type.GetGenericArgumentsCached()[0]; + IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, itemType, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + return res; + }); /// /// Read @@ -108,9 +164,30 @@ public static async Task> ReadListAsync( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) -#pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version, pool) ? ReadList(stream, version, pool, minLen, maxLen, valueOptions) : default(List?); -#pragma warning restore IDE0034 // default expression can be simplified + => ReadBool(stream, version, pool) ? ReadList(stream, version, pool, minLen, maxLen, valueOptions) : null; + + /// + /// Read + /// + /// Stream + /// List type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static IList? ReadListNullable( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null + ) + => ReadBool(stream, version, pool) ? ReadList(stream, type, version, pool, minLen, maxLen, valueOptions) : null; /// /// Read @@ -136,6 +213,33 @@ public static async Task> ReadListAsync( ) => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadListAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : default(List?); + : null; + + /// + /// Read + /// + /// Stream + /// List type + /// Serializer version + /// Array pool + /// Minimum length + /// Maximum length + /// Value serializer options + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static async Task ReadListNullableAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + int minLen = 0, + int maxLen = int.MaxValue, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadListAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + : null; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs new file mode 100644 index 0000000..6ba5c6b --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs @@ -0,0 +1,396 @@ +using System.Buffers; +using System.Runtime; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Number + public static partial class StreamExtensions + { + /// + /// Read + /// + /// Stream + /// Serializer version + /// Array pool + /// Value + public static T ReadNumber(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible + => (T)ReadNumberInt(stream, typeof(T), version, numberType: null, pool); + + /// + /// Read + /// + /// Stream + /// Number type + /// Serializer version + /// Array pool + /// Value + public static object ReadNumber(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) + => ReadNumberInt(stream, type, version, numberType: null, pool); + + /// + /// Read + /// + /// Stream + /// Resulting number type + /// Serializer version + /// Number type + /// Array pool + /// Value + private static object ReadNumberInt(Stream stream, Type resType, int? version, NumberTypes? numberType, ArrayPool? pool) + => SerializerException.Wrap(() => + { + ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), "Not a valid number type"); + byte[] data = numberType == null ? ReadSerializedData(stream, len: 1, pool) : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); + try + { + NumberTypes type = numberType ?? (NumberTypes)data[0]; + if (type.IsZero()) return Activator.CreateInstance(resType)!; + switch (type.RemoveValueFlags()) + { + case NumberTypes.Byte: + switch (type) + { + case NumberTypes.Byte | NumberTypes.MinValue: + return Convert.ChangeType(sbyte.MinValue, resType); + case NumberTypes.Byte | NumberTypes.MaxValue: + return Convert.ChangeType(sbyte.MaxValue, resType); + } + if (stream.Read(data.AsSpan(0, 1)) != 1) throw new SerializerException("Failed to read serialized data (1 bytes)"); + return Convert.ChangeType(data[0], resType); + case NumberTypes.Byte | NumberTypes.Unsigned: + switch (type) + { + case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: + return Convert.ChangeType(byte.MaxValue, resType); + } + if (stream.Read(data.AsSpan(0, 1)) != 1) throw new SerializerException("Failed to read serialized data (1 bytes)"); + return Convert.ChangeType(data[0], resType); + case NumberTypes.Short: + return type switch + { + NumberTypes.Short | NumberTypes.MinValue => Convert.ChangeType(short.MinValue, resType), + NumberTypes.Short | NumberTypes.MaxValue => Convert.ChangeType(short.MaxValue, resType), + _ => Convert.ChangeType(ReadShort(stream, version, pool), resType) + }; + case NumberTypes.Short | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ushort.MaxValue, resType), + _ => Convert.ChangeType(ReadUShort(stream, version, pool), resType) + }; + case NumberTypes.Int: + return type switch + { + NumberTypes.Int | NumberTypes.MinValue => Convert.ChangeType(int.MinValue, resType), + NumberTypes.Int | NumberTypes.MaxValue => Convert.ChangeType(int.MaxValue, resType), + _ => Convert.ChangeType(ReadInt(stream, version, pool), resType) + }; + case NumberTypes.Int | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(uint.MaxValue, resType), + _ => Convert.ChangeType(ReadUInt(stream, version, pool), resType) + }; + case NumberTypes.Long: + return type switch + { + NumberTypes.Long | NumberTypes.MinValue => Convert.ChangeType(long.MinValue, resType), + NumberTypes.Long | NumberTypes.MaxValue => Convert.ChangeType(long.MaxValue, resType), + _ => Convert.ChangeType(ReadLong(stream, version, pool), resType) + }; + case NumberTypes.Long | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ulong.MaxValue, resType), + _ => Convert.ChangeType(ReadULong(stream, version, pool), resType) + }; + case NumberTypes.Float: + return type switch + { + NumberTypes.Float | NumberTypes.MinValue => Convert.ChangeType(float.MinValue, resType), + NumberTypes.Float | NumberTypes.MaxValue => Convert.ChangeType(float.MaxValue, resType), + _ => Convert.ChangeType(ReadFloat(stream, version, pool), resType) + }; + case NumberTypes.Double: + return type switch + { + NumberTypes.Double | NumberTypes.MinValue => Convert.ChangeType(double.MinValue, resType), + NumberTypes.Double | NumberTypes.MaxValue => Convert.ChangeType(double.MaxValue, resType), + _ => Convert.ChangeType(ReadDouble(stream, version, pool), resType) + }; + case NumberTypes.Decimal: + return type switch + { + NumberTypes.Decimal | NumberTypes.MinValue => Convert.ChangeType(decimal.MinValue, resType), + NumberTypes.Decimal | NumberTypes.MaxValue => Convert.ChangeType(decimal.MaxValue, resType), + _ => Convert.ChangeType(ReadDecimal(stream, version, pool), resType) + }; + default: + throw new SerializerException($"Unknown numeric type {type}"); + } + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); + + /// + /// Read + /// + /// Stream + /// Serializer version + /// Array pool + /// Cancellation token + /// Value + public static async Task ReadNumberAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + where T : struct, IConvertible + => (T)await ReadNumberIntAsync(stream, typeof(T), version, numberType: null, pool, cancellationToken).DynamicContext(); + + /// + /// Read + /// + /// Stream + /// Number type + /// Serializer version + /// Array pool + /// Cancellation token + /// Value + public static Task ReadNumberAsync(this Stream stream, Type type, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => ReadNumberIntAsync(stream, type, version, numberType: null, pool, cancellationToken); + + /// + /// Read + /// + /// Stream + /// Resulting number type + /// Serializer version + /// Number type + /// Array pool + /// Cancellation token + /// Value + private static Task ReadNumberIntAsync( + Stream stream, + Type resType, + int? version, + NumberTypes? numberType, + ArrayPool? pool, + CancellationToken cancellationToken + ) + => SerializerException.WrapAsync(async () => + { + ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), "Not a valid number type"); + byte[] data = numberType == null + ? await ReadSerializedDataAsync(stream, len: 1, pool, cancellationToken).DynamicContext() + : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); + try + { + NumberTypes type = numberType ?? (NumberTypes)data[0]; + if (type.IsZero()) return Activator.CreateInstance(resType)!; + switch (type.RemoveValueFlags()) + { + case NumberTypes.Byte: + switch (type) + { + case NumberTypes.Byte | NumberTypes.MinValue: + return Convert.ChangeType(sbyte.MinValue, resType); + case NumberTypes.Byte | NumberTypes.MaxValue: + return Convert.ChangeType(sbyte.MaxValue, resType); + } + if (await stream.ReadAsync(data.AsMemory(0, 1), cancellationToken).DynamicContext() != 1) + throw new SerializerException("Failed to read serialized data (1 bytes)"); + return Convert.ChangeType(data[0], resType); + case NumberTypes.Byte | NumberTypes.Unsigned: + switch (type) + { + case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: + return Convert.ChangeType(byte.MaxValue, resType); + } + if (await stream.ReadAsync(data.AsMemory(0, 1), cancellationToken).DynamicContext() != 1) + throw new SerializerException("Failed to read serialized data (1 bytes)"); + return Convert.ChangeType(data[0], resType); + case NumberTypes.Short: + return type switch + { + NumberTypes.Short | NumberTypes.MinValue => Convert.ChangeType(short.MinValue, resType), + NumberTypes.Short | NumberTypes.MaxValue => Convert.ChangeType(short.MaxValue, resType), + _ => Convert.ChangeType(await ReadShortAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Short | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ushort.MaxValue, resType), + _ => Convert.ChangeType(await ReadUShortAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Int: + return type switch + { + NumberTypes.Int | NumberTypes.MinValue => Convert.ChangeType(int.MinValue, resType), + NumberTypes.Int | NumberTypes.MaxValue => Convert.ChangeType(int.MaxValue, resType), + _ => Convert.ChangeType(await ReadIntAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Int | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(uint.MaxValue, resType), + _ => Convert.ChangeType(await ReadUIntAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Long: + return type switch + { + NumberTypes.Long | NumberTypes.MinValue => Convert.ChangeType(long.MinValue, resType), + NumberTypes.Long | NumberTypes.MaxValue => Convert.ChangeType(long.MaxValue, resType), + _ => Convert.ChangeType(await ReadLongAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Long | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ulong.MaxValue, resType), + _ => Convert.ChangeType(await ReadULongAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Float: + return type switch + { + NumberTypes.Float | NumberTypes.MinValue => Convert.ChangeType(float.MinValue, resType), + NumberTypes.Float | NumberTypes.MaxValue => Convert.ChangeType(float.MaxValue, resType), + _ => Convert.ChangeType(await ReadFloatAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Double: + return type switch + { + NumberTypes.Double | NumberTypes.MinValue => Convert.ChangeType(double.MinValue, resType), + NumberTypes.Double | NumberTypes.MaxValue => Convert.ChangeType(double.MaxValue, resType), + _ => Convert.ChangeType(await ReadDoubleAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + case NumberTypes.Decimal: + return type switch + { + NumberTypes.Decimal | NumberTypes.MinValue => Convert.ChangeType(decimal.MinValue, resType), + NumberTypes.Decimal | NumberTypes.MaxValue => Convert.ChangeType(decimal.MaxValue, resType), + _ => Convert.ChangeType(await ReadDecimalAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + }; + default: + throw new SerializerException($"Unknown numeric type {type}"); + } + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); + + /// + /// Read + /// + /// Stream + /// Serializer version + /// Array pool + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static T? ReadNumberNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible + => SerializerException.Wrap(() => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return ReadBool(stream, version, pool) ? ReadNumber(stream, version, pool) : null; + default: + { + using RentedArray buffer = new(len: 1, pool, clean: false); + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); + return numberType == NumberTypes.Null ? null : (T?)ReadNumberInt(stream, typeof(T), version, numberType, pool); + } + } + }); + + /// + /// Read + /// + /// Stream + /// Number type + /// Serializer version + /// Array pool + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static object? ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) + => SerializerException.Wrap(() => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return ReadBool(stream, version, pool) ? ReadNumber(stream, type, version, pool) : null; + default: + { + using RentedArray buffer = new(len: 1, pool, clean: false); + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); + return numberType == NumberTypes.Null ? null : ReadNumberInt(stream, type, version, numberType, pool); + } + } + }); + + /// + /// Read + /// + /// Number type + /// Stream + /// Serializer version + /// Array pool + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static Task ReadNumberNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + where T : struct, IConvertible + => SerializerException.WrapAsync(async () => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext() + : null; + default: + { + using RentedArray buffer = new(len: 1, pool, clean: false); + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + return numberType == NumberTypes.Null ? null : (T?)await ReadNumberIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken) + .DynamicContext(); ; + } + } + }); + + /// + /// Read + /// + /// Stream + /// Number type + /// Serializer version + /// Array pool + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static Task ReadNumberNullableAsync( + this Stream stream, + Type type, + int? version = null, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) + => SerializerException.WrapAsync(async () => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + { + case 1: + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadNumberAsync(stream, type, version, pool, cancellationToken).DynamicContext() + : null; + default: + { + using RentedArray buffer = new(len: 1, pool, clean: false); + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + return numberType == NumberTypes.Null ? null : await ReadNumberIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); ; + } + } + }); + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs index 49a3be7..2ac7ec0 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs @@ -10,7 +10,6 @@ namespace wan24.StreamSerializerExtensions // Object public static partial class StreamExtensions { - /// /// Read /// @@ -21,22 +20,31 @@ public static partial class StreamExtensions /// Value [TargetedPatchingOptOut("Tiny method")] public static T ReadObject(this Stream stream, int? version = null, ISerializerOptions? options = null) - { - if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) return (T)ReadSerializedObject(stream, typeof(T), version); - StreamSerializer.Deserialize_Delegate deserializer = StreamSerializer.FindDeserializer(typeof(T)) ?? throw new SerializerException("No deserializer found"); - try + => SerializerException.Wrap(() => { + if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) return (T)ReadSerializedObject(stream, typeof(T), version); + StreamSerializer.Deserialize_Delegate deserializer = StreamSerializer.FindDeserializer(typeof(T)) + ?? throw new SerializerException($"No deserializer found for {typeof(T)}"); return (T)(deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{typeof(T)} deserialized to NULL")); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + }); + + /// + /// Read + /// + /// Stream + /// Type + /// Serializer version + /// Options + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static object ReadObject(this Stream stream, Type type, int? version = null, ISerializerOptions? options = null) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - } + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); + StreamSerializer.Deserialize_Delegate deserializer = StreamSerializer.FindDeserializer(type) + ?? throw new SerializerException($"No deserializer found for {type}"); + return deserializer(stream, type, version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{type} deserialized to NULL"); + }); /// /// Read @@ -48,30 +56,45 @@ public static T ReadObject(this Stream stream, int? version = null, ISerializ /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadObjectAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) - { - if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) - return (T)await ReadSerializedObjectAsync(stream, typeof(T), version, cancellationToken).DynamicContext(); - if (StreamSerializer.FindAsyncDeserializer(typeof(T)) is not StreamSerializer.AsyncDeserialize_Delegate deserializer) - { - await Task.Yield(); - return ReadObject(stream, version, options); - } - try + public static Task ReadObjectAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { + if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) + return (T)await ReadSerializedObjectAsync(stream, typeof(T), version, cancellationToken).DynamicContext(); + if (StreamSerializer.FindAsyncDeserializer(typeof(T)) is not StreamSerializer.AsyncDeserialize_Delegate deserializer) + return ReadObject(stream, version, options); Task task = deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options, cancellationToken); await task.DynamicContext(); - return task.GetResultNullable() ?? throw new SerializerException($"{typeof(T)} deserialized to NULL"); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + return task.GetResult(); + }); + + /// + /// Read + /// + /// Stream + /// Type + /// Serializer version + /// Options + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static Task ReadObjectAsync( + this Stream stream, + Type type, + int? version = null, + ISerializerOptions? options = null, + CancellationToken cancellationToken = default + ) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + if (typeof(IStreamSerializer).IsAssignableFrom(type)) + return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); + if (StreamSerializer.FindAsyncDeserializer(type) is not StreamSerializer.AsyncDeserialize_Delegate deserializer) + return ReadObject(stream, type, version, options); + Task task = deserializer(stream, type, version ?? StreamSerializer.Version, options, cancellationToken); + await task.DynamicContext(); + return task.GetResult(type); + }); /// /// Read @@ -87,6 +110,18 @@ public static async Task ReadObjectAsync(this Stream stream, int? version => ReadBool(stream, version) ? ReadObject(stream, version, options) : default(T?); #pragma warning restore IDE0034 // default expression can be simplified + /// + /// Read + /// + /// Stream + /// Object type + /// Serializer version + /// Options + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static object? ReadObjectNullable(this Stream stream, Type type, int? version = null, ISerializerOptions? options = null) + => ReadBool(stream, version) ? ReadObject(stream, type, version, options) : null; + /// /// Read /// @@ -97,13 +132,39 @@ public static async Task ReadObjectAsync(this Stream stream, int? version /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadObjectNullableAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) + public static async Task ReadObjectNullableAsync( + this Stream stream, + int? version = null, + ISerializerOptions? options = null, + CancellationToken cancellationToken = default + ) => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() ? await ReadObjectAsync(stream, version, options, cancellationToken).DynamicContext() #pragma warning disable IDE0034 // default expression can be simplified : default(T?); #pragma warning restore IDE0034 // default expression can be simplified + /// + /// Read + /// + /// Stream + /// Object type + /// Serializer version + /// Options + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + public static async Task ReadObjectNullableAsync( + this Stream stream, + Type type, + int? version = null, + ISerializerOptions? options = null, + CancellationToken cancellationToken = default + ) + => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ? await ReadObjectAsync(stream, type, version, options, cancellationToken).DynamicContext() + : null; + /// /// Read any object /// @@ -112,35 +173,98 @@ public static async Task ReadObjectAsync(this Stream stream, int? version /// Serializer version /// Object public static T ReadAnyObject(this Stream stream, int? version = null) where T : class, new() - { - Type type = typeof(T); - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (T)ReadSerializedMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, version)!; - StreamSerializerAttribute? attr = type.GetCustomAttribute(), - objAttr; - if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {typeof(T)} requires the {typeof(StreamSerializerAttribute)}"); - PropertyInfo[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); - int count = ReadNumber(stream, version), - done = 0; - if (count != pis.Length) throw new SerializerException($"The serialized type has only {count} properties, while {type} has {pis.Length} properties"); - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - T res = new(); - for (; done < count; done++) + => SerializerException.Wrap(() => { - objAttr = pis[done].GetCustomAttribute(); - if (useChecksum && !(objAttr?.SkipPropertyNameChecksum ?? false) && ReadOneByte(stream, version) != Encoding.UTF8.GetBytes(pis[done].Name).Aggregate((c, b) => (byte)(c ^ b))) - throw new SerializerException($"{type}.{pis[done].Name} property name checksum mismatch"); - pis[done].SetValue( - res, - Nullable.GetUnderlyingType(pis[done].PropertyType) == null - ? ReadAnyMethod.InvokeAuto(obj: null, stream, version) - : ReadAnyNullableMethod.InvokeAuto(obj: null, stream, version) - ); - } - List results = new(); - if (!res.TryValidateObject(results)) - throw new SerializerException($"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})"); - return res; - } + // Handle serializable type + Type type = typeof(T); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (T)ReadSerializedObject(stream, type, version); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); + int count = ReadNumber(stream, version); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + T res = new(); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? ReadAnyNullable(stream, version) + : ReadAny(stream, version) + ); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); + + /// + /// Read any object + /// + /// Stream + /// Object type + /// Serializer version + /// Object + public static object ReadAnyObject(this Stream stream, Type type, int? version = null) + => SerializerException.Wrap(() => + { + // Handle serializable type + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); + int count = ReadNumber(stream, version); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? ReadAnyNullable(stream, version) + : ReadAny(stream, version) + ); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read any object @@ -150,43 +274,108 @@ public static async Task ReadObjectAsync(this Stream stream, int? version /// Serializer version /// Cancellation token /// Object - public static async Task ReadAnyObjectAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, new() - { - Type type = typeof(T); - Task task; - if (typeof(IStreamSerializer).IsAssignableFrom(type)) + public static Task ReadAnyObjectAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, new() + => SerializerException.WrapAsync(async () => { - task = (Task)ReadSerializedAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, version, cancellationToken)!; - await task.DynamicContext(); - return task.GetResult(); - } - StreamSerializerAttribute? attr = type.GetCustomAttribute(), - objAttr; - if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {typeof(T)} requires the {typeof(StreamSerializerAttribute)}"); - PropertyInfo[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); - int count = ReadNumber(stream, version), - done = 0; - if (count != pis.Length) throw new SerializerException($"The serialized type has only {count} properties, while {type} has {pis.Length} properties"); - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false), - isNullable; - T res = new(); - for (; done < count; done++) + // Handle serializable type + Type type = typeof(T); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) + return (T)await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( + type, + await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ).ToArray(); + int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + T res = new(); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); + + /// + /// Read any object + /// + /// Stream + /// Object type + /// Serializer version + /// Cancellation token + /// Object + public static Task ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { - objAttr = pis[done].GetCustomAttribute(); - if (useChecksum && !(objAttr?.SkipPropertyNameChecksum ?? false) && ReadOneByte(stream, version) != Encoding.UTF8.GetBytes(pis[done].Name).Aggregate((c, b) => (byte)(c ^ b))) - throw new SerializerException($"{type}.{pis[done].Name} property name checksum mismatch"); - isNullable = Nullable.GetUnderlyingType(pis[done].PropertyType) == null; - task = (Task)(isNullable - ? ReadAnyAsyncMethod.InvokeAuto(obj: null, stream, version) - : ReadAnyNullableAsyncMethod.InvokeAuto(obj: null, stream, version))!; - await task.DynamicContext(); - pis[done].SetValue(res, isNullable ? task.GetResultNullable() : task.GetResult()); - } - List results = new(); - if (!res.TryValidateObject(results)) - throw new SerializerException($"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})"); - return res; - } + // Handle serializable type + if (typeof(IStreamSerializer).IsAssignableFrom(type)) + return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( + type, + await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ).ToArray(); + int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read any object @@ -199,6 +388,17 @@ public static async Task ReadObjectAsync(this Stream stream, int? version public static T? ReadAnyObjectNullable(this Stream stream, int? version = null) where T : class, new() => ReadBool(stream, version) ? ReadAnyObject(stream, version) : null; + /// + /// Read any object + /// + /// Stream + /// Object type + /// Serializer version + /// Object + [TargetedPatchingOptOut("Tiny method")] + public static object? ReadAnyObjectNullable(this Stream stream, Type type, int? version = null) + => ReadBool(stream, version) ? ReadAnyObject(stream, type, version) : null; + /// /// Read any object /// @@ -213,5 +413,19 @@ public static async Task ReadObjectAsync(this Stream stream, int? version => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() ? await ReadAnyObjectAsync(stream, version, cancellationToken).DynamicContext() : null; + + /// + /// Read any object + /// + /// Stream + /// Object type + /// Serializer version + /// Cancellation token + /// Object + [TargetedPatchingOptOut("Tiny method")] + public static async Task ReadAnyObjectNullableAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) + => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ? await ReadAnyObjectAsync(stream, type, version, cancellationToken).DynamicContext() + : null; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs index 7a898ea..efde2df 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs @@ -17,27 +17,35 @@ public static partial class StreamExtensions /// Serializer version /// Object public static T ReadSerialized(this Stream stream, int? version = null) where T : class, IStreamSerializer - { - Type type = typeof(T); - if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - (c.GetParameters().Length == 2 && c.GetParameters()[0].ParameterType == typeof(Stream) && c.GetParameters()[1].ParameterType == typeof(int)) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); - List results = new(); - if (!res.TryValidateObject(results)) - throw new SerializerException($"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})"); - return res; - } + => SerializerException.Wrap(() => + { + Type type = typeof(T); + if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) + throw new SerializerException($"Type {type} isn't a supported deserializer type"); + ConstructorInfo ci = (from c in type.GetConstructors() + where c.IsPublic && + ( + c.GetParameters().Length == 0 || + ( + c.GetParameters().Length == 2 && + c.GetParameters()[0].ParameterType == typeof(Stream) && + c.GetParameters()[1].ParameterType == typeof(int) + ) + ) + select c) + .OrderBy(c => c.GetParameters().Length) + .FirstOrDefault() + ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); + bool serializerConstructor = ci.GetParameters().Length > 0; + T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); + if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read @@ -47,8 +55,37 @@ where c.IsPublic && /// Serializer version /// Object [TargetedPatchingOptOut("Just a method adapter")] - public static object ReadSerializedObject(this Stream stream, Type type, int? version = null) - => ReadSerializedMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, version)!; + public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, int? version = null) + => SerializerException.Wrap(() => + { + if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) + throw new SerializerException($"Type {type} isn't a supported deserializer type"); + ConstructorInfo ci = (from c in type.GetConstructors() + where c.IsPublic && + ( + c.GetParameters().Length == 0 || + ( + c.GetParameters().Length == 2 && + c.GetParameters()[0].ParameterType == typeof(Stream) && + c.GetParameters()[1].ParameterType == typeof(int) + ) + ) + select c) + .OrderBy(c => c.GetParameters().Length) + .FirstOrDefault() + ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); + bool serializerConstructor = ci.GetParameters().Length > 0; + IStreamSerializer res = (IStreamSerializer)(serializerConstructor + ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) + : ci.Invoke(Array.Empty())); + if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read @@ -58,28 +95,36 @@ public static object ReadSerializedObject(this Stream stream, Type type, int? ve /// Serializer version /// Cancellation token /// Object - public static async Task ReadSerializedAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, IStreamSerializer - { - Type type = typeof(T); - if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - (c.GetParameters().Length == 2 && c.GetParameters()[0].ParameterType == typeof(Stream) && c.GetParameters()[1].ParameterType == typeof(int)) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); - List results = new(); - if (!res.TryValidateObject(results)) - throw new SerializerException($"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})"); - return res; - } + public static Task ReadSerializedAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, IStreamSerializer + => SerializerException.WrapAsync(async () => + { + Type type = typeof(T); + if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) + throw new SerializerException($"Type {type} isn't a supported deserializer type"); + ConstructorInfo ci = (from c in type.GetConstructors() + where c.IsPublic && + ( + c.GetParameters().Length == 0 || + ( + c.GetParameters().Length == 2 && + c.GetParameters()[0].ParameterType == typeof(Stream) && + c.GetParameters()[1].ParameterType == typeof(int) + ) + ) + select c) + .OrderBy(c => c.GetParameters().Length) + .FirstOrDefault() + ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); + bool serializerConstructor = ci.GetParameters().Length > 0; + T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); + if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read @@ -90,12 +135,37 @@ where c.IsPublic && /// Cancellation token /// Object [TargetedPatchingOptOut("Just a method adapter")] - public static async Task ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) - { - Task task = (Task)ReadSerializedAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, version, cancellationToken)!; - await task.DynamicContext(); - return task.GetResult(type); - } + public static Task ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => + { + if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) + throw new SerializerException($"Type {type} isn't a supported deserializer type"); + ConstructorInfo ci = (from c in type.GetConstructors() + where c.IsPublic && + ( + c.GetParameters().Length == 0 || + ( + c.GetParameters().Length == 2 && + c.GetParameters()[0].ParameterType == typeof(Stream) && + c.GetParameters()[1].ParameterType == typeof(int) + ) + ) + select c) + .OrderBy(c => c.GetParameters().Length) + .FirstOrDefault() + ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); + bool serializerConstructor = ci.GetParameters().Length > 0; + IStreamSerializer res = (IStreamSerializer)(serializerConstructor + ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) + : ci.Invoke(Array.Empty())); + if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read @@ -134,27 +204,35 @@ public static async Task ReadSerializedObjectAsync(this Stream stream, T /// Serializer version /// Structure public static T ReadSerializedStruct(this Stream stream, int? version = null) where T : struct, IStreamSerializer - { - Type type = typeof(T); - if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - (c.GetParameters().Length == 2 && c.GetParameters()[0].ParameterType == typeof(Stream) && c.GetParameters()[1].ParameterType == typeof(int)) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); - List results = new(); - if (!res.TryValidateObject(results)) - throw new SerializerException($"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})"); - return res; - } + => SerializerException.Wrap(() => + { + Type type = typeof(T); + if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) + throw new SerializerException($"Type {type} isn't a supported deserializer type"); + ConstructorInfo ci = (from c in type.GetConstructors() + where c.IsPublic && + ( + c.GetParameters().Length == 0 || + ( + c.GetParameters().Length == 2 && + c.GetParameters()[0].ParameterType == typeof(Stream) && + c.GetParameters()[1].ParameterType == typeof(int) + ) + ) + select c) + .OrderBy(c => c.GetParameters().Length) + .FirstOrDefault() + ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); + bool serializerConstructor = ci.GetParameters().Length > 0; + T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); + if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read @@ -164,28 +242,36 @@ where c.IsPublic && /// Serializer version /// Cancellation token /// Structure - public static async Task ReadSerializedStructAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer - { - Type type = typeof(T); - if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - (c.GetParameters().Length == 2 && c.GetParameters()[0].ParameterType == typeof(Stream) && c.GetParameters()[1].ParameterType == typeof(int)) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); - List results = new(); - if (!res.TryValidateObject(results)) - throw new SerializerException($"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})"); - return res; - } + public static Task ReadSerializedStructAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + => SerializerException.WrapAsync(async () => + { + Type type = typeof(T); + if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) + throw new SerializerException($"Type {type} isn't a supported deserializer type"); + ConstructorInfo ci = (from c in type.GetConstructors() + where c.IsPublic && + ( + c.GetParameters().Length == 0 || + ( + c.GetParameters().Length == 2 && + c.GetParameters()[0].ParameterType == typeof(Stream) && + c.GetParameters()[1].ParameterType == typeof(int) + ) + ) + select c) + .OrderBy(c => c.GetParameters().Length) + .FirstOrDefault() + ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); + bool serializerConstructor = ci.GetParameters().Length > 0; + T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); + if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs index 4056c85..126108a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs @@ -10,7 +10,6 @@ public static partial class StreamExtensions /// /// Read a stream /// - /// Target stream type /// Stream /// Target stream (the position won't be reset) /// Serializer version @@ -19,22 +18,20 @@ public static partial class StreamExtensions /// Minimum stream length /// Maximum stream length in bytes /// Target stream - public static T ReadStream( + public static Stream ReadStream( this Stream stream, - T target, + Stream target, int? version = null, ArrayPool? pool = null, int? maxBufferSize = null, long minLen = 0, long maxLen = long.MaxValue ) - where T : Stream => ReadStreamInt(stream, target, version, pool, maxBufferSize, minLen, maxLen, len: null); /// /// Read a stream /// - /// Target stream type /// Stream /// Target stream (the position won't be reset) /// Serializer version @@ -44,9 +41,9 @@ public static T ReadStream( /// Maximum stream length in bytes /// Stream/chunk length in bytes (chunk length is negative) /// Target stream - private static T ReadStreamInt( + private static Stream ReadStreamInt( this Stream stream, - T target, + Stream target, int? version, ArrayPool? pool, int? maxBufferSize, @@ -54,59 +51,58 @@ private static T ReadStreamInt( long maxLen, long? len ) - where T : Stream - { - if (!target.CanWrite) throw new ArgumentException("Writable stream required", nameof(target)); - if (maxBufferSize != null && maxBufferSize.Value < 1) throw new ArgumentOutOfRangeException(nameof(maxBufferSize)); - if (minLen < 0) throw new ArgumentOutOfRangeException(nameof(minLen)); - if (maxLen < 0 || maxLen < minLen) throw new ArgumentOutOfRangeException(nameof(maxLen)); - len ??= stream.ReadNumber(version, pool); - if (len == 0) + => SerializerException.Wrap(() => { - if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); - return target; - } - if (len < 0) - { - // Chunked - len = Math.Abs(len.Value); - if (len > int.MaxValue) throw new SerializerException($"Invalid chunk length {len}", new InvalidDataException()); - if (len > (maxBufferSize ?? Settings.BufferSize)) - throw new SerializerException($"Chunk length of {len} bytes exceeds max. buffer size of {maxBufferSize ?? Settings.BufferSize}", new InvalidDataException()); - using RentedArray buffer = new((int)len, pool ?? StreamSerializer.BufferPool, clean: false); - long total = 0; - for (int red = (int)len; red == len; total += red) + if (!target.CanWrite) throw new ArgumentException("Writable stream required", nameof(target)); + if (maxBufferSize != null && maxBufferSize.Value < 1) throw new ArgumentOutOfRangeException(nameof(maxBufferSize)); + if (minLen < 0) throw new ArgumentOutOfRangeException(nameof(minLen)); + if (maxLen < 0 || maxLen < minLen) throw new ArgumentOutOfRangeException(nameof(maxLen)); + len ??= stream.ReadNumber(version, pool); + if (len == 0) { - red = stream.ReadBytes(version, buffer.Array, maxLen: buffer.Length).Length; - if (total + red > maxLen) throw new SerializerException($"The embedded stream length exceeds the maximum of {maxLen} bytes", new OverflowException()); - if (red < 1) break; - target.Write(buffer.Span[..red]); + if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); + return target; } - if (total < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); - } - else - { - // Fixed length - if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); - if (len > maxLen) - throw new SerializerException($"Embedded stream length of {len} bytes exceeds the maximum stream length of {maxLen} bytes", new OverflowException()); - using RentedArray buffer = new(maxBufferSize ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); - long total = 0; - for (int red = buffer.Length; red == buffer.Length && total < len; total += red) + if (len < 0) + { + // Chunked + len = Math.Abs(len.Value); + if (len > int.MaxValue) throw new SerializerException($"Invalid chunk length {len}", new InvalidDataException()); + if (len > (maxBufferSize ?? Settings.BufferSize)) + throw new SerializerException($"Chunk length of {len} bytes exceeds max. buffer size of {maxBufferSize ?? Settings.BufferSize}", new InvalidDataException()); + using RentedArray buffer = new((int)len, pool ?? StreamSerializer.BufferPool, clean: false); + long total = 0; + for (int red = (int)len; red == len; total += red) + { + red = stream.ReadBytes(version, buffer.Array, maxLen: buffer.Length).Length; + if (total + red > maxLen) throw new SerializerException($"The embedded stream length exceeds the maximum of {maxLen} bytes", new OverflowException()); + if (red < 1) break; + target.Write(buffer.Span[..red]); + } + if (total < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); + } + else { - red = stream.Read(buffer.Span[..(int)Math.Min(buffer.Length, len.Value - total)]); - if (red < 1) break; - target.Write(buffer.Span[..red]); + // Fixed length + if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); + if (len > maxLen) + throw new SerializerException($"Embedded stream length of {len} bytes exceeds the maximum stream length of {maxLen} bytes", new OverflowException()); + using RentedArray buffer = new(maxBufferSize ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + long total = 0; + for (int red = buffer.Length; red == buffer.Length && total < len; total += red) + { + red = stream.Read(buffer.Span[..(int)Math.Min(buffer.Length, len.Value - total)]); + if (red < 1) break; + target.Write(buffer.Span[..red]); + } + if (total != len) throw new SerializerException($"Invalid stream length ({len} bytes proposed, {total} bytes red)", new IOException()); } - if (total != len) throw new SerializerException($"Invalid stream length ({len} bytes proposed, {total} bytes red)", new IOException()); - } - return target; - } + return target; + }); /// /// Read a stream /// - /// Target stream type /// Stream /// Target stream (the position won't be reset; will be disposed, if the value is ) /// Serializer version @@ -116,41 +112,40 @@ private static T ReadStreamInt( /// Maximum stream length in bytes /// Target stream [TargetedPatchingOptOut("Tiny method")] - public static T? ReadStreamNullable( + public static Stream? ReadStreamNullable( this Stream stream, - T target, + Stream target, int? version = null, ArrayPool? pool = null, int? maxBufferSize = null, long minLen = 0, long maxLen = long.MaxValue ) - where T : Stream - { - switch (version ?? StreamSerializer.VERSION) + => SerializerException.Wrap(() => { - case 1: - if (!ReadBool(stream, version, pool)) - { - target.Dispose(); - return null; - } - return ReadStream(stream, target, version, pool, maxBufferSize, minLen, maxLen); - default: - long len = ReadNumber(stream, version, pool); - if (len == long.MinValue) - { - target.Dispose(); - return null; - } - return ReadStreamInt(stream, target, version, pool, maxBufferSize, minLen, maxLen, len); - } - } + switch (version ??= StreamSerializer.VERSION) + { + case 1: + if (!ReadBool(stream, version, pool)) + { + target.Dispose(); + return null; + } + return ReadStream(stream, target, version, pool, maxBufferSize, minLen, maxLen); + default: + long len = ReadNumber(stream, version, pool); + if (len == long.MinValue) + { + target.Dispose(); + return null; + } + return ReadStreamInt(stream, target, version, pool, maxBufferSize, minLen, maxLen, len); + } + }); /// /// Read a stream /// - /// Target stream type /// Stream /// Target stream (the position won't be reset) /// Serializer version @@ -160,9 +155,9 @@ private static T ReadStreamInt( /// Maximum stream length in bytes /// Cancellation token /// Target stream - public static Task ReadStreamAsync( + public static Task ReadStreamAsync( this Stream stream, - T target, + Stream target, int? version = null, ArrayPool? pool = null, int? maxBufferSize = null, @@ -170,13 +165,11 @@ public static Task ReadStreamAsync( long maxLen = long.MaxValue, CancellationToken cancellationToken = default ) - where T : Stream => ReadStreamIntAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, len: null, cancellationToken); /// /// Read a stream /// - /// Target stream type /// Stream /// Target stream (the position won't be reset) /// Serializer version @@ -187,9 +180,9 @@ public static Task ReadStreamAsync( /// Stream/chunk length in bytes (chunk length is negative) /// Cancellation token /// Target stream - private static async Task ReadStreamIntAsync( + private static Task ReadStreamIntAsync( Stream stream, - T target, + Stream target, int? version, ArrayPool? pool, int? maxBufferSize, @@ -198,59 +191,58 @@ private static async Task ReadStreamIntAsync( long? len, CancellationToken cancellationToken ) - where T : Stream - { - if (!target.CanWrite) throw new ArgumentException("Writable stream required", nameof(target)); - if (maxBufferSize != null && maxBufferSize.Value < 1) throw new ArgumentOutOfRangeException(nameof(maxBufferSize)); - if (minLen < 0) throw new ArgumentOutOfRangeException(nameof(minLen)); - if (maxLen < 0 || maxLen < minLen) throw new ArgumentOutOfRangeException(nameof(maxLen)); - len ??= await stream.ReadNumberAsync(version, pool, cancellationToken).DynamicContext(); - if (len == 0) + => SerializerException.WrapAsync(async () => { - if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); - return target; - } - if (len < 0) - { - // Chunked - len = Math.Abs(len.Value); - if (len > int.MaxValue) throw new SerializerException($"Invalid chunk length {len}", new InvalidDataException()); - if (len > (maxBufferSize ?? Settings.BufferSize)) - throw new SerializerException($"Chunk length of {len} bytes exceeds max. buffer size of {maxBufferSize ?? Settings.BufferSize}", new InvalidDataException()); - using RentedArray buffer = new((int)len, pool ?? StreamSerializer.BufferPool, clean: false); - long total = 0; - for (int red = (int)len; red == len; total += red) + if (!target.CanWrite) throw new ArgumentException("Writable stream required", nameof(target)); + if (maxBufferSize != null && maxBufferSize.Value < 1) throw new ArgumentOutOfRangeException(nameof(maxBufferSize)); + if (minLen < 0) throw new ArgumentOutOfRangeException(nameof(minLen)); + if (maxLen < 0 || maxLen < minLen) throw new ArgumentOutOfRangeException(nameof(maxLen)); + len ??= await stream.ReadNumberAsync(version, pool, cancellationToken).DynamicContext(); + if (len == 0) { - red = (await stream.ReadBytesAsync(version, buffer.Array, maxLen: buffer.Length, cancellationToken: cancellationToken).DynamicContext()).Length; - if (total + red > maxLen) throw new SerializerException($"The embedded stream length exceeds the maximum of {maxLen} bytes", new OverflowException()); - if (red < 1) break; - await target.WriteAsync(buffer.Memory[..red], cancellationToken).DynamicContext(); + if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); + return target; } - if (total < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); - } - else - { - // Fixed length - if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); - if (len > maxLen) - throw new SerializerException($"Embedded stream length of {len} bytes exceeds the maximum stream length of {maxLen} bytes", new OverflowException()); - using RentedArray buffer = new(maxBufferSize ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); - long total = 0; - for (int red = buffer.Length; red == buffer.Length && total < len; total += red) + if (len < 0) + { + // Chunked + len = Math.Abs(len.Value); + if (len > int.MaxValue) throw new SerializerException($"Invalid chunk length {len}", new InvalidDataException()); + if (len > (maxBufferSize ?? Settings.BufferSize)) + throw new SerializerException($"Chunk length of {len} bytes exceeds max. buffer size of {maxBufferSize ?? Settings.BufferSize}", new InvalidDataException()); + using RentedArray buffer = new((int)len, pool ?? StreamSerializer.BufferPool, clean: false); + long total = 0; + for (int red = (int)len; red == len; total += red) + { + red = (await stream.ReadBytesAsync(version, buffer.Array, maxLen: buffer.Length, cancellationToken: cancellationToken).DynamicContext()).Length; + if (total + red > maxLen) throw new SerializerException($"The embedded stream length exceeds the maximum of {maxLen} bytes", new OverflowException()); + if (red < 1) break; + await target.WriteAsync(buffer.Memory[..red], cancellationToken).DynamicContext(); + } + if (total < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); + } + else { - red = await stream.ReadAsync(buffer.Memory[..(int)Math.Min(buffer.Length, len.Value - total)], cancellationToken: cancellationToken).DynamicContext(); - if (red < 1) break; - await target.WriteAsync(buffer.Memory[..red], cancellationToken).DynamicContext(); + // Fixed length + if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); + if (len > maxLen) + throw new SerializerException($"Embedded stream length of {len} bytes exceeds the maximum stream length of {maxLen} bytes", new OverflowException()); + using RentedArray buffer = new(maxBufferSize ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + long total = 0; + for (int red = buffer.Length; red == buffer.Length && total < len; total += red) + { + red = await stream.ReadAsync(buffer.Memory[..(int)Math.Min(buffer.Length, len.Value - total)], cancellationToken: cancellationToken).DynamicContext(); + if (red < 1) break; + await target.WriteAsync(buffer.Memory[..red], cancellationToken).DynamicContext(); + } + if (total != len) throw new SerializerException($"Invalid stream length ({len} bytes proposed, {total} bytes red)", new IOException()); } - if (total != len) throw new SerializerException($"Invalid stream length ({len} bytes proposed, {total} bytes red)", new IOException()); - } - return target; - } + return target; + }); /// /// Read a stream /// - /// Target stream type /// Stream /// Target stream (the position won't be reset; will be disposed, if the value is ) /// Serializer version @@ -261,9 +253,9 @@ CancellationToken cancellationToken /// Cancellation token /// Target stream [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStreamNullableAsync( + public static Task ReadStreamNullableAsync( this Stream stream, - T target, + Stream target, int? version = null, ArrayPool? pool = null, int? maxBufferSize = null, @@ -271,26 +263,26 @@ CancellationToken cancellationToken long maxLen = long.MaxValue, CancellationToken cancellationToken = default ) - where T : Stream - { - switch (version ?? StreamSerializer.VERSION) + => SerializerException.WrapAsync(async () => { - case 1: - if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) - { - await target.DisposeAsync().DynamicContext(); - return null; - } - return await ReadStreamAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, cancellationToken).DynamicContext(); - default: - long len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == long.MinValue) - { - await target.DisposeAsync().DynamicContext(); - return null; - } - return await ReadStreamIntAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, len, cancellationToken).DynamicContext(); - } - } + switch (version ??= StreamSerializer.VERSION) + { + case 1: + if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) + { + await target.DisposeAsync().DynamicContext(); + return null; + } + return await ReadStreamAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, cancellationToken).DynamicContext(); + default: + long len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == long.MinValue) + { + await target.DisposeAsync().DynamicContext(); + return null; + } + return await ReadStreamIntAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, len, cancellationToken).DynamicContext(); + } + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs index 2ccc492..94e93b3 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs @@ -18,21 +18,18 @@ public static partial class StreamExtensions /// Value [TargetedPatchingOptOut("Tiny method")] public static string ReadString(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try + => SerializerException.Wrap(() => { - return data.AsSpan(0, len).ToUtf8String(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); + try + { + return data.AsSpan(0, len).ToUtf8String(); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); /// /// Read @@ -45,7 +42,7 @@ public static string ReadString(this Stream stream, int? version = null, ArrayPo /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStringAsync( + public static Task ReadStringAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -53,21 +50,22 @@ public static async Task ReadStringAsync( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - { - (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); - try - { - return data.AsSpan(0, len).ToUtf8String(); - } - catch (Exception ex) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); + try + { + return data.AsSpan(0, len).ToUtf8String(); + } + catch (Exception ex) + { + throw new SerializerException(message: null, ex); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); /// /// Read @@ -80,9 +78,7 @@ public static async Task ReadStringAsync( /// Value [TargetedPatchingOptOut("Tiny method")] public static string? ReadStringNullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) -#pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version, pool) ? ReadString(stream, version, pool, minLen, maxLen) : default(string?); -#pragma warning restore IDE0034 // default expression can be simplified + => ReadBool(stream, version, pool) ? ReadString(stream, version, pool, minLen, maxLen) : null; /// /// Read @@ -105,9 +101,7 @@ public static async Task ReadStringAsync( ) => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadStringAsync(stream, version, pool, minLen, maxLen, cancellationToken).DynamicContext() -#pragma warning disable IDE0034 // default expression can be simplified - : default(string?); -#pragma warning restore IDE0034 // default expression can be simplified + : null; /// /// Read UTF-16 (little endian) string @@ -120,21 +114,18 @@ public static async Task ReadStringAsync( /// Value [TargetedPatchingOptOut("Tiny method")] public static string ReadString16(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try - { - return data.AsSpan(0, len).ToUtf16String(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally + => SerializerException.Wrap(() => { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); + try + { + return data.AsSpan(0, len).ToUtf16String(); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); /// /// Read UTF-16 (little endian) string @@ -147,7 +138,7 @@ public static string ReadString16(this Stream stream, int? version = null, Array /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString16Async( + public static Task ReadString16Async( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -155,21 +146,18 @@ public static async Task ReadString16Async( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - { - (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); - try + => SerializerException.WrapAsync(async () => { - return data.AsSpan(0, len).ToUtf16String(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); + try + { + return data.AsSpan(0, len).ToUtf16String(); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); /// /// Read UTF-16 (little endian) string @@ -182,9 +170,7 @@ public static async Task ReadString16Async( /// Value [TargetedPatchingOptOut("Tiny method")] public static string? ReadString16Nullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) -#pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version, pool) ? ReadString16(stream, version, pool, minLen, maxLen) : default(string?); -#pragma warning restore IDE0034 // default expression can be simplified + => ReadBool(stream, version, pool) ? ReadString16(stream, version, pool, minLen, maxLen) : null; /// /// Read UTF-16 (little endian) string @@ -207,9 +193,7 @@ public static async Task ReadString16Async( ) => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadString16Async(stream, version, pool, minLen, maxLen, cancellationToken).DynamicContext() -#pragma warning disable IDE0034 // default expression can be simplified - : default(string?); -#pragma warning restore IDE0034 // default expression can be simplified + : null; /// /// Read UTF-32 (little endian) string @@ -222,21 +206,18 @@ public static async Task ReadString16Async( /// Value [TargetedPatchingOptOut("Tiny method")] public static string ReadString32(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try - { - return data.AsSpan(0, len).ToUtf32String(); - } - catch (Exception ex) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); + try + { + return data.AsSpan(0, len).ToUtf32String(); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); /// /// Read UTF-32 (little endian) string @@ -249,7 +230,7 @@ public static string ReadString32(this Stream stream, int? version = null, Array /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString32Async( + public static Task ReadString32Async( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -257,21 +238,18 @@ public static async Task ReadString32Async( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - { - (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); - try - { - return data.AsSpan(0, len).ToUtf32String(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally + => SerializerException.WrapAsync(async () => { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } + (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); + try + { + return data.AsSpan(0, len).ToUtf32String(); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data); + } + }); /// /// Read UTF-32 (little endian) string @@ -284,9 +262,7 @@ public static async Task ReadString32Async( /// Value [TargetedPatchingOptOut("Tiny method")] public static string? ReadString32Nullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) -#pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version, pool) ? ReadString32(stream, version, pool, minLen, maxLen) : default(string?); -#pragma warning restore IDE0034 // default expression can be simplified + => ReadBool(stream, version, pool) ? ReadString32(stream, version, pool, minLen, maxLen) : null; /// /// Read UTF-32 (little endian) string @@ -309,8 +285,6 @@ public static async Task ReadString32Async( ) => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadString32Async(stream, version, pool, minLen, maxLen, cancellationToken).DynamicContext() -#pragma warning disable IDE0034 // default expression can be simplified - : default(string?); -#pragma warning restore IDE0034 // default expression can be simplified + : null; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs index 1c10787..1e651d2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs @@ -25,26 +25,27 @@ public static T ReadStruct( ArrayPool? pool = null ) where T : struct - { - int len = Marshal.SizeOf(typeof(T)); - byte[] data = stream.ReadBytes(version, buffer, pool, len, len).Value; - try + => SerializerException.Wrap(() => { - GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned); + int len = Marshal.SizeOf(typeof(T)); + byte[] data = stream.ReadBytes(version, buffer, pool, len, len).Value; try { - return Marshal.PtrToStructure(gch.AddrOfPinnedObject()); + GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + return Marshal.PtrToStructure(gch.AddrOfPinnedObject()); + } + finally + { + gch.Free(); + } } finally { - gch.Free(); + if (buffer == null && pool != null) pool.Return(data); } - } - finally - { - if (buffer == null && pool != null) pool.Return(data); - } - } + }); /// /// Read a struct @@ -57,7 +58,7 @@ public static T ReadStruct( /// Cancellation token /// Struct [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStructAsync( + public static Task ReadStructAsync( this Stream stream, int? version = null, byte[]? buffer = null, @@ -65,26 +66,27 @@ public static async Task ReadStructAsync( CancellationToken cancellationToken = default ) where T : struct - { - int len = Marshal.SizeOf(typeof(T)); - byte[] data = (await stream.ReadBytesAsync(version, buffer, pool, len, len, cancellationToken).DynamicContext()).Value; - try + => SerializerException.WrapAsync(async () => { - GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned); + int len = Marshal.SizeOf(typeof(T)); + byte[] data = (await stream.ReadBytesAsync(version, buffer, pool, len, len, cancellationToken).DynamicContext()).Value; try { - return Marshal.PtrToStructure(gch.AddrOfPinnedObject()); + GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + return Marshal.PtrToStructure(gch.AddrOfPinnedObject()); + } + finally + { + gch.Free(); + } } finally { - gch.Free(); + if (buffer == null && pool != null) pool.Return(data); } - } - finally - { - if (buffer == null && pool != null) pool.Return(data); - } - } + }); /// /// Read a struct diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs index 126aead..35f5acd 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs @@ -9,13 +9,9 @@ namespace wan24.StreamSerializerExtensions public static partial class StreamExtensions { /// - /// Read object method - /// - public static readonly MethodInfo ReadObjectMethod; - /// - /// Read object method + /// Array empty method /// - public static readonly MethodInfo ReadObjectAsyncMethod; + public static readonly MethodInfo ArrayEmptyMethod; /// /// Read struct method /// @@ -24,90 +20,6 @@ public static partial class StreamExtensions /// Read struct method /// public static readonly MethodInfo ReadStructAsyncMethod; - /// - /// Read object method - /// - public static readonly MethodInfo ReadObjectNullableMethod; - /// - /// Read object method - /// - public static readonly MethodInfo ReadObjectNullableAsyncMethod; - /// - /// Read any method - /// - public static readonly MethodInfo ReadAnyMethod; - /// - /// Read any method - /// - public static readonly MethodInfo ReadAnyAsyncMethod; - /// - /// Read any method - /// - public static readonly MethodInfo ReadAnyNullableMethod; - /// - /// Read any method - /// - public static readonly MethodInfo ReadAnyNullableAsyncMethod; - /// - /// Read serialized method - /// - public static readonly MethodInfo ReadSerializedMethod; - /// - /// Read serialized method - /// - public static readonly MethodInfo ReadSerializedAsyncMethod; - /// - /// Read number method - /// - public static readonly MethodInfo ReadNumberMethod; - /// - /// Read number method - /// - public static readonly MethodInfo ReadNumberAsyncMethod; - /// - /// Read number method - /// - public static readonly MethodInfo ReadNumberIntMethod; - /// - /// Read number method - /// - public static readonly MethodInfo ReadNumberIntAsyncMethod; - /// - /// Read enumeration method - /// - public static readonly MethodInfo ReadEnumMethod; - /// - /// Read enumeration method - /// - public static readonly MethodInfo ReadEnumAsyncMethod; - /// - /// Read array method - /// - public static readonly MethodInfo ReadArrayMethod; - /// - /// Read array method - /// - public static readonly MethodInfo ReadArrayAsyncMethod; - /// - /// Read list method - /// - public static readonly MethodInfo ReadListMethod; - /// - /// Read list method - /// - public static readonly MethodInfo ReadListAsyncMethod; - /// - /// Read dictionary method - /// - public static readonly MethodInfo ReadDictMethod; - /// - /// Read dictionary method - /// - public static readonly MethodInfo ReadDictAsyncMethod; - /// - /// Array empty method - /// - public static readonly MethodInfo ArrayEmptyMethod; /// /// Require the attribute when using etc.? @@ -121,11 +33,12 @@ public static partial class StreamExtensions /// Serializer version [TargetedPatchingOptOut("Tiny method")] public static int ReadSerializerVersion(this Stream stream) - { - int res = ReadNumber(stream, version: 1); - if (res < 1 || res > StreamSerializer.VERSION) throw new InvalidDataException($"Invalid or unsupported stream serializer version #{res}"); - return res; - } + => SerializerException.Wrap(() => + { + int res = ReadNumber(stream, version: 1); + if (res < 1 || res > StreamSerializer.VERSION) throw new InvalidDataException($"Invalid or unsupported stream serializer version #{res}"); + return res; + }); /// /// Read the serializer version @@ -134,12 +47,13 @@ public static int ReadSerializerVersion(this Stream stream) /// Cancellation token /// Serializer version [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) - { - int res = await ReadNumberAsync(stream, version: 1, cancellationToken: cancellationToken).DynamicContext(); - if (res < 1 || res > StreamSerializer.VERSION) throw new InvalidDataException($"Invalid or unsupported stream serializer version #{res}"); - return res; - } + public static Task ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => + { + int res = await ReadNumberAsync(stream, version: 1, cancellationToken: cancellationToken).DynamicContext(); + if (res < 1 || res > StreamSerializer.VERSION) throw new InvalidDataException($"Invalid or unsupported stream serializer version #{res}"); + return res; + }); /// /// Read serialized data @@ -153,9 +67,12 @@ public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool + { + int red = stream.Read(res.AsSpan(0, len)); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + return res; + }); } catch { @@ -177,9 +94,12 @@ public static async Task ReadSerializedDataAsync(this Stream stream, int byte[] res = (pool ?? StreamSerializer.BufferPool).Rent(len); try { - int red = await stream.ReadAsync(res.AsMemory(0, len), cancellationToken).DynamicContext(); - if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); - return res; + return await SerializerException.WrapAsync(async () => + { + int red = await stream.ReadAsync(res.AsMemory(0, len), cancellationToken).DynamicContext(); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + return res; + }).DynamicContext(); } catch { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index b31a126..32e345e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -9,13 +9,11 @@ public static partial class StreamExtensions /// /// Write any object /// - /// Stream type /// Stream /// Object /// Stream - public static T WriteAny(this T stream, object obj) where T : Stream - { - try + public static Stream WriteAny(this Stream stream, object obj) + => SerializerException.Wrap(() => { (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); using (RentedArray poolData = new(1)) @@ -27,23 +25,14 @@ public static T WriteAny(this T stream, object obj) where T : Stream if (writeObject) if (objType.IsNumber()) { - WriteNumberMethod.MakeGenericMethod(typeof(T), type).InvokeAuto(obj: null, stream, obj); + WriteNumber(stream, obj); } else { - WriteObjectMethod.MakeGenericMethod(typeof(T), type).InvokeAuto(obj: null, stream, obj); + WriteObject(stream, obj); } return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write any object @@ -51,9 +40,8 @@ public static T WriteAny(this T stream, object obj) where T : Stream /// Stream /// Object /// Cancellation token - public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) - { - try + public static Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); using (RentedArray poolData = new(1)) @@ -63,40 +51,25 @@ public static async Task WriteAnyAsync(this Stream stream, object obj, Cancellat } if (writeType) await WriteStringAsync(stream, type.ToString(), cancellationToken).DynamicContext(); if (writeObject) - { - Task task; if (objType.IsNumber()) { - task = (Task)WriteNumberAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, obj, cancellationToken)!; + await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext(); } else { - task = (Task)WriteObjectAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, obj, cancellationToken)!; + await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); } - await task.DynamicContext(); - } - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write any object /// - /// Stream type /// Stream /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteAnyNullable(this T stream, object? obj) where T : Stream - { - try + public static Stream WriteAnyNullable(this Stream stream, object? obj) + => SerializerException.Wrap(() => { if (obj == null) { @@ -109,16 +82,7 @@ public static T WriteAnyNullable(this T stream, object? obj) where T : Stream WriteAny(stream, obj); } return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write any object @@ -127,9 +91,8 @@ public static T WriteAnyNullable(this T stream, object? obj) where T : Stream /// Object /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - { - try + public static Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { if (obj == null) { @@ -141,15 +104,6 @@ public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, { await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); } - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs index cb1a4c9..1adcf97 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs @@ -9,108 +9,74 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteArray(this tStream stream, tElement[] value) where tStream : Stream - { - if (typeof(tElement) == typeof(byte)) return WriteBytes(stream, (value as byte[])!); - try + public static Stream WriteArray(this Stream stream, Array value) + => SerializerException.Wrap(() => { + if (value.GetType().GetElementType() == typeof(byte)) return WriteBytes(stream, (value as byte[])!); WriteNumber(stream, value.Length); if (value.Length == 0) return stream; - foreach (tElement element in value) WriteObject(stream, element); + foreach (object element in value) WriteObject(stream, element); return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write /// - /// Element type /// Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteArrayAsync(this Stream stream, T[] value, CancellationToken cancellationToken = default) - { - if (typeof(T) == typeof(byte)) - { - await WriteBytesAsync(stream, (value as byte[])!, cancellationToken).DynamicContext(); - return; - } - try + public static Task WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { + if (value.GetType().GetElementType() == typeof(byte)) + { + await WriteBytesAsync(stream, (value as byte[])!, cancellationToken).DynamicContext(); + return; + } await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); if (value.Length == 0) return; - foreach (T element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + }); /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteArrayNullable(this tStream stream, tElement[]? value) where tStream : Stream - { - Write(stream, value != null); - if (value != null) WriteArray(stream, value); - return stream; - } + public static Stream WriteArrayNullable(this Stream stream, Array? value) + => WriteIfNull(stream, value, () => WriteArray(stream, value!)); /// /// Write /// - /// Element type /// Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteArrayNullableAsync(this Stream stream, T[]? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteArrayAsync(stream, value, cancellationToken).DynamicContext(); - } + public static Task WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, value, () => WriteArrayAsync(stream, value!, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type - /// Element type + /// Element type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteFixedArray(this tStream stream, Span value) where tStream : Stream + public static Stream WriteFixedArray(this Stream stream, Span value) { try { - foreach (tElement element in value) - WriteObject(stream, element); + foreach (T element in value) + WriteObject(stream, element!); return stream; } catch (SerializerException) @@ -131,20 +97,10 @@ public static tStream WriteFixedArray(this tStream stream, Sp /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteFixedArrayAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) - { - try - { - for (int i = 0; i < value.Length; i++) await WriteObjectAsync(stream, value.Span[i], cancellationToken).DynamicContext(); - } - catch (SerializerException) + public static Task WriteFixedArrayAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + for (int i = 0; i < value.Length; i++) await WriteObjectAsync(stream, value.Span[i]!, cancellationToken).DynamicContext(); + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index aec5cd0..bf7c117 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -10,17 +10,15 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, bool value) where T : Stream + public static Stream Write(this Stream stream, bool value) { - using RentedArray poolData = new(1); - poolData[0] = (byte)(value ? 1 : 0); - stream.Write(poolData.Span); - return stream; + byte[] buffer = StreamSerializer.BufferPool.Rent(minimumLength: 1); + buffer[0] = (byte)(value ? 1 : 0); + return WriteSerializedData(stream, buffer, len: 1); } /// @@ -32,24 +30,34 @@ public static T Write(this T stream, bool value) where T : Stream [TargetedPatchingOptOut("Tiny method")] public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = default) { - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)(value ? 1 : 0); - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); + byte[] buffer = StreamSerializer.BufferPool.Rent(minimumLength: 1); + buffer[0] = (byte)(value ? 1 : 0); + await WriteSerializedDataAsync(stream, buffer, len: 1, cancellationToken: cancellationToken).DynamicContext(); } /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, bool? value) where T : Stream + public static Stream WriteNullable(this Stream stream, bool? value) { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; + ObjectTypes type; + if (value == null) + { + type = ObjectTypes.Null; + } + else if (value.Value) + { + type = ObjectTypes.Bool; + } + else + { + type = ObjectTypes.Empty; + } + return Write(stream, (byte)type); } /// @@ -59,32 +67,32 @@ public static T WriteNullable(this T stream, bool? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = default) { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); + ObjectTypes type; + if (value == null) + { + type = ObjectTypes.Null; + } + else if (value.Value) + { + type = ObjectTypes.Bool; + } + else + { + type = ObjectTypes.Empty; + } + return WriteAsync(stream, (byte)type, cancellationToken); } /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, sbyte value) where T : Stream - { - try - { - stream.Write((byte)value); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, sbyte value) => Write(stream, (byte)value); /// /// Write @@ -93,32 +101,18 @@ public static T Write(this T stream, sbyte value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = default) - { - try - { - await stream.WriteAsync((byte)value, cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = default) + => WriteAsync(stream, (byte)value, cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, sbyte? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, sbyte? value) + => WriteNullableNumeric(stream, value, sbyte.MinValue, sbyte.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -127,32 +121,22 @@ public static T WriteNullable(this T stream, sbyte? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, sbyte.MinValue, sbyte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, byte value) where T : Stream - { - try + public static Stream Write(this Stream stream, byte value) + => SerializerException.Wrap(() => { stream.WriteByte(value); return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write @@ -172,17 +156,12 @@ public static async Task WriteAsync(this Stream stream, byte value, Cancellation /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, byte? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, byte? value) + => WriteNullableNumeric(stream, value, byte.MinValue, byte.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -191,33 +170,18 @@ public static T WriteNullable(this T stream, byte? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, byte.MinValue, byte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, short value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(short), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, short value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short)); /// /// Write @@ -226,33 +190,18 @@ public static T Write(this T stream, short value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(short), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, short? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, short? value) + => WriteNullableNumeric(stream, value, short.MinValue, short.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -261,33 +210,18 @@ public static T WriteNullable(this T stream, short? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, short.MinValue, short.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, ushort value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(ushort), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, ushort value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort)); /// /// Write @@ -296,33 +230,18 @@ public static T Write(this T stream, ushort value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(ushort), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, ushort? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, ushort? value) + => WriteNullableNumeric(stream, value, ushort.MinValue, ushort.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -331,33 +250,18 @@ public static T WriteNullable(this T stream, ushort? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, ushort.MinValue, ushort.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, int value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(int), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, int value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int)); /// /// Write @@ -366,33 +270,18 @@ public static T Write(this T stream, int value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(int), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, int? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, int? value) + => WriteNullableNumeric(stream, value, int.MinValue, int.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -401,33 +290,18 @@ public static T WriteNullable(this T stream, int? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, int.MinValue, int.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, uint value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(uint), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, uint value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint)); /// /// Write @@ -436,33 +310,18 @@ public static T Write(this T stream, uint value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(uint), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, uint? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, uint? value) + => WriteNullableNumeric(stream, value, uint.MinValue, uint.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -471,33 +330,18 @@ public static T WriteNullable(this T stream, uint? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, uint.MinValue, uint.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, long value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(long), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, long value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long)); /// /// Write @@ -506,33 +350,18 @@ public static T Write(this T stream, long value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(long), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, long? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, long? value) + => WriteNullableNumeric(stream, value, long.MinValue, long.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -541,33 +370,18 @@ public static T WriteNullable(this T stream, long? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, long.MinValue, long.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, ulong value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(ulong), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, ulong value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong)); /// /// Write @@ -576,33 +390,18 @@ public static T Write(this T stream, ulong value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(ulong), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, ulong? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, ulong? value) + => WriteNullableNumeric(stream, value, ulong.MinValue, ulong.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -611,33 +410,18 @@ public static T WriteNullable(this T stream, ulong? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, ulong.MinValue, ulong.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, float value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(float), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, float value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float)); /// /// Write @@ -646,33 +430,18 @@ public static T Write(this T stream, float value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(float), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, float? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, float? value) + => WriteNullableNumeric(stream, value, float.MinValue, float.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -681,33 +450,18 @@ public static T WriteNullable(this T stream, float? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, float.MinValue, float.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, double value) where T : Stream - { - try - { - using RentedArray buffer = new(sizeof(double), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, double value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double)); /// /// Write @@ -716,33 +470,18 @@ public static T Write(this T stream, double value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(double), StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, double? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, double? value) + => WriteNullableNumeric(stream, value, double.MinValue, double.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -751,33 +490,18 @@ public static T WriteNullable(this T stream, double? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, double.MinValue, double.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream Write(this tStream stream, decimal value) where tStream : Stream - { - try - { - using RentedArray buffer = new(sizeof(int) << 2, StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Stream Write(this Stream stream, decimal value) + => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal)); /// /// Write @@ -786,33 +510,18 @@ public static tStream Write(this tStream stream, decimal value) where t /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = default) - { - try - { - using RentedArray buffer = new(sizeof(int) << 2, StreamSerializer.BufferPool, clean: false); - await stream.WriteAsync(value.GetBytes(buffer.Memory), cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + public static Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = default) + => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal), cancellationToken: cancellationToken); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, decimal? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + public static Stream WriteNullable(this Stream stream, decimal? value) + => WriteNullableNumeric(stream, value, decimal.MinValue, decimal.MaxValue, () => Write(stream, value!.Value)); /// /// Write @@ -821,174 +530,53 @@ public static T WriteNullable(this T stream, decimal? value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteAsync(stream, value.Value, cancellationToken).DynamicContext(); - } - - /// - /// Write - /// - /// Stream type - /// Number type - /// Stream - /// Value to write - /// Stream - public static tStream WriteNumber(this tStream stream, tNumber value) - where tStream : Stream - where tNumber : struct, IConvertible - => WriteNumberInt(stream, value, type: null); + public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = default) + => WriteNullableNumericAsync(stream, value, decimal.MinValue, decimal.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); /// - /// Write + /// Write a nullable numeric value /// - /// Stream type + /// Numeric type /// Stream - /// Value to write - /// Number type + /// Value + /// Minimum + /// Maximum + /// Action to execute if the value can't be handled using a default handler /// Stream - public static T WriteNumberInt(T stream, object value, NumberTypes? type) where T : Stream - { - if (type == null) (_, type) = value.GetNumberAndType(); - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)type; - stream.Write(poolData.Span); - if (!type.Value.IsZero() && !type.Value.HasValueFlags()) - switch (type) - { - case NumberTypes.Byte: - case NumberTypes.Byte | NumberTypes.Unsigned: - poolData[0] = value.ConvertType(); - stream.Write(poolData.Span); - break; - case NumberTypes.Short: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Short | NumberTypes.Unsigned: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Int: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Int | NumberTypes.Unsigned: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Long: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Long | NumberTypes.Unsigned: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Float: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Double: - Write(stream, value.ConvertType()); - break; - case NumberTypes.Decimal: - Write(stream, value.ConvertType()); - break; - } + private static Stream WriteNullableNumeric(Stream stream, T? value, T min, T max, Action action) where T:struct, IConvertible + { + NumberTypes type; + if (value == null) type = NumberTypes.Null; + else if (value.Equals(default(T))) type = NumberTypes.Zero; + else if (value.Equals(min)) type = NumberTypes.MinValue; + else if (value.Equals(max)) type = NumberTypes.MaxValue; + else type = NumberTypes.Default; + Write(stream, (byte)type); + if (type == NumberTypes.Default) action(); return stream; } /// - /// Write + /// Write a nullable numeric value /// - /// Number type + /// Numeric type /// Stream - /// Value to write + /// Value + /// Minimum + /// Maximum + /// Action to execute if the value can't be handled using a default handler /// Cancellation token - public static Task WriteNumberAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible - => WriteNumberIntAsync(stream, value, type: null, cancellationToken); - - /// - /// Write - /// - /// Number type - /// Stream - /// Value to write - /// Number type - /// Cancellation token - private static async Task WriteNumberIntAsync(Stream stream, object value, NumberTypes? type, CancellationToken cancellationToken) + private static async Task WriteNullableNumericAsync(Stream stream, T? value, T min, T max, Func action, CancellationToken cancellationToken) where T : struct, IConvertible { - if (type == null) (_, type) = value.GetNumberAndType(); - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)type; - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); - if (!type.Value.IsZero() && !type.Value.HasValueFlags()) - switch (type) - { - case NumberTypes.Byte: - case NumberTypes.Byte | NumberTypes.Unsigned: - poolData[0] = value.ConvertType(); - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); - break; - case NumberTypes.Short: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Short | NumberTypes.Unsigned: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Int: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Int | NumberTypes.Unsigned: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Long: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Long | NumberTypes.Unsigned: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Float: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Double: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - case NumberTypes.Decimal: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); - break; - } - } - - /// - /// Write - /// - /// Stream type - /// Number type - /// Stream - /// Value to write - /// Stream - [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteNumberNullable(this tStream stream, tNumber? value) - where tStream : Stream - where tNumber : struct, IConvertible - => value == null ? WriteEnum(stream, NumberTypes.Null) : WriteNumber(stream, value.Value); - - /// - /// Write - /// - /// Number type - /// Stream - /// Value to write - /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) - where T : struct, IConvertible - { - if (value == null) - { - await WriteEnumAsync(stream, NumberTypes.Null, cancellationToken).DynamicContext(); - } - else - { - await WriteNumberAsync(stream, value.Value, cancellationToken).DynamicContext(); - } + NumberTypes type; + if (value == null) type = NumberTypes.Null; + else if (value.Equals(default(T))) type = NumberTypes.Zero; + else if (value.Equals(min)) type = NumberTypes.MinValue; + else if (value.Equals(max)) type = NumberTypes.MaxValue; + else type = NumberTypes.Default; + await WriteAsync(stream, (byte)type, cancellationToken).DynamicContext(); + if (type == NumberTypes.Default) await action().DynamicContext(); } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs index e25b272..88c3f6d 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs @@ -9,22 +9,20 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Just a method adapter")] - public static T WriteBytes(this T stream, Span value) where T : Stream => WriteBytes(stream, (ReadOnlySpan)value); + public static Stream WriteBytes(this Stream stream, Span value) => WriteBytes(stream, (ReadOnlySpan)value); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteBytes(this T stream, ReadOnlySpan value) where T : Stream + public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) { try { @@ -55,33 +53,22 @@ public static Task WriteBytesAsync(this Stream stream, Memory value, Cance /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) - { - try + public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); if (value.Length > 0) await stream.WriteAsync(value, cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteBytesNullable(this T stream, byte[]? value) where T : Stream - { - Write(stream, value != null); - if (value != null) WriteBytes(stream, value); - return stream; - } + public static Stream WriteBytesNullable(this Stream stream, byte[]? value) + => WriteIfNull(stream, value, () => WriteBytes(stream, value!)); /// /// Write @@ -90,10 +77,7 @@ public static T WriteBytesNullable(this T stream, byte[]? value) where T : St /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteBytesNullableAsync(this Stream stream, byte[]? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteBytesAsync(stream, value, cancellationToken).DynamicContext(); - } + public static Task WriteBytesNullableAsync(this Stream stream, byte[]? value, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, value, () => WriteBytesAsync(stream, value!, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index 41fe79d..edaad5c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -1,4 +1,5 @@ -using System.Runtime; +using System.Collections; +using System.Runtime; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -9,103 +10,60 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Key type - /// Value type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteDict(this tStream stream, Dictionary value) - where tStream : Stream - where tKey : notnull - { - try + public static Stream WriteDict(this Stream stream, IDictionary value) + => SerializerException.Wrap(() => { WriteNumber(stream, value.Count); if (value.Count == 0) return stream; - foreach (KeyValuePair kvp in value) + foreach (object key in value.Keys) { - WriteObject(stream, kvp.Key); - WriteObject(stream, kvp.Value); + WriteObject(stream, key); + WriteObject(stream, value[key]!); } return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write /// - /// Key type - /// Value type /// Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteDictAsync(this Stream stream, Dictionary value, CancellationToken cancellationToken = default) - where tKey : notnull - { - try + public static Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); if (value.Count == 0) return; - foreach (KeyValuePair kvp in value) + foreach (object key in value.Keys) { - await WriteObjectAsync(stream, kvp.Key, cancellationToken).DynamicContext(); - await WriteObjectAsync(stream, kvp.Value, cancellationToken).DynamicContext(); + await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); + await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); } - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write /// - /// Stream type - /// Key type - /// Value type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteDictNullable(this tStream stream, Dictionary? value) - where tStream : Stream - where tKey : notnull - { - Write(stream, value != null); - if (value != null) WriteDict(stream, value); - return stream; - } + public static Stream WriteDictNullable(this Stream stream, IDictionary? value) + => WriteIfNull(stream, value, () => WriteDict(stream, value!)); /// /// Write /// - /// Key type - /// Value type /// Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteDictNullableAsync(this Stream stream, Dictionary? value, CancellationToken cancellationToken = default) - where tKey : notnull - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteDictAsync(stream, value, cancellationToken).DynamicContext(); - } + public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, value, () => WriteDictAsync(stream, value!, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index f53a439..86528c3 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -9,28 +9,33 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Enumeration type + /// Enumeration type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteEnum(this tStream stream, tEnum value) - where tStream : Stream - where tEnum : struct, Enum - { - try + public static Stream WriteEnum(this Stream stream, T value) where T : struct, Enum + => SerializerException.Wrap(() => { - if (ObjectHelper.AreEqual(value, default(tEnum))) return Write(stream, (byte)NumberTypes.Default); - Type type = typeof(tEnum).GetEnumUnderlyingType(); - WriteNumberMethod.MakeGenericMethod(typeof(tStream), type).InvokeAuto(obj: null, stream, Convert.ChangeType(value, type)); - return stream; - } - catch (Exception ex) + if (ObjectHelper.AreEqual(value, default(T))) return Write(stream, (byte)NumberTypes.Default); + return WriteNumber(stream, Convert.ChangeType(value, typeof(T).GetEnumUnderlyingType())); + }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Stream + [TargetedPatchingOptOut("Tiny method")] + public static Stream WriteEnum(this Stream stream, object value) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - } + Type enumType = value.GetType(); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value"); + if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) return Write(stream, (byte)NumberTypes.Default); + return WriteNumber(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType())); + }); /// /// Write @@ -40,40 +45,60 @@ public static tStream WriteEnum(this tStream stream, tEnum value /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) - where T : struct, Enum - { - try + public static Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum + => SerializerException.WrapAsync(async () => { if (ObjectHelper.AreEqual(value, default(T))) { await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); return; } - Type type = typeof(T).GetEnumUnderlyingType(); - Task task = (Task)WriteNumberAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, Convert.ChangeType(value, type), cancellationToken)!; - await task.DynamicContext(); - } - catch (Exception ex) + await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + public static Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + Type enumType = value.GetType(); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value"); + if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) + { + await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); + } + else + { + await WriteNumberAsync(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + } + }); /// /// Write /// - /// Stream type - /// Enumeration type + /// Enumeration type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteEnumNullable(this tStream stream, tEnum? value) - where tStream : Stream - where tEnum : struct, Enum + public static Stream WriteEnumNullable(this Stream stream, T? value) where T : struct, Enum => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteEnum(stream, value.Value); + /// + /// Write + /// + /// Stream + /// Value to write + /// Stream + [TargetedPatchingOptOut("Tiny method")] + public static Stream WriteEnumNullable(this Stream stream, object? value) + => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteEnum(stream, value); + /// /// Write /// @@ -82,17 +107,21 @@ public static tStream WriteEnumNullable(this tStream stream, tEn /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteEnumNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) - where T : struct, Enum - { - if (value == null) - { - await WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken).DynamicContext(); - } - else - { - await WriteEnumAsync(stream, value.Value, cancellationToken).DynamicContext(); - } - } + public static Task WriteEnumNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum + => value == null + ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) + : WriteEnumAsync(stream, value.Value, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + public static Task WriteEnumNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) + => value == null + ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) + : WriteEnumAsync(stream, value, cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index 83afdd0..a5eeb83 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -1,4 +1,5 @@ -using System.Runtime; +using System.Collections; +using System.Runtime; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -9,91 +10,58 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteList(this tStream stream, List value) where tStream : Stream - { - if (typeof(tElement) == typeof(byte)) return WriteBytes(stream, (value as byte[])!); - try + public static Stream WriteList(this Stream stream, IList value) + => SerializerException.Wrap(() => { + if (value.GetType().GetGenericArgumentsCached()[0] == typeof(byte)) return WriteBytes(stream, (value as byte[])!); WriteNumber(stream, value.Count); if (value.Count == 0) return stream; - foreach (tElement element in value) WriteObject(stream, element); + foreach (object element in value) WriteObject(stream, element); return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write /// - /// Element type /// Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteListAsync(this Stream stream, List value, CancellationToken cancellationToken = default) - { - if (typeof(T) == typeof(byte)) - { - await WriteBytesAsync(stream, (value as byte[])!, cancellationToken).DynamicContext(); - return; - } - try + public static Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { + if (value.GetType().GetGenericArgumentsCached()[0] == typeof(byte)) + { + await WriteBytesAsync(stream, (value as byte[])!, cancellationToken).DynamicContext(); + return; + } await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); if (value.Count == 0) return; - foreach (T element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + }); /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteListNullable(this tStream stream, List? value) where tStream : Stream - { - Write(stream, value != null); - if (value != null) WriteList(stream, value); - return stream; - } + public static Stream WriteListNullable(this Stream stream, IList? value) + => WriteIfNull(stream, value, () => WriteList(stream, value!)); /// /// Write /// - /// Element type /// Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteListNullableAsync(this Stream stream, List? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteListAsync(stream, value, cancellationToken).DynamicContext(); - } + public static Task WriteListNullableAsync(this Stream stream, IList? value, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, value, () => WriteListAsync(stream, value!, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs new file mode 100644 index 0000000..8429a58 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -0,0 +1,198 @@ +using System.Runtime; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Number + public static partial class StreamExtensions + { + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Stream + public static Stream WriteNumber(this Stream stream, T value) where T : struct, IConvertible + => WriteNumberInt(stream, value, type: null); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Stream + public static Stream WriteNumber(this Stream stream, object value) => WriteNumberInt(stream, value, type: null); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Number type + /// Stream + public static Stream WriteNumberInt(Stream stream, object value, NumberTypes? type) + => SerializerException.Wrap(() => + { + if (type == null) (_, type) = value.GetNumberAndType(); + using RentedArray poolData = new(1, clean: false); + poolData[0] = (byte)type; + stream.Write(poolData.Span); + if (!type.Value.IsZero() && !type.Value.HasValueFlags()) + switch (type) + { + case NumberTypes.Byte: + case NumberTypes.Byte | NumberTypes.Unsigned: + poolData[0] = value.ConvertType(); + stream.Write(poolData.Span); + break; + case NumberTypes.Short: + Write(stream, (int)value.ConvertType()); + break; + case NumberTypes.Short | NumberTypes.Unsigned: + Write(stream, value.ConvertType()); + break; + case NumberTypes.Int: + Write(stream, value.ConvertType()); + break; + case NumberTypes.Int | NumberTypes.Unsigned: + Write(stream, value.ConvertType()); + break; + case NumberTypes.Long: + Write(stream, value.ConvertType()); + break; + case NumberTypes.Long | NumberTypes.Unsigned: + Write(stream, value.ConvertType()); + break; + case NumberTypes.Float: + Write(stream, value.ConvertType()); + break; + case NumberTypes.Double: + Write(stream, value.ConvertType()); + break; + case NumberTypes.Decimal: + Write(stream, value.ConvertType()); + break; + } + return stream; + }); + + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNumberAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible + => WriteNumberIntAsync(stream, value, type: null, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = default) + => WriteNumberIntAsync(stream, value, type: null, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Number type + /// Cancellation token + private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes? type, CancellationToken cancellationToken) + => SerializerException.WrapAsync(async () => + { + if (type == null) (_, type) = value.GetNumberAndType(); + using RentedArray poolData = new(1, clean: false); + poolData[0] = (byte)type; + await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); + if (!type.Value.IsZero() && !type.Value.HasValueFlags()) + switch (type) + { + case NumberTypes.Byte: + case NumberTypes.Byte | NumberTypes.Unsigned: + poolData[0] = value.ConvertType(); + await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); + break; + case NumberTypes.Short: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Short | NumberTypes.Unsigned: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Int: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Int | NumberTypes.Unsigned: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Long: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Long | NumberTypes.Unsigned: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Float: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Double: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + case NumberTypes.Decimal: + await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + break; + } + }); + + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Stream + [TargetedPatchingOptOut("Tiny method")] + public static Stream WriteNumberNullable(this Stream stream, T? value) where T : struct, IConvertible + => value == null ? WriteEnum(stream, NumberTypes.Null) : WriteNumber(stream, value.Value); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Stream + [TargetedPatchingOptOut("Tiny method")] + public static Stream WriteNumberNullable(this Stream stream, object? value) + => value == null ? WriteEnum(stream, NumberTypes.Null) : WriteNumber(stream, value); + + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + public static Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) + where T : struct, IConvertible + => value == null + ? WriteEnumAsync(stream, NumberTypes.Null, cancellationToken) + : WriteNumberAsync(stream, value.Value, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + public static Task WriteNumberNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) + => value == null + ? WriteEnumAsync(stream, NumberTypes.Null, cancellationToken) + : WriteNumberAsync(stream, value, cancellationToken); + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index ceb7ef3..9a4774f 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -11,206 +11,147 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Object type /// Stream /// Object to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteObject(this tStream stream, tObj obj) where tStream : Stream - { - if (obj == null) throw new ArgumentNullException(nameof(obj)); - if (obj is IStreamSerializer streamSerializer) return WriteSerialized(stream, streamSerializer); - if (StreamSerializer.FindSerializer(obj.GetType()) is not StreamSerializer.Serialize_Delegate serializer) + public static Stream WriteObject(this Stream stream, object obj) + => SerializerException.Wrap(() => { - WriteAnyObjectMethod.MakeGenericMethod(typeof(tStream), typeof(tObj)).InvokeAuto(obj: null, stream, obj); + ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj); + if (obj is IStreamSerializer streamSerializer) + return WriteSerialized(stream, streamSerializer); + else if (StreamSerializer.FindSerializer(obj.GetType()) is not StreamSerializer.Serialize_Delegate serializer) + return WriteAnyObject(stream, obj); + else + SerializerException.Wrap(() => serializer(stream, obj)); return stream; - } - try - { - serializer(stream, obj); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - return stream; - } + }); /// /// Write /// - /// Object type /// Stream /// Object to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteObjectAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) - { - if (obj == null) throw new ArgumentNullException(nameof(obj)); - if (obj is IStreamSerializer streamSerializer) - { - await WriteSerializedAsync(stream, streamSerializer, cancellationToken).DynamicContext(); - return; - } - if (StreamSerializer.FindAsyncSerializer(obj.GetType()) is not StreamSerializer.AsyncSerialize_Delegate serializer) - { - Task task = (Task)WriteAnyObjectAsyncMethod.MakeGenericMethod(typeof(T)).InvokeAuto(obj: null, stream, obj, cancellationToken)!; - await task.DynamicContext(); - return; - } - try - { - await serializer(stream, obj, cancellationToken).DynamicContext(); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + public static Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj); + if (obj is IStreamSerializer streamSerializer) + await WriteSerializedAsync(stream, streamSerializer, cancellationToken).DynamicContext(); + else if (StreamSerializer.FindAsyncSerializer(obj.GetType()) is not StreamSerializer.AsyncSerialize_Delegate serializer) + await WriteAnyObjectAsync(stream, obj, cancellationToken).DynamicContext(); + else + await SerializerException.WrapAsync(async () => await serializer(stream, obj, cancellationToken).DynamicContext()).DynamicContext(); + }); /// /// Write /// - /// Stream type - /// Object type /// Stream /// Object to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteObjectNullable(this tStream stream, tObj? obj) where tStream : Stream - { - Write(stream, obj != null); - if (obj != null) WriteObject(stream, obj); - return stream; - } + public static Stream WriteObjectNullable(this Stream stream, object? obj) + => WriteIfNull(stream, obj, () => WriteObject(stream, obj!)); /// /// Write /// - /// Object type /// Stream /// Object to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteObjectNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, obj != null, cancellationToken).DynamicContext(); - if (obj != null) await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); - } + public static Task WriteObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); /// /// Write any object /// - /// Stream type - /// Object type /// Stream /// Object /// Stream - public static tStream WriteAnyObject(this tStream stream, tObj obj) - where tStream : Stream - where tObj : class, new() - { - if (obj is IStreamSerializer serializable) return WriteSerialized(stream, serializable); - Type type = obj.GetType(); - PropertyInfo[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); - StreamSerializerAttribute? attr = type.GetCustomAttribute(), - objAttr; - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - WriteNumberNullable(stream, attr?.Version); - WriteNumber(stream, pis.Length); - foreach (PropertyInfo pi in pis) + public static Stream WriteAnyObject(this Stream stream, object obj) + => SerializerException.Wrap(() => { - objAttr = pi.GetCustomAttribute(); - if (useChecksum && !(objAttr?.SkipPropertyNameChecksum ?? false)) - Write(stream, Encoding.UTF8.GetBytes(pi.Name).Aggregate((c, b) => (byte)(c ^ b))); - if (Nullable.GetUnderlyingType(pi.PropertyType) == null) - { - WriteAny(stream, pi.GetValue(obj)!); - } - else + if (obj is IStreamSerializer serializable) return WriteSerialized(stream, serializable); + Type type = obj.GetType(); + PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + WriteNumberNullable(stream, attr?.Version); + WriteNumber(stream, pis.Length); + foreach (PropertyInfoExt pi in pis) { - WriteAnyNullable(stream, pi.GetValue(obj)); + if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) + Write(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b))); + if (pi.Property.PropertyType.IsNullable()) + { + WriteAnyNullable(stream, pi.Getter!(obj)!); + } + else + { + WriteAny(stream, pi.Getter!(obj)!); + } } - } - return stream; - } + return stream; + }); /// /// Write any object /// - /// Object type /// Stream /// Object /// Cancellation token - public static async Task WriteAnyObjectAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : class, new() - { - if (obj is IStreamSerializer serializable) - { - await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); - return; - } - Type type = obj.GetType(); - PropertyInfo[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); - StreamSerializerAttribute? attr = type.GetCustomAttribute(), - objAttr; - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - await WriteNumberNullableAsync(stream, attr?.Version, cancellationToken).DynamicContext(); - await WriteNumberAsync(stream, pis.Length, cancellationToken).DynamicContext(); - foreach (PropertyInfo pi in pis) + public static Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { - objAttr = pi.GetCustomAttribute(); - if (useChecksum && !(objAttr?.SkipPropertyNameChecksum ?? false)) - await WriteAsync(stream, Encoding.UTF8.GetBytes(pi.Name).Aggregate((c, b) => (byte)(c ^ b)), cancellationToken).DynamicContext(); - if (Nullable.GetUnderlyingType(pi.PropertyType) == null) + if (obj is IStreamSerializer serializable) { - await WriteAnyAsync(stream, pi.GetValue(obj)!, cancellationToken).DynamicContext(); + await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); + return; } - else + Type type = obj.GetType(); + PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + await WriteNumberNullableAsync(stream, attr?.Version, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, pis.Length, cancellationToken).DynamicContext(); + foreach (PropertyInfoExt pi in pis) { - await WriteAnyNullableAsync(stream, pi.GetValue(obj), cancellationToken).DynamicContext(); + if (useChecksum && !(pi.Property.GetCustomAttribute()?.SkipPropertyNameChecksum ?? false)) + await WriteAsync(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), cancellationToken).DynamicContext(); + if (pi.Property.PropertyType.IsNullable()) + { + await WriteAnyNullableAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); + } } - } - } + }); /// /// Write any object /// - /// Stream type - /// Object type /// Stream /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteAnyObjectNullable(this tStream stream, tObj? obj) - where tStream : Stream - where tObj : class, new() - { - Write(stream, obj != null); - if (obj != null) WriteAnyObject(stream, obj); - return stream; - } + public static Stream WriteAnyObjectNullable(this Stream stream, object? obj) + => WriteIfNull(stream, obj, () => WriteAnyObject(stream, obj!)); /// /// Write any object /// - /// Object type /// Stream /// Object /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAnyObjectNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : class, new() - { - await WriteAsync(stream, obj != null, cancellationToken).DynamicContext(); - if (obj != null) await WriteAnyObjectAsync(stream, obj, cancellationToken).DynamicContext(); - } + public static Task WriteAnyObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index 8ce07cc..0edfae3 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -1,5 +1,4 @@ using System.Runtime; -using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -9,16 +8,16 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteSerialized(this T stream, IStreamSerializer obj) where T : Stream - { - obj.Serialize(stream); - return stream; - } + public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj) + => SerializerException.Wrap(() => + { + obj.Serialize(stream); + return stream; + }); /// /// Write @@ -28,22 +27,17 @@ public static T WriteSerialized(this T stream, IStreamSerializer obj) where T /// Cancellation token [TargetedPatchingOptOut("Tiny method")] public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = default) - => obj.SerializeAsync(stream, cancellationToken); + => SerializerException.Wrap(() => obj.SerializeAsync(stream, cancellationToken)); /// /// Write /// - /// Stream type /// Stream /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteSerializedNullable(this T stream, IStreamSerializer? obj) where T : Stream - { - Write(stream, obj != null); - obj?.Serialize(stream); - return stream; - } + public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer? obj) + => WriteIfNull(stream, obj, () => WriteSerialized(stream, obj!)); /// /// Write @@ -52,10 +46,7 @@ public static T WriteSerializedNullable(this T stream, IStreamSerializer? obj /// Object /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, obj != null, cancellationToken).DynamicContext(); - if (obj != null) await obj.SerializeAsync(stream, cancellationToken).DynamicContext(); - } + public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs index c2513d2..6baa1ae 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -10,50 +10,49 @@ public static partial class StreamExtensions /// /// Write a stream /// - /// Stream type /// Stream /// Source stream /// Array pool /// Chunk length in bytes /// Stream - public static T WriteStream(this T stream, Stream source, ArrayPool? pool = null, int? chunkLength = null) where T : Stream - { - if (chunkLength != null && chunkLength.Value < 1) throw new ArgumentOutOfRangeException(nameof(chunkLength)); - long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); - WriteNumber(stream, len); - if (len != 0) - if (source.CanSeek) - { - source.CopyTo(stream, bufferSize: chunkLength ?? Settings.BufferSize); - } - else - { - using RentedArray buffer = new(len: chunkLength ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); - for (int red = buffer.Length; red == buffer.Length;) + public static Stream WriteStream(this Stream stream, Stream source, ArrayPool? pool = null, int? chunkLength = null) + => SerializerException.Wrap(() => + { + if (chunkLength != null && chunkLength.Value < 1) throw new ArgumentOutOfRangeException(nameof(chunkLength)); + long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); + WriteNumber(stream, len); + if (len != 0) + if (source.CanSeek) + { + source.CopyTo(stream, bufferSize: chunkLength ?? Settings.BufferSize); + } + else { - red = stream.Read(buffer.Span); - if (red < 1) + using RentedArray buffer = new(len: chunkLength ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + for (int red = buffer.Length; red == buffer.Length;) { - stream.WriteBytes(Array.Empty()); - break; + red = stream.Read(buffer.Span); + if (red < 1) + { + stream.WriteBytes(Array.Empty()); + break; + } + stream.WriteBytes(buffer.Span); } - stream.WriteBytes(buffer.Span); } - } - return stream; - } + return stream; + }); /// /// Write a stream /// - /// Stream type /// Stream /// Source stream /// Array pool /// Chunk length in bytes /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteStreamNullable(this T stream, Stream? source, ArrayPool? pool = null, int? chunkLength = null) where T : Stream + public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool? pool = null, int? chunkLength = null) => source == null ? WriteNumber(stream, long.MinValue) : WriteStream(stream, source, pool, chunkLength); /// @@ -64,37 +63,38 @@ public static T WriteStreamNullable(this T stream, Stream? source, ArrayPool< /// Array pool /// Chunk length in bytes /// Cancellation token - public static async Task WriteStreamAsync( + public static Task WriteStreamAsync( this Stream stream, Stream source, ArrayPool? pool = null, int? chunkLength = null, CancellationToken cancellationToken = default ) - { - if (chunkLength != null && chunkLength.Value < 1) throw new ArgumentOutOfRangeException(nameof(chunkLength)); - long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); - await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); - if (len != 0) - if (source.CanSeek) - { - await source.CopyToAsync(stream, bufferSize: chunkLength ?? Settings.BufferSize, cancellationToken).DynamicContext(); - } - else - { - using RentedArray buffer = new(len: chunkLength ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); - for (int red = buffer.Length; red == buffer.Length;) + => SerializerException.WrapAsync(async () => + { + if (chunkLength != null && chunkLength.Value < 1) throw new ArgumentOutOfRangeException(nameof(chunkLength)); + long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); + await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); + if (len != 0) + if (source.CanSeek) { - red = await stream.ReadAsync(buffer.Memory, cancellationToken).DynamicContext(); - if (red < 1) + await source.CopyToAsync(stream, bufferSize: chunkLength ?? Settings.BufferSize, cancellationToken).DynamicContext(); + } + else + { + using RentedArray buffer = new(len: chunkLength ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + for (int red = buffer.Length; red == buffer.Length;) { - await stream.WriteBytesAsync(Array.Empty(), cancellationToken).DynamicContext(); - break; + red = await stream.ReadAsync(buffer.Memory, cancellationToken).DynamicContext(); + if (red < 1) + { + await stream.WriteBytesAsync(Array.Empty(), cancellationToken).DynamicContext(); + break; + } + await stream.WriteBytesAsync(buffer.Memory, cancellationToken).DynamicContext(); } - await stream.WriteBytesAsync(buffer.Memory, cancellationToken).DynamicContext(); } - } - } + }); /// /// Write a stream @@ -106,22 +106,15 @@ public static async Task WriteStreamAsync( /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteStreamNullableAsync( + public static Task WriteStreamNullableAsync( this Stream stream, Stream? source, ArrayPool? pool = null, int? chunkLength = null, CancellationToken cancellationToken = default ) - { - if (source == null) - { - await WriteNumberAsync(stream, long.MinValue, cancellationToken).DynamicContext(); - } - else - { - await WriteStreamAsync(stream, source, pool, chunkLength, cancellationToken).DynamicContext(); - } - } + => source == null + ? WriteNumberAsync(stream, long.MinValue, cancellationToken) + : WriteStreamAsync(stream, source, pool, chunkLength, cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index 7b765aa..1e6b0ea 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -10,24 +10,17 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteString(this T stream, string value) where T : Stream - { - try + public static Stream WriteString(this Stream stream, string value) + => SerializerException.Wrap(() => { using RentedArray buffer = new(value.Length << 2, clean: false); WriteBytes(stream, buffer.Span[..value.GetBytes(buffer)]); return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write @@ -36,33 +29,22 @@ public static T WriteString(this T stream, string value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) - { - try + public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { using RentedArray buffer = new(value.Length << 2, clean: false); await WriteBytesAsync(stream, buffer.Memory[..value.GetBytes(buffer)], cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteStringNullable(this T stream, string? value) where T : Stream - { - Write(stream, value != null); - if (value != null) WriteString(stream, value); - return stream; - } + public static Stream WriteStringNullable(this Stream stream, string? value) + => WriteIfNull(stream, value, () => WriteString(stream, value!)); /// /// Write @@ -71,33 +53,23 @@ public static T WriteStringNullable(this T stream, string? value) where T : S /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteStringNullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteStringAsync(stream, value, cancellationToken).DynamicContext(); - } + public static Task WriteStringNullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, value, async () => await WriteStringAsync(stream, value!, cancellationToken).DynamicContext(), cancellationToken); /// /// Write UTF-16 (little endian) string /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteString16(this T stream, string value) where T : Stream - { - try + public static Stream WriteString16(this Stream stream, string value) + => SerializerException.Wrap(() => { using RentedArray buffer = new(value.Length << 2, clean: false); WriteBytes(stream, buffer.Span[..value.GetBytes16(buffer)]); return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write UTF-16 (little endian) string @@ -106,33 +78,22 @@ public static T WriteString16(this T stream, string value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) - { - try + public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { using RentedArray buffer = new(value.Length << 2, clean: false); await WriteBytesAsync(stream, buffer.Memory[..value.GetBytes16(buffer)], cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write UTF-16 (little endian) string /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteString16Nullable(this T stream, string? value) where T : Stream - { - Write(stream, value != null); - if (value != null) WriteString16(stream, value); - return stream; - } + public static Stream WriteString16Nullable(this Stream stream, string? value) + => WriteIfNull(stream, value, () => WriteString16(stream, value!)); /// /// Write UTF-16 (little endian) string @@ -141,33 +102,23 @@ public static T WriteString16Nullable(this T stream, string? value) where T : /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteString16NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteString16Async(stream, value, cancellationToken).DynamicContext(); - } + public static Task WriteString16NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, value, async () => await WriteString16Async(stream, value!, cancellationToken).DynamicContext(), cancellationToken); /// /// Write UTF-32 (little endian) string /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteString32(this T stream, string value) where T : Stream - { - try + public static Stream WriteString32(this Stream stream, string value) + => SerializerException.Wrap(() => { using RentedArray buffer = new(value.Length << 2, clean: false); WriteBytes(stream, buffer.Span[..value.GetBytes32(buffer)]); return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write UTF-32 (little endian) string @@ -176,33 +127,22 @@ public static T WriteString32(this T stream, string value) where T : Stream /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) - { - try + public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => { using RentedArray buffer = new(value.Length << 2, clean: false); await WriteBytesAsync(stream, buffer.Memory[..value.GetBytes32(buffer)], cancellationToken).DynamicContext(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write UTF-32 (little endian) string /// - /// Stream type /// Stream /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteString32Nullable(this T stream, string? value) where T : Stream - { - Write(stream, value != null); - if (value != null) WriteString32(stream, value); - return stream; - } + public static Stream WriteString32Nullable(this Stream stream, string? value) + => WriteIfNull(stream, value, () => WriteString32(stream, value!)); /// /// Write UTF-32 (little endian) string @@ -211,10 +151,7 @@ public static T WriteString32Nullable(this T stream, string? value) where T : /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteString32Async(stream, value, cancellationToken).DynamicContext(); - } + public static Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) + => WriteIfNullAsync(stream, value, async () => await WriteString32Async(stream, value!, cancellationToken).DynamicContext(), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs index 8cdcf76..e828284 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs @@ -11,98 +11,85 @@ public static partial class StreamExtensions /// /// Write a struct /// - /// Stream type - /// Struct type /// Stream /// Struct /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteStruct(this tStream stream, tStruct value, bool forceLittleEndian = true) - where tStream : Stream - where tStruct : struct - { - using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); - GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); - try - { - Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); - } - finally + public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true) + => SerializerException.Wrap(() => { - gch.Free(); - } - if (forceLittleEndian && !BitConverter.IsLittleEndian && typeof(tStruct).GetCustomAttribute() is StreamSerializerAttribute attr) - ConvertStructureEndianess(typeof(tStruct), buffer.Memory, attr); - return WriteBytes(stream, buffer.Span); - } + Type structType = value.GetType(); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); + try + { + Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); + } + finally + { + gch.Free(); + } + if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) + ConvertStructureEndianess(structType, buffer.Memory, attr); + return WriteBytes(stream, buffer.Span); + }); /// /// Write a struct /// - /// Stream type - /// Struct type /// Stream /// Struct /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteStructNullable(this tStream stream, tStruct? value, bool forceLittleEndian = true) - where tStream : Stream - where tStruct : struct - => value == null ? stream.Write(false) : stream.Write(true).WriteStruct(value.Value, forceLittleEndian); + public static Stream WriteStructNullable(this Stream stream, object? value, bool forceLittleEndian = true) + => WriteIfNull(stream, value, () => WriteStruct(stream, value!, forceLittleEndian)); /// /// Write a struct /// - /// Stream type - /// Struct type /// Stream /// Struct /// Force little endian encoding? /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteStructAsync(this tStream stream, tStruct value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) - where tStream : Stream - where tStruct : struct - { - using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); - GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); - try + public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(() => { - Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); - } - finally - { - gch.Free(); - } - if (forceLittleEndian && !BitConverter.IsLittleEndian && typeof(tStruct).GetCustomAttribute() is StreamSerializerAttribute attr) - ConvertStructureEndianess(typeof(tStruct), buffer.Memory, attr); - return WriteBytesAsync(stream, buffer.Memory, cancellationToken); - } + Type structType = value.GetType(); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); + try + { + Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); + } + finally + { + gch.Free(); + } + if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttribute() is StreamSerializerAttribute attr) + ConvertStructureEndianess(structType, buffer.Memory, attr); + return WriteBytesAsync(stream, buffer.Memory, cancellationToken); + }); /// /// Write a struct /// - /// Stream type - /// Struct type /// Stream /// Struct /// Force little endian encoding? /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteStructNullableAsync( - this tStream stream, - tStruct? value, + public static Task WriteStructNullableAsync( + this Stream stream, + object? value, bool forceLittleEndian = true, CancellationToken cancellationToken = default ) - where tStream : Stream - where tStruct : struct - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteStructAsync(stream, value.Value, forceLittleEndian, cancellationToken).DynamicContext(); - } + => WriteIfNullAsync(stream, value, () => WriteStructAsync(stream, value!, forceLittleEndian, cancellationToken), cancellationToken); /// /// Convert the endianess of structure fields diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index 5b51959..bf48b2c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -1,5 +1,8 @@ -using System.Reflection; +using System.Buffers; +using System.Diagnostics.CodeAnalysis; +using System.Reflection; using System.Runtime; +using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -9,125 +12,140 @@ namespace wan24.StreamSerializerExtensions public static partial class StreamExtensions { /// - /// Write object method - /// - public static readonly MethodInfo WriteObjectMethod; - /// - /// Write object method - /// - public static readonly MethodInfo WriteObjectAsyncMethod; - /// - /// Write any object method - /// - public static readonly MethodInfo WriteAnyObjectMethod; - /// - /// Write any object method - /// - public static readonly MethodInfo WriteAnyObjectAsyncMethod; - /// - /// Write number method - /// - public static readonly MethodInfo WriteNumberMethod; - /// - /// Write number method - /// - public static readonly MethodInfo WriteNumberAsyncMethod; - /// - /// Write enumeration method - /// - public static readonly MethodInfo WriteEnumMethod; - /// - /// Write enumeration method - /// - public static readonly MethodInfo WriteEnumAsyncMethod; - /// - /// Write array method + /// Constructor /// - public static readonly MethodInfo WriteArrayMethod; + static StreamExtensions() + { + ArrayEmptyMethod = typeof(Array).GetMethodCached(nameof(Array.Empty), BindingFlags.Static | BindingFlags.Public)!; + Type type = typeof(StreamExtensions); + ReadStructMethod = type.GetMethodCached(nameof(ReadStruct), BindingFlags.Static | BindingFlags.Public) + ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStruct)}"); + ReadStructAsyncMethod = type.GetMethodCached(nameof(ReadStructAsync), BindingFlags.Static | BindingFlags.Public) + ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStructAsync)}"); + } + /// - /// Write array method + /// Write the serializer version /// - public static readonly MethodInfo WriteArrayAsyncMethod; + /// Stream + /// Stream + [TargetedPatchingOptOut("Tiny method")] + public static Stream WriteSerializerVersion(this Stream stream) => WriteNumber(stream, StreamSerializer.VERSION); + /// - /// Write list method + /// Write the serializer version /// - public static readonly MethodInfo WriteListMethod; + /// Stream + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) + => WriteNumberAsync(stream, StreamSerializer.VERSION, cancellationToken); + /// - /// Write list method + /// Write a boolean flag if an object is not /// - public static readonly MethodInfo WriteListAsyncMethod; + /// Object type + /// Stream + /// Object + /// Is not ? + [TargetedPatchingOptOut("Tiny method")] + public static bool WriteIfNull(this Stream stream, [NotNullWhen(true)] T? obj) + { + bool isNotNull = obj != null; + Write(stream, isNotNull); + return isNotNull; + } + /// - /// Write dictionary method + /// Write a boolean flag if an object is not /// - public static readonly MethodInfo WriteDictMethod; + /// Object type + /// Stream + /// Object + /// Cancellation token + /// Is not ? + [TargetedPatchingOptOut("Tiny method")] + public static async Task WriteIfNullAsync(this Stream stream, [NotNullWhen(true)] T? obj, CancellationToken cancellationToken = default) + { + //TODO NotNullWhen seems not to work with a task result + bool isNotNull = obj != null; + await WriteAsync(stream, isNotNull, cancellationToken).DynamicContext(); + return isNotNull; + } + /// - /// Write dictionary method + /// Write a boolean flag if an object is not /// - public static readonly MethodInfo WriteDictAsyncMethod; + /// Object type + /// Stream + /// Object + /// Write action to execute, if the object isn't + /// Stream + [TargetedPatchingOptOut("Tiny method")] + public static Stream WriteIfNull(this Stream stream, T? obj, Action action) + { + if (WriteIfNull(stream, obj)) action(); + return stream; + } /// - /// Constructor + /// Write a boolean flag if an object is not /// - static StreamExtensions() + /// Object type + /// Stream + /// Object + /// Write action to execute, if the object isn't + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + public static async Task WriteIfNullAsync(this Stream stream, T? obj, Func action, CancellationToken cancellationToken = default) { - Type type = typeof(StreamExtensions); - WriteObjectMethod = type.GetMethod(nameof(WriteObject), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteObject)}"); - WriteObjectAsyncMethod = type.GetMethod(nameof(WriteObjectAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteObjectAsync)}"); - WriteAnyObjectMethod = type.GetMethod(nameof(WriteAnyObject), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteAnyObject)}"); - WriteAnyObjectAsyncMethod = type.GetMethod(nameof(WriteAnyObjectAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteAnyObjectAsync)}"); - WriteNumberMethod = type.GetMethod(nameof(WriteNumber), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteNumber)}"); - WriteNumberAsyncMethod = type.GetMethod(nameof(WriteNumberAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteNumberAsync)}"); - WriteEnumMethod = type.GetMethod(nameof(WriteEnum), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteEnum)}"); - WriteEnumAsyncMethod = type.GetMethod(nameof(WriteEnumAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteEnumAsync)}"); - WriteArrayMethod = type.GetMethod(nameof(WriteArray), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteArray)}"); - WriteArrayAsyncMethod = type.GetMethod(nameof(WriteArrayAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteArrayAsync)}"); - WriteListMethod = type.GetMethod(nameof(WriteList), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteList)}"); - WriteListAsyncMethod = type.GetMethod(nameof(WriteListAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteListAsync)}"); - WriteDictMethod = type.GetMethod(nameof(WriteDict), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteDict)}"); - WriteDictAsyncMethod = type.GetMethod(nameof(WriteDictAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(WriteDictAsync)}"); - ReadObjectMethod = type.GetMethod(nameof(ReadObject), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadObject)}"); - ReadObjectAsyncMethod = type.GetMethod(nameof(ReadObjectAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadObjectAsync)}"); - ReadObjectNullableMethod = type.GetMethod(nameof(ReadObjectNullable), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadObjectNullable)}"); - ReadObjectNullableAsyncMethod = type.GetMethod(nameof(ReadObjectNullableAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadObjectNullableAsync)}"); - ReadStructMethod = type.GetMethod(nameof(ReadStruct), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStruct)}"); - ReadStructAsyncMethod = type.GetMethod(nameof(ReadStructAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStructAsync)}"); - ReadAnyMethod = type.GetMethod(nameof(ReadAny), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadAny)}"); - ReadAnyAsyncMethod = type.GetMethod(nameof(ReadAnyAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadAnyAsync)}"); - ReadAnyNullableMethod = type.GetMethod(nameof(ReadAnyNullable), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadAnyNullable)}"); - ReadAnyNullableAsyncMethod = type.GetMethod(nameof(ReadAnyNullableAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadAnyNullableAsync)}"); - ReadSerializedMethod = type.GetMethod(nameof(ReadSerialized), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadSerialized)}"); - ReadSerializedAsyncMethod = type.GetMethod(nameof(ReadSerializedAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadSerializedAsync)}"); - ReadNumberMethod = type.GetMethod(nameof(ReadNumber), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadNumber)}"); - ReadNumberAsyncMethod = type.GetMethod(nameof(ReadNumberAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadNumberAsync)}"); - ReadNumberIntMethod = type.GetMethod(nameof(ReadNumberInt), BindingFlags.Static | BindingFlags.NonPublic) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadNumberInt)}"); - ReadNumberIntAsyncMethod = type.GetMethod(nameof(ReadNumberIntAsync), BindingFlags.Static | BindingFlags.NonPublic) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadNumberIntAsync)}"); - ReadEnumMethod = type.GetMethod(nameof(ReadEnum), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadEnum)}"); - ReadEnumAsyncMethod = type.GetMethod(nameof(ReadEnumAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadEnumAsync)}"); - ReadArrayMethod = type.GetMethod(nameof(ReadArray), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadArray)}"); - ReadArrayAsyncMethod = type.GetMethod(nameof(ReadArrayAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadArrayAsync)}"); - ReadListMethod = type.GetMethod(nameof(ReadList), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadList)}"); - ReadListAsyncMethod = type.GetMethod(nameof(ReadListAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadListAsync)}"); - ReadDictMethod = type.GetMethod(nameof(ReadDict), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadDict)}"); - ReadDictAsyncMethod = type.GetMethod(nameof(ReadDictAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadDictAsync)}"); - ArrayEmptyMethod = typeof(Array).GetMethod(nameof(Array.Empty), BindingFlags.Static | BindingFlags.Public)!; + if (await WriteIfNullAsync(stream, obj, cancellationToken).DynamicContext()) + await action().DynamicContext(); } /// - /// Write the serializer version + /// Write serialized Data /// - /// Stream type /// Stream + /// Serialized data + /// Data length in bytes + /// Array pool (data will returned to that pool) /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteSerializerVersion(this T stream) where T : Stream => WriteNumber(stream, StreamSerializer.VERSION); + public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool? pool = null) + => SerializerException.Wrap(() => + { + try + { + stream.Write(data.AsSpan(0, len)); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + } + return stream; + }); /// - /// Write the serializer version + /// Write serialized Data /// /// Stream + /// Serialized data + /// Data length in bytes + /// Array pool (data will returned to that pool) /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) - => WriteNumberAsync(stream, StreamSerializer.VERSION, cancellationToken); + public static async Task WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool? pool = null, CancellationToken cancellationToken = default) + => await SerializerException.WrapAsync(async () => + { + try + { + await stream.WriteAsync(data.AsMemory(0, len), cancellationToken).DynamicContext(); + } + finally + { + (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + } + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index a2c6db5..d729d43 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -1,4 +1,5 @@ using System.Buffers; +using System.Collections; using System.Collections.Concurrent; using wan24.Core; @@ -12,7 +13,7 @@ public static class StreamSerializer /// /// Version number /// - public const int VERSION = 2; + public const int VERSION = 3; /// /// Initialized? @@ -55,7 +56,7 @@ static StreamSerializer() new KeyValuePair(typeof(bool),(s, v) => s.Write((bool)SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(sbyte),(s, v) => s.Write((sbyte)SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(byte),(s, v) => s.Write((byte)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(short),(s, v) => s.Write((short)SerializerHelper.EnsureNotNull(v))), + new KeyValuePair(typeof(short),(s, v) => s.Write((int)(short)SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(ushort),(s, v) => s.Write((ushort)SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(int),(s, v) => s.Write((int)SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(uint),(s, v) => s.Write((uint)SerializerHelper.EnsureNotNull(v))), @@ -66,27 +67,10 @@ static StreamSerializer() new KeyValuePair(typeof(decimal),(s, v) => s.Write((decimal)SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(byte[]),(s, v) => s.WriteBytes((byte[])SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(string),(s, v) => s.WriteString((string)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(Array),(s, v) => - { - SerializerHelper.EnsureNotNull(v); - StreamExtensions.WriteArrayMethod.MakeGenericMethod(typeof(Stream),v!.GetType().GetElementType()!).InvokeAuto(obj: null, s,v); - }), - new KeyValuePair(typeof(List<>),(s, v) => - { - SerializerHelper.EnsureNotNull(v); - StreamExtensions.WriteListMethod.MakeGenericMethod(typeof(Stream),v!.GetType().GetGenericArguments()[0]).InvokeAuto(obj: null, s,v); - }), - new KeyValuePair(typeof(Dictionary<,>),(s, v) => - { - SerializerHelper.EnsureNotNull(v); - Type[] genericArgs=v!.GetType().GetGenericArguments(); - StreamExtensions.WriteDictMethod.MakeGenericMethod(typeof(Stream),genericArgs[0], genericArgs[1]).InvokeAuto(obj: null, s,v); - }), - new KeyValuePair(typeof(Enum),(s, v) => - { - SerializerHelper.EnsureNotNull(v); - StreamExtensions.WriteEnumMethod.MakeGenericMethod(typeof(Stream),v!.GetType()).InvokeAuto(obj: null, s, v); - }), + new KeyValuePair(typeof(Array),(s, v) => s.WriteArray((Array)SerializerHelper.EnsureNotNull(v))), + new KeyValuePair(typeof(IList),(s, v) => s.WriteList((IList)SerializerHelper.EnsureNotNull(v))), + new KeyValuePair(typeof(IDictionary),(s, v) => s.WriteDict((IDictionary)SerializerHelper.EnsureNotNull(v))), + new KeyValuePair(typeof(Enum),(s, v) => s.WriteEnum((Enum)SerializerHelper.EnsureNotNull(v))), new KeyValuePair(typeof(Stream),(s, v) => s.WriteStream((Stream)SerializerHelper.EnsureNotNull(v))) } ); @@ -107,28 +91,11 @@ static StreamSerializer() new KeyValuePair(typeof(decimal),(s, v, ct) => s.WriteAsync((decimal)SerializerHelper.EnsureNotNull(v), ct)), new KeyValuePair(typeof(byte[]),(s, v, ct) => s.WriteBytesAsync((byte[])SerializerHelper.EnsureNotNull(v), ct)), new KeyValuePair(typeof(string),(s, v, ct) => s.WriteStringAsync((string)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(Array),(s, v, ct) => - { - SerializerHelper.EnsureNotNull(v); - return (Task)StreamExtensions.WriteArrayAsyncMethod.MakeGenericMethod(v!.GetType().GetElementType()!).InvokeAuto(obj: null, s,v,ct)!; - }), - new KeyValuePair(typeof(List<>),(s, v, ct) => - { - SerializerHelper.EnsureNotNull(v); - return (Task)StreamExtensions.WriteListAsyncMethod.MakeGenericMethod(v!.GetType().GetGenericArguments()[0]).InvokeAuto(obj: null, s,v,ct)!; - }), - new KeyValuePair(typeof(Dictionary<,>),(s, v, ct) => - { - SerializerHelper.EnsureNotNull(v); - Type[] genericArgs=v!.GetType().GetGenericArguments(); - return (Task)StreamExtensions.WriteDictAsyncMethod.MakeGenericMethod(genericArgs[0], genericArgs[1]).InvokeAuto(obj: null, s,v,ct)!; - }), - new KeyValuePair(typeof(Enum),(s, v, ct) => - { - SerializerHelper.EnsureNotNull(v); - return (Task)StreamExtensions.WriteEnumAsyncMethod.MakeGenericMethod(v !.GetType()).InvokeAuto(obj : null, s, v, ct)!; - }), - new KeyValuePair(typeof(Stream),(s, v, ct) => s.WriteStreamAsync((Stream)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), + new KeyValuePair(typeof(Array),(s, v, ct) => s.WriteArrayAsync((Array)SerializerHelper.EnsureNotNull(v), ct)), + new KeyValuePair(typeof(IList),(s, v, ct) => s.WriteListAsync((IList)SerializerHelper.EnsureNotNull(v), ct)), + new KeyValuePair(typeof(IDictionary),(s, v, ct) => s.WriteDictAsync((IDictionary)SerializerHelper.EnsureNotNull(v), ct)), + new KeyValuePair(typeof(Enum),(s, v, ct) => s.WriteEnumAsync((Enum)SerializerHelper.EnsureNotNull(v), ct)), + new KeyValuePair(typeof(Stream),(s, v, ct) => s.WriteStreamAsync((Stream)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)) } ); SyncDeserializer = new(new KeyValuePair[] @@ -145,56 +112,47 @@ static StreamSerializer() new KeyValuePair(typeof(float),(s,t,v,o) => s.ReadFloat(v)), new KeyValuePair(typeof(double),(s,t,v,o) => s.ReadDouble(v)), new KeyValuePair(typeof(decimal),(s,t,v,o) => s.ReadDecimal(v)), - new KeyValuePair(typeof(byte[]),(s,t,v,o) => + new KeyValuePair(typeof(byte[]),(s,t,v,o) => s.ReadBytes(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue) ), - new KeyValuePair(typeof(string),(s,t,v,o) => + new KeyValuePair(typeof(string),(s,t,v,o) => s.ReadString(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue) ), new KeyValuePair(typeof(Array),(s,t,v,o) => - { - SerializerHelper.EnsureNotNull(v); - return StreamExtensions.ReadArrayMethod.MakeGenericMethod(t.GetElementType()!).InvokeAuto( - obj: null, - s, + s.ReadArray( + t, v, null, o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default) - ); - }), - new KeyValuePair(typeof(List<>),(s,t,v,o) => - StreamExtensions.ReadListMethod.MakeGenericMethod(t.GetGenericArguments()[0]).InvokeAuto( - obj : null, - s, + o?.Attribute.GetValueSerializerOptions(property: null, s, v) + ) + ), + new KeyValuePair(typeof(IList),(s,t,v,o) => + s.ReadList( + t, v, null, o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default) + o?.Attribute.GetValueSerializerOptions(property: null, s, v) ) ), - new KeyValuePair(typeof(Dictionary<,>),(s,t,v,o) => - { - Type[] genericArgs=t.GetGenericArguments(); - return StreamExtensions.ReadDictMethod.MakeGenericMethod(genericArgs[0], genericArgs[1]).InvokeAuto( - obj : null, - s, + new KeyValuePair(typeof(IDictionary),(s,t,v,o) => + s.ReadDict( + t, v, null, o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetKeySerializerOptions(property: null, s, v, default), - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default) - ); - }), - new KeyValuePair(typeof(Enum),(s,t,v,o) => - StreamExtensions.ReadEnumMethod.MakeGenericMethod(t).InvokeAuto(obj : null, s, v) + o?.Attribute.GetKeySerializerOptions(property: null, s, v), + o?.Attribute.GetValueSerializerOptions(property: null, s, v) + ) ), + new KeyValuePair(typeof(Enum),(s,t,v,o) => s.ReadEnum(t,v)), new KeyValuePair(typeof(Stream),(s,t,v,o) => { - Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v,default)?? new FileStream( + Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v)?? new FileStream( Path.GetTempFileName(), FileMode.OpenOrCreate, FileAccess.ReadWrite, @@ -204,8 +162,7 @@ static StreamSerializer() ); try { - s.ReadStream(res,v,minLen:o?.GetMinLen(0L)??0, maxLen:o?.GetMaxLen(long.MaxValue)??long.MaxValue); - return res; + return s.ReadStream(res,v,minLen:o?.GetMinLen(0L)??0, maxLen:o?.GetMaxLen(long.MaxValue)??long.MaxValue); } catch { @@ -235,48 +192,61 @@ static StreamSerializer() s.ReadStringAsync(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue, cancellationToken: ct) ), new KeyValuePair(typeof(Array),(s,t,v,o,ct) => - (Task)StreamExtensions.ReadArrayAsyncMethod.MakeGenericMethod(t.GetElementType()!).InvokeAuto( - obj: null, - s, + s.ReadArrayAsync( + t, v, null, o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default), + o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), ct - )! + ) ), - new KeyValuePair(typeof(List<>),(s,t,v,o,ct) => - (Task)StreamExtensions.ReadListAsyncMethod.MakeGenericMethod(t.GetGenericArguments()[0]).InvokeAuto( - obj: null, - s, + new KeyValuePair(typeof(IList),(s,t,v,o,ct) => + s.ReadListAsync( + t, v, null, o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default), + o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), ct - )! + ) ), - new KeyValuePair(typeof(Dictionary<,>),(s,t,v,o,ct) => - { - Type[] genericArgs=t.GetGenericArguments(); - return (Task)StreamExtensions.ReadDictAsyncMethod.MakeGenericMethod(genericArgs[0], genericArgs[1]).InvokeAuto( - obj : null, - s, + new KeyValuePair(typeof(IDictionary),(s,t,v,o,ct) => + s.ReadDictAsync( + t, v, null, o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetKeySerializerOptions(property: null, s, v, default), - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default), + o?.Attribute.GetKeySerializerOptions(property: null, s, v, ct), + o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), ct - )!; - }), - new KeyValuePair(typeof(Enum),(s,t,v,o,ct) => - (Task)StreamExtensions.ReadEnumAsyncMethod.MakeGenericMethod(t).InvokeAuto(obj : null, s, v, null, ct)! - ), - new KeyValuePair(typeof(Stream),(s,t,v,o,ct) => StreamDeserializer(s,t,v,o,ct)) + ) + ), + new KeyValuePair(typeof(Enum),(s,t,v,o,ct) => s.ReadEnumAsync(t,v,cancellationToken: ct)), + new KeyValuePair(typeof(Stream),(s,t,v,o,ct) => + { + //TODO Should be asynchronous + Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v,ct)?? new FileStream( + Path.GetTempFileName(), + FileMode.OpenOrCreate, + FileAccess.ReadWrite, + FileShare.None, + bufferSize: Settings.BufferSize, + FileOptions.RandomAccess | FileOptions.DeleteOnClose + ); + try + { + return s.ReadStreamAsync(res,v,minLen:o?.GetMinLen(0L)??0, maxLen:o?.GetMaxLen(long.MaxValue)??long.MaxValue, cancellationToken: ct); + } + catch + { + res.Dispose(); + throw; + } + }) }); AllowedTypes = new(new Type[] { @@ -400,7 +370,6 @@ static StreamSerializer() res = types.FirstOrDefault(t => t == typeof(Array)); else if (type.IsEnum) res = types.FirstOrDefault(t => t == typeof(Enum)); - return res ?? types.FirstOrDefault(t => t.IsAssignableFrom(type)); } @@ -468,37 +437,6 @@ public static bool IsTypeAllowed(Type type) return false; } - /// - /// Asynchronous stream deserializer - /// - /// Stream - /// Requested return type - /// Serializer version - /// Options - /// Cancellation token - /// File stream - public static async Task StreamDeserializer(Stream stream, Type type, int version, ISerializerOptions? options, CancellationToken cancellationToken) - { - Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version, cancellationToken) ?? new FileStream( - Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), - FileMode.OpenOrCreate, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); - if (!type.IsAssignableFrom(res.GetType())) throw new SerializerException($"Requested type {type} isn't compatible with {res.GetType()}"); - try - { - return await stream.ReadStreamAsync(res, version, cancellationToken: cancellationToken).DynamicContext(); - } - catch - { - res.Dispose(); - throw; - } - } - /// /// Serializer delegate /// diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs index 7e1747f..aeace9b 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -184,7 +184,7 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position : $"{obj.GetType()}.{property!.Name} stream serializer attribute defines a stream factory type, but no method" , new InvalidProgramException() ); - MethodInfo delegateInfo = typeof(StreamFactory_Delegate).GetMethod(nameof(StreamFactory_Delegate.Invoke), BindingFlags.Public)!, + MethodInfo delegateInfo = typeof(StreamFactory_Delegate).GetMethodCached(nameof(StreamFactory_Delegate.Invoke), BindingFlags.Public)!, mi = StreamFactoryType.GetMethod( StreamFactoryMethod, BindingFlags.Public | BindingFlags.Static, @@ -192,7 +192,7 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position genericArgumentCount: null, exactTypes: false, delegateInfo.ReturnType, - delegateInfo.GetParameters().Select(p => p.ParameterType).ToArray() + delegateInfo.GetParametersCached().Select(p => p.ParameterType).ToArray() ) ?? throw new SerializerException( obj == null @@ -226,15 +226,15 @@ public virtual ISerializerOptions GetSerializerOptions(PropertyInfo? property, S : $"{property.DeclaringType}.{property!.Name} stream serializer attribute defines a serializer options factory type, but no method", new InvalidProgramException() ); - MethodInfo delegateInfo = typeof(SerializerOptionsFactory_Delegate).GetMethod("Invoke")!, + MethodInfo delegateInfo = typeof(SerializerOptionsFactory_Delegate).GetMethodCached("Invoke")!, mi = SerializerOptionsFactoryType.GetMethod( SerializerOptionsFactoryMethod, - BindingFlags.Public|BindingFlags.Static, + BindingFlags.Public | BindingFlags.Static, filter: null, genericArgumentCount: null, exactTypes: false, delegateInfo.ReturnType, - delegateInfo.GetParameters().Select(p => p.ParameterType).ToArray() + delegateInfo.GetParametersCached().Select(p => p.ParameterType).ToArray() ) ?? throw new SerializerException( property == null @@ -270,7 +270,7 @@ public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfo? property : $"{property.DeclaringType}.{property!.Name} stream serializer attribute defines a key serializer options factory type, but no method", new InvalidProgramException() ); - MethodInfo delegateInfo = typeof(SerializerOptionsFactory_Delegate).GetMethod("Invoke")!, + MethodInfo delegateInfo = typeof(SerializerOptionsFactory_Delegate).GetMethodCached("Invoke")!, mi = KeySerializerOptionsFactoryType.GetMethod( KeySerializerOptionsFactoryMethod, BindingFlags.Public | BindingFlags.Static, @@ -278,7 +278,7 @@ public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfo? property genericArgumentCount: null, exactTypes: false, delegateInfo.ReturnType, - delegateInfo.GetParameters().Select(p => p.ParameterType).ToArray() + delegateInfo.GetParametersCached().Select(p => p.ParameterType).ToArray() ) ?? throw new SerializerException( property == null @@ -308,7 +308,7 @@ public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfo? proper : $"{property.DeclaringType}.{property!.Name} stream serializer attribute defines a value serializer options factory type, but no method", new InvalidProgramException() ); - MethodInfo delegateInfo = typeof(SerializerOptionsFactory_Delegate).GetMethod("Invoke")!, + MethodInfo delegateInfo = typeof(SerializerOptionsFactory_Delegate).GetMethodCached("Invoke")!, mi = ValueSerializerOptionsFactoryType.GetMethod( ValueSerializerOptionsFactoryMethod, BindingFlags.Public | BindingFlags.Static, @@ -316,7 +316,7 @@ public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfo? proper genericArgumentCount: null, exactTypes: false, delegateInfo.ReturnType, - delegateInfo.GetParameters().Select(p => p.ParameterType).ToArray() + delegateInfo.GetParametersCached().Select(p => p.ParameterType).ToArray() ) ?? throw new SerializerException( property == null @@ -358,9 +358,9 @@ public virtual bool IsIncluded(StreamSerializerModes mode, int version) public virtual List GetStructureFields(Type type) { if (!type.IsValueType) throw new ArgumentException("Structure type required", nameof(type)); - return StructureFields ??= new(from fi in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + return StructureFields ??= new(from fi in type.GetFieldsCached(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) where !fi.IsStatic && - fi.GetCustomAttribute() is not null + fi.GetCustomAttributeCached() is not null select fi); } @@ -440,28 +440,28 @@ public static Stream MemoryStreamFactory( /// Type /// Object version /// Properties - public static IEnumerable GetWriteProperties(Type type, int? version = null) + public static IEnumerable GetWriteProperties(Type type, int? version = null) { - StreamSerializerAttribute? attr = type.GetCustomAttribute(); + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); StreamSerializerModes mode = attr?.Mode ?? StreamSerializerModes.OptOut; version ??= attr?.Version ?? 0; return mode switch { - StreamSerializerModes.OptIn => from pi in type.GetProperties(BindingFlags.Instance | BindingFlags.Public) - where (pi.GetMethod?.IsPublic ?? false) && - (pi.SetMethod?.IsPublic ?? false) && - pi.GetCustomAttribute() is StreamSerializerAttribute objAttr && + StreamSerializerModes.OptIn => from pi in type.GetPropertiesCached(BindingFlags.Instance | BindingFlags.Public) + where (pi.Property.GetMethod?.IsPublic ?? false) && + (pi.Property.SetMethod?.IsPublic ?? false) && + pi.Property.GetCustomAttributeCached() is StreamSerializerAttribute objAttr && objAttr.IsIncluded(mode, version.Value) - orderby pi.GetCustomAttribute()!.Position, pi.Name + orderby pi.Property.GetCustomAttributeCached()!.Position, pi.Property.Name select pi, - StreamSerializerModes.OptOut => from pi in type.GetProperties(BindingFlags.Instance | BindingFlags.Public) - where (pi.GetMethod?.IsPublic ?? false) && - (pi.SetMethod?.IsPublic ?? false) && + StreamSerializerModes.OptOut => from pi in type.GetPropertiesCached(BindingFlags.Instance | BindingFlags.Public) + where (pi.Property.GetMethod?.IsPublic ?? false) && + (pi.Property.SetMethod?.IsPublic ?? false) && ( - pi.GetCustomAttribute() is not StreamSerializerAttribute objAttr || + pi.Property.GetCustomAttributeCached() is not StreamSerializerAttribute objAttr || objAttr.IsIncluded(mode, version.Value) ) - orderby pi.GetCustomAttribute()?.Position, pi.Name + orderby pi.Property.GetCustomAttributeCached()?.Position, pi.Property.Name select pi, _ => throw new InvalidProgramException($"Type serializer mode can't be {StreamSerializerModes.Auto}") }; @@ -473,28 +473,28 @@ orderby pi.GetCustomAttribute()?.Position, pi.Name /// Type /// Object version /// Properties - public static IEnumerable GetReadProperties(Type type, int? version) + public static IEnumerable GetReadProperties(Type type, int? version) { - StreamSerializerAttribute? attr = type.GetCustomAttribute(); + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); StreamSerializerModes mode = attr?.Mode ?? StreamSerializerModes.OptOut; version = attr?.Version ?? 0; return mode switch { - StreamSerializerModes.OptIn => from pi in type.GetProperties(BindingFlags.Instance | BindingFlags.Public) - where (pi.GetMethod?.IsPublic ?? false) && - (pi.SetMethod?.IsPublic ?? false) && - pi.GetCustomAttribute() is StreamSerializerAttribute objAttr && + StreamSerializerModes.OptIn => from pi in type.GetPropertiesCached(BindingFlags.Instance | BindingFlags.Public) + where (pi.Property.GetMethod?.IsPublic ?? false) && + (pi.Property.SetMethod?.IsPublic ?? false) && + pi.Property.GetCustomAttributeCached() is StreamSerializerAttribute objAttr && objAttr.IsIncluded(mode, version.Value) - orderby pi.GetCustomAttribute()?.Position ?? 0, pi.Name + orderby pi.Property.GetCustomAttributeCached()?.Position ?? 0, pi.Property.Name select pi, - StreamSerializerModes.OptOut => from pi in type.GetProperties(BindingFlags.Instance | BindingFlags.Public) - where (pi.GetMethod?.IsPublic ?? false) && - (pi.SetMethod?.IsPublic ?? false) && + StreamSerializerModes.OptOut => from pi in type.GetPropertiesCached(BindingFlags.Instance | BindingFlags.Public) + where (pi.Property.GetMethod?.IsPublic ?? false) && + (pi.Property.SetMethod?.IsPublic ?? false) && ( - pi.GetCustomAttribute() is not StreamSerializerAttribute objAttr || + pi.Property.GetCustomAttributeCached() is not StreamSerializerAttribute objAttr || objAttr.IsIncluded(mode, version.Value) ) - orderby pi.GetCustomAttribute()?.Position ?? 0, pi.Name + orderby pi.Property.GetCustomAttributeCached()?.Position ?? 0, pi.Property.Name select pi, _ => throw new InvalidProgramException($"Type serializer mode can't be {StreamSerializerModes.Auto}") }; diff --git a/src/Stream-Serializer-Extensions/StreamSerializerBase.cs b/src/Stream-Serializer-Extensions/StreamSerializerBase.cs index 3d17705..ec74318 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerBase.cs @@ -1,5 +1,4 @@ -using System.Reflection; -using wan24.Core; +using wan24.Core; using wan24.ObjectValidation; namespace wan24.StreamSerializerExtensions @@ -31,7 +30,8 @@ public abstract class StreamSerializerBase : ValidatableObjectBase, IStreamSeria /// Constructor /// /// Object version - protected StreamSerializerBase(int? objectVersion = null) : base() => _ObjectVersion = objectVersion ?? GetType().GetCustomAttribute()?.Version; + protected StreamSerializerBase(int? objectVersion = null) : base() + => _ObjectVersion = objectVersion ?? GetType().GetCustomAttributeCached()?.Version; /// /// Constructor From d75fab91cb45befda3398640a99b86d0163624bc Mon Sep 17 00:00:00 2001 From: nd Date: Sat, 24 Jun 2023 12:28:47 +0200 Subject: [PATCH 02/17] Update * `Write(Fixed)Array*` methods won't redirect a `byte[]` to `WriteBytes*` anymore - use `WriteBytes*` directly instead + Added `SerializerException.From` + Added `(ReadOnly)Span` and `(ReadOnly)Memory` type overloads for (fixed) array writing/reading + Added `NO_INLINE` pre-compiler constant to disable aggressive method inlining + Changed the way allowed typed are determined to support any generic type and inherited types + Added `IDictionary`, `IList` and `Stream` to the list of allowed types - Bugfix: `WriteSerializerVersion*` uses the customizable `StreamSerializer.Version` now - Bugfix: `ReadSerializerVersion` allows using a customized serializer version now (only the birst 8 bits are used for the serializer version, all other bits can be used for customizing) --- ...alizerInfo.AsyncDeserializer_Delegate.html | 4 +- ...rializerInfo.AsyncSerializer_Delegate.html | 4 +- ...mSerializerInfo.Deserializer_Delegate.html | 2 +- ...eamSerializerInfo.Serializer_Delegate.html | 2 +- ...erExtensions.AutoStreamSerializerInfo.html | 38 +- ...erExtensions.DefaultSerializerOptions.html | 14 +- ...rializerExtensions.ISerializerOptions.html | 4 +- ...ializerExtensions.SerializerException.html | 73 +- ...SerializerExtensions.SerializerHelper.html | 68 +- ...lizerExtensions.SerializerOptionsBase.html | 28 +- ...SerializerExtensions.StreamExtensions.html | 5192 +++++++++++------ ...SerializerExtensions.StreamSerializer.html | 2 +- ...rExtensions.StreamSerializerAttribute.html | 276 +- docs/manifest.json | 26 +- docs/xrefmap.yml | 561 +- src/Stream-Serializer-Extensions Docs/log.txt | 4 +- src/Stream-Serializer-Extensions.sln | 2 - .../AutoStreamSerializerInfo.cs | 7 +- .../DefaultSerializerOptions.cs | 4 +- .../ISerializerOptions.cs | 4 +- .../SerializerException.cs | 33 +- .../SerializerHelper.cs | 48 +- .../SerializerOptionsBase.cs | 7 +- .../Stream-Serializer-Extensions.csproj | 6 +- .../StreamExtensions.Enumerate.cs | 20 + .../StreamExtensions.Read.Any.cs | 107 +- .../StreamExtensions.Read.Array.cs | 350 +- .../StreamExtensions.Read.Basic.cs | 226 +- .../StreamExtensions.Read.Bytes.cs | 143 +- .../StreamExtensions.Read.Dictionary.cs | 239 +- .../StreamExtensions.Read.Enum.cs | 109 +- .../StreamExtensions.Read.List.cs | 223 +- .../StreamExtensions.Read.Number.cs | 19 + .../StreamExtensions.Read.Object.cs | 373 +- .../StreamExtensions.Read.Serialized.cs | 15 +- .../StreamExtensions.Read.Stream.cs | 65 +- .../StreamExtensions.Read.String.cs | 291 +- .../StreamExtensions.Read.Struct.cs | 19 +- .../StreamExtensions.Read.cs | 61 +- .../StreamExtensions.Write.Any.cs | 123 +- .../StreamExtensions.Write.Array.cs | 95 +- .../StreamExtensions.Write.Basic.cs | 103 +- .../StreamExtensions.Write.Bytes.cs | 30 +- .../StreamExtensions.Write.Dictionary.cs | 73 +- .../StreamExtensions.Write.Enum.cs | 89 +- .../StreamExtensions.Write.List.cs | 57 +- .../StreamExtensions.Write.Number.cs | 21 +- .../StreamExtensions.Write.Object.cs | 155 +- .../StreamExtensions.Write.Serialized.cs | 137 +- .../StreamExtensions.Write.Stream.cs | 7 + .../StreamExtensions.Write.String.cs | 140 +- .../StreamExtensions.Write.Struct.cs | 123 +- .../StreamExtensions.Write.cs | 111 +- .../StreamSerializer.cs | 54 +- .../StreamSerializerAttribute.cs | 14 +- 55 files changed, 6705 insertions(+), 3296 deletions(-) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html index eb065e0..51118d9 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html @@ -123,7 +123,7 @@
Parameters
- System.Threading.CancellationToken + CancellationToken cancellationToken

Cancellation token

@@ -170,7 +170,7 @@

Extension Methods

Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html index 7bf9488..de35c3d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html @@ -123,7 +123,7 @@
    Parameters
    - System.Threading.CancellationToken + CancellationToken cancellationToken

    Cancellation token

    @@ -169,7 +169,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html index 0215ef7..3652d30 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html @@ -164,7 +164,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html index 7983c39..263de63 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html @@ -148,7 +148,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html index d86454f..50155f4 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html @@ -118,7 +118,7 @@

    Constructors Improve this Doc - View Source + View Source

    AutoStreamSerializerInfo(PropertyInfoExt)

    @@ -154,7 +154,7 @@

    Properties Improve this Doc - View Source + View Source

    AsyncDeserializer

    @@ -185,7 +185,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    AsyncSerializer

    @@ -216,7 +216,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Attribute

    @@ -247,7 +247,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Deserializer

    @@ -278,7 +278,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    IsNullable

    @@ -309,7 +309,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Property

    @@ -340,7 +340,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Serializer

    @@ -373,7 +373,7 @@

    Methods Improve this Doc - View Source + View Source

    Deserialize<T>(IAutoStreamSerializerConfig, T, Stream, Int32)

    @@ -439,13 +439,13 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DeserializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken)

    +

    DeserializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken)

    Deserialize

    @@ -489,7 +489,7 @@
    Parameters
    - System.Threading.CancellationToken + CancellationToken cancellationToken

    Cancellation token

    @@ -532,7 +532,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    Serialize<T>(IAutoStreamSerializerConfig, T, Stream)

    @@ -592,13 +592,13 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    SerializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, CancellationToken)

    +

    SerializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, CancellationToken)

    Serialize

    @@ -636,7 +636,7 @@
    Parameters
    - System.Threading.CancellationToken + CancellationToken cancellationToken

    Cancellation token

    @@ -698,7 +698,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html index 3dda6f7..0392d53 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html @@ -138,19 +138,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DefaultSerializerOptions(PropertyInfo, StreamSerializerAttribute)

    +

    DefaultSerializerOptions(Nullable<PropertyInfoExt>, StreamSerializerAttribute)

    Constructor

    Declaration
    -
    public DefaultSerializerOptions(PropertyInfo property, StreamSerializerAttribute attr = null)
    +
    public DefaultSerializerOptions(PropertyInfoExt? property, StreamSerializerAttribute attr = null)
    Parameters
    @@ -163,7 +163,7 @@
    Parameters
    - + @@ -201,10 +201,10 @@

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html index 8287e79..f94eb3b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html @@ -129,7 +129,7 @@

    Declaration
    -
    PropertyInfo Property { get; }
    +
    PropertyInfoExt? Property { get; }
    Property Value
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt> property

    Target property

    @@ -141,7 +141,7 @@
    Property Value
    - + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html index 089a024..13e7971 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html @@ -94,7 +94,7 @@

    Constructors Improve this Doc - View Source + View Source

    SerializerException()

    @@ -110,7 +110,7 @@
    Declaration
    Improve this Doc - View Source + View Source

    SerializerException(String)

    @@ -144,7 +144,7 @@
    Parameters
    Improve this Doc - View Source + View Source

    SerializerException(String, Exception)

    @@ -181,12 +181,69 @@
    Parameters
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt>

    Methods

    + + | + Improve this Doc + + + View Source + + +

    From(Exception, String)

    +

    Create a SerializerException from an

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static SerializerException From(Exception ex, string message = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Exceptionex

    +
    System.Stringmessage

    Individual message

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    SerializerException

    SerializerException (may be the ex, if it's a SerializerException already!)

    +
    | Improve this Doc - View Source + View Source

    Wrap(Action, String)

    @@ -227,7 +284,7 @@
    Parameters
    Improve this Doc - View Source + View Source

    Wrap<T>(Func<T>, String)

    @@ -299,7 +356,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WrapAsync(Func<Task>, String)

    @@ -355,7 +412,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WrapAsync<T>(Func<Task<T>>, String)

    @@ -446,7 +503,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html index 15f18f2..73b7ff6 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -118,7 +118,7 @@

    Methods Improve this Doc - View Source + View Source

    EnsureNotNull(Object)

    @@ -169,7 +169,7 @@
    Returns
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int32, Int32, Int32)

    @@ -232,7 +232,7 @@
    Returns
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int64, Int64, Int64)

    @@ -292,20 +292,20 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetKeySerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

    +

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get the key serializer options

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static ISerializerOptions GetKeySerializerOptions(this PropertyInfo pi, Stream stream, int version, CancellationToken cancellationToken)
    +public static ISerializerOptions GetKeySerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken)
    Parameters
    @@ -318,7 +318,7 @@
    Parameters
    - + @@ -364,7 +364,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetNumberAndType(Object)

    @@ -414,7 +414,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetNumberType(Object, Boolean)

    @@ -470,7 +470,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetObjectSerializerInfo(Object)

    @@ -517,20 +517,20 @@
    Returns
    System.Reflection.PropertyInfoPropertyInfoExt pi

    Property

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

    +

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get the serializer options

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static ISerializerOptions GetSerializerOptions(this PropertyInfo pi, Stream stream, int version, CancellationToken cancellationToken)
    +public static ISerializerOptions GetSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken)
    Parameters
    @@ -543,7 +543,7 @@
    Parameters
    - + @@ -586,20 +586,20 @@
    Returns
    System.Reflection.PropertyInfoPropertyInfoExt pi

    Property

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetValueSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

    +

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get the value serializer options

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static ISerializerOptions GetValueSerializerOptions(this PropertyInfo pi, Stream stream, int version, CancellationToken cancellationToken)
    +public static ISerializerOptions GetValueSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken)
    Parameters
    @@ -612,7 +612,7 @@
    Parameters
    - + @@ -658,7 +658,7 @@
    Returns
    Improve this Doc - View Source + View Source

    HasValueFlags(NumberTypes)

    @@ -709,7 +709,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsEmpty(ObjectTypes)

    @@ -760,7 +760,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsMaxValue(NumberTypes)

    @@ -811,7 +811,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsMinValue(NumberTypes)

    @@ -862,7 +862,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsNumber(ObjectTypes)

    @@ -913,7 +913,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsUnsigned(NumberTypes)

    @@ -964,7 +964,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsUnsigned(ObjectTypes)

    @@ -1015,7 +1015,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsZero(NumberTypes)

    @@ -1117,7 +1117,7 @@
    Returns
    Improve this Doc - View Source + View Source

    RemoveFlags(ObjectTypes)

    @@ -1168,7 +1168,7 @@
    Returns
    Improve this Doc - View Source + View Source

    RemoveValueFlags(NumberTypes)

    @@ -1219,7 +1219,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToBytes(IStreamSerializer, Boolean)

    @@ -1276,7 +1276,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToObject<T>(Byte[], Boolean)

    @@ -1350,7 +1350,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ValidateDeserializedObject<T>(T)

    diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html index 3a53ff4..7c35acf 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html @@ -120,19 +120,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    SerializerOptionsBase(PropertyInfo, StreamSerializerAttribute)

    +

    SerializerOptionsBase(Nullable<PropertyInfoExt>, StreamSerializerAttribute)

    Constructor

    Declaration
    -
    protected SerializerOptionsBase(PropertyInfo property, StreamSerializerAttribute attr = null)
    +
    protected SerializerOptionsBase(PropertyInfoExt? property, StreamSerializerAttribute attr = null)
    Parameters
    System.Reflection.PropertyInfoPropertyInfoExt pi

    Property

    @@ -145,7 +145,7 @@
    Parameters
    - + @@ -165,7 +165,7 @@

    Properties Improve this Doc - View Source + View Source

    Attribute

    @@ -196,7 +196,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Property

    @@ -205,7 +205,7 @@

    Declaration
    -
    public PropertyInfo Property { get; }
    +
    public PropertyInfoExt? Property { get; }
    Property Value
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt> property

    Target property

    @@ -217,7 +217,7 @@
    Property Value
    - + @@ -229,7 +229,7 @@

    Methods Improve this Doc - View Source + View Source

    GetMaxLen(Int32)

    @@ -279,7 +279,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetMaxLen(Int64)

    @@ -329,7 +329,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetMinLen(Int32)

    @@ -379,7 +379,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetMinLen(Int64)

    @@ -452,7 +452,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index 701018f..d700d91 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -118,7 +118,7 @@

    Fields Improve this Doc - View Source + View Source

    ArrayEmptyMethod

    Array empty method

    @@ -148,7 +148,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    ReadStructAsyncMethod

    Read struct method

    @@ -178,7 +178,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    ReadStructMethod

    Read struct method

    @@ -210,7 +210,7 @@

    Properties Improve this Doc - View Source + View Source

    AnyObjectAttributeRequired

    @@ -243,7 +243,7 @@

    Methods Improve this Doc - View Source + View Source

    ConvertStructureEndianess(Type, Memory<Byte>, StreamSerializerAttribute)

    @@ -368,7 +368,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnumerateAsync<tObject, tEnumerator>(Stream, Nullable<Int32>, CancellationToken)

    @@ -452,7 +452,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnumerateNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -531,7 +531,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnumerateNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -616,7 +616,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnumerateSerialized<T>(Stream, Nullable<Int32>)

    @@ -690,7 +690,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnumerateSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -769,7 +769,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnumerateString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -843,7 +843,7 @@
    Returns
    Improve this Doc - View Source + View Source

    EnumerateStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -923,7 +923,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAny(Stream, Nullable<Int32>, ISerializerOptions)

    @@ -932,7 +932,8 @@

    Declaration
    -
    public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions options = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions options = null)
    Parameters
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt>
    @@ -985,7 +986,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -994,7 +995,8 @@

    Declaration
    -
    public static Task<object> ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<object> ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -1053,7 +1055,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyNullable(Stream, Nullable<Int32>, ISerializerOptions)

    @@ -1062,7 +1064,8 @@

    Declaration
    -
    public static object ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions options = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static object ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions options = null)
    Parameters
    @@ -1115,7 +1118,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyNullableAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -1124,7 +1127,8 @@

    Declaration
    -
    public static Task<object> ReadAnyNullableAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<object> ReadAnyNullableAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -1183,7 +1187,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObject(Stream, Type, Nullable<Int32>)

    @@ -1245,7 +1249,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObject<T>(Stream, Nullable<Int32>)

    @@ -1318,7 +1322,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadAnyObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    @@ -1327,7 +1331,7 @@

    Declaration
    -
    public static Task<object> ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
    +
    public static async Task<object> ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -1386,7 +1390,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObjectAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -1395,7 +1399,7 @@

    Declaration
    -
    public static Task<T> ReadAnyObjectAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +    
    public static async Task<T> ReadAnyObjectAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
         where T : class, new()
    Parameters
    @@ -1465,7 +1469,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullable(Stream, Type, Nullable<Int32>)

    @@ -1528,7 +1532,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullable<T>(Stream, Nullable<Int32>)

    @@ -1602,7 +1606,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullableAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    @@ -1671,7 +1675,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -1751,7 +1755,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadArray(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    @@ -1760,7 +1764,8 @@

    Declaration
    -
    public static Array ReadArray(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Array ReadArray(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    Parameters
    @@ -1811,7 +1816,7 @@
    Parameters
    - @@ -1837,7 +1842,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadArray<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    @@ -1846,7 +1851,8 @@

    Declaration
    -
    public static T[] ReadArray<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static T[] ReadArray<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    Parameters
    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    @@ -1891,7 +1897,7 @@
    Parameters
    - @@ -1933,7 +1939,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadArrayAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -1942,7 +1948,8 @@

    Declaration
    -
    public static Task<Array> ReadArrayAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Array> ReadArrayAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    @@ -1993,7 +2000,7 @@
    Parameters
    - @@ -2025,7 +2032,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadArrayAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -2034,7 +2041,8 @@

    Declaration
    -
    public static Task<T[]> ReadArrayAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<T[]> ReadArrayAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    @@ -2079,7 +2087,7 @@
    Parameters
    - @@ -2127,7 +2135,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadArrayNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    @@ -2188,7 +2196,7 @@
    Parameters
    - @@ -2214,7 +2222,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadArrayNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    @@ -2269,7 +2277,7 @@
    Parameters
    - @@ -2311,7 +2319,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadArrayNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -2372,7 +2380,7 @@
    Parameters
    - @@ -2404,7 +2412,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadArrayNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -2459,7 +2467,7 @@
    Parameters
    - @@ -2507,7 +2515,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadBool(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -2516,8 +2524,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool ReadBool(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static bool ReadBool(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    @@ -2570,7 +2577,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBoolAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -2579,8 +2586,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<bool> ReadBoolAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<bool> ReadBoolAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -2639,7 +2645,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBoolNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -2702,7 +2708,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBoolNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -2851,7 +2857,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBytesAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -2937,7 +2943,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBytesNullable(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

    @@ -3018,7 +3024,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBytesNullableAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -3105,7 +3111,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimal(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -3114,8 +3120,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -3168,7 +3173,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimalAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -3177,8 +3182,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<decimal> ReadDecimalAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<decimal> ReadDecimalAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -3237,7 +3241,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimalNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -3246,8 +3250,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -3300,7 +3303,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimalNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -3309,8 +3312,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<decimal?> ReadDecimalNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<decimal?> ReadDecimalNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -3369,7 +3371,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDict(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    @@ -3378,7 +3380,8 @@

    Declaration
    -
    public static IDictionary ReadDict(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static IDictionary ReadDict(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    Parameters
    @@ -3461,7 +3464,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDict<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    @@ -3470,7 +3473,8 @@

    Declaration
    -
    public static Dictionary<tKey, tValue> ReadDict<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Dictionary<tKey, tValue> ReadDict<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    Parameters
    @@ -3568,7 +3572,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadDictAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    @@ -3577,7 +3581,8 @@

    Declaration
    -
    public static Task<IDictionary> ReadDictAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<IDictionary> ReadDictAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -3666,7 +3671,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDictAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    @@ -3675,7 +3680,8 @@

    Declaration
    -
    public static Task<Dictionary<tKey, tValue>> ReadDictAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Dictionary<tKey, tValue>> ReadDictAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -3779,7 +3785,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadDictNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    @@ -3872,7 +3878,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDictNullable<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    @@ -3980,7 +3986,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadDictNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    @@ -4079,7 +4085,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDictNullableAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    @@ -4193,7 +4199,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadDouble(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4202,8 +4208,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static double ReadDouble(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static double ReadDouble(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -4256,7 +4261,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDoubleAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4265,8 +4270,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<double> ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<double> ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -4325,7 +4329,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDoubleNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4334,8 +4338,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -4388,7 +4391,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDoubleNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4397,8 +4400,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<double?> ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<double?> ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -4457,7 +4459,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnum(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4525,7 +4527,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnum<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4604,7 +4606,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadEnumAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4678,7 +4680,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnumAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4763,7 +4765,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadEnumNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4832,7 +4834,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnumNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4912,7 +4914,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadEnumNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4922,7 +4924,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Enum?> ReadEnumNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<Enum?> ReadEnumNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -4987,7 +4989,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnumNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4997,7 +4999,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<T?> ReadEnumNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<T?> ReadEnumNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
         where T : struct, Enum
    Parameters
    @@ -5070,19 +5072,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFixedArray<T>(Stream, T[], Nullable<Int32>, ISerializerOptions)

    +

    ReadFixedArray(Stream, Array, Nullable<Int32>, ISerializerOptions)

    Read

    Declaration
    -
    public static T[] ReadFixedArray<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Array ReadFixedArray(this Stream stream, Array arr, int? version = null, ISerializerOptions valueOptions = null)
    Parameters
    @@ -5101,7 +5104,7 @@
    Parameters
    - + @@ -5115,7 +5118,7 @@
    Parameters
    - @@ -5130,43 +5133,28 @@
    Returns
    - + - - -
    T[]Array arr

    Array

    ISerializerOptions valueOptions

    Value serializer options

    +

    Value deserializer options

    T[]Array

    Value

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadFixedArrayAsync<T>(Stream, T[], Nullable<Int32>, ISerializerOptions, CancellationToken)

    + +

    ReadFixedArray<T>(Stream, T[], Nullable<Int32>, ISerializerOptions)

    Read

    Declaration
    -
    public static Task<T[]> ReadFixedArrayAsync<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static T[] ReadFixedArray<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null)
    Parameters
    @@ -5199,13 +5187,7 @@
    Parameters
    - - - - - - @@ -5220,7 +5202,7 @@
    Returns
    - + @@ -5244,20 +5226,20 @@
    Type Parameters
    ISerializerOptions valueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    +

    Value deserializer options

    Task<T[]>T[]

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadFloat(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadFixedArray<T>(Stream, Span<T>, Nullable<Int32>, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static float ReadFloat(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +public static Span<T> ReadFixedArray<T>(this Stream stream, Span<T> arr, int? version = null, ISerializerOptions valueOptions = null)
    Parameters
    @@ -5273,6 +5255,12 @@
    Parameters
    + + + + + @@ -5282,9 +5270,9 @@
    Parameters
    - - - + + @@ -5299,28 +5287,44 @@
    Returns
    - + + + +
    Stream stream

    Stream

    +
    Span<T>arr

    Array

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializerOptionsvalueOptions

    Value deserializer options

    System.SingleSpan<T>

    Value

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadFloatAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadFixedArrayAsync(Stream, Array, Nullable<Int32>, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<float> ReadFloatAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<Array> ReadFixedArrayAsync(this Stream stream, Array arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -5336,6 +5340,12 @@
    Parameters
    + + + + + @@ -5345,9 +5355,9 @@
    Parameters
    - - - + + @@ -5368,7 +5378,7 @@
    Returns
    - + @@ -5376,20 +5386,20 @@
    Returns
    Stream stream

    Stream

    +
    Arrayarr

    Array

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializerOptionsvalueOptions

    Value deserializer options

    Task<System.Single>Task<Array>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadFloatNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadFixedArrayAsync<T>(Stream, T[], Nullable<Int32>, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +public static async Task<T[]> ReadFixedArrayAsync<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -5405,6 +5415,12 @@
    Parameters
    + + + + + @@ -5414,9 +5430,15 @@
    Parameters
    - - - + + + + + + + @@ -5431,28 +5453,44 @@
    Returns
    - + + + +
    Stream stream

    Stream

    +
    T[]arr

    Array

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializerOptionsvalueOptions

    Value deserializer options

    +
    CancellationTokencancellationToken

    Cancellation token

    System.Nullable<System.Single>Task<T[]>

    Value

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadFloatNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadFixedArrayAsync<T>(Stream, Memory<T>, Nullable<Int32>, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<float?> ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<Memory<T>> ReadFixedArrayAsync<T>(this Stream stream, Memory<T> arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -5468,6 +5506,12 @@
    Parameters
    + + + + + @@ -5477,9 +5521,9 @@
    Parameters
    - - - + + @@ -5500,28 +5544,43 @@
    Returns
    - + + + +
    Stream stream

    Stream

    +
    Memory<T>arr

    Array

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializerOptionsvalueOptions

    Value deserializer options

    Task<System.Nullable<System.Single>>Task<Memory<T>>

    Value

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadFloat(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static int ReadInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static float ReadFloat(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -5563,7 +5622,7 @@
    Returns
    - + @@ -5571,20 +5630,19 @@
    Returns
    System.Int32System.Single

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadFloatAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<int> ReadIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<float> ReadFloatAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -5632,7 +5690,7 @@
    Returns
    - + @@ -5640,20 +5698,19 @@
    Returns
    Task<System.Int32>Task<System.Single>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadFloatNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -5695,7 +5752,7 @@
    Returns
    - + @@ -5703,20 +5760,19 @@
    Returns
    System.Nullable<System.Int32>System.Nullable<System.Single>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadFloatNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<int?> ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<float?> ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -5764,7 +5820,7 @@
    Returns
    - + @@ -5772,19 +5828,19 @@
    Returns
    Task<System.Nullable<System.Int32>>Task<System.Nullable<System.Single>>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadList(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    + +

    ReadInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    public static IList ReadList(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +
    public static int ReadInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -5800,12 +5856,6 @@
    Parameters
    - - - - - @@ -5820,37 +5870,19 @@
    Parameters
    + +
    Stream stream

    Stream

    -
    Typetype

    List type

    Array pool

    +
    Returns
    + + - - - + + + + - - - - - - - - - -
    System.Int32minLen

    Minimum length

    -
    TypeDescription
    System.Int32maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    -
    Returns
    - - - - - - - - - - @@ -5858,19 +5890,19 @@
    Returns
    TypeDescription
    System.Collections.IList

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadList<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    + +

    ReadIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    public static List<T> ReadList<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +
    public static Task<int> ReadIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -5901,21 +5933,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -5930,43 +5950,27 @@
    Returns
    - + - - -
    System.Int32minLen

    Minimum length

    -
    System.Int32maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    +
    CancellationTokencancellationToken

    Cancellation token

    List<T>Task<System.Int32>

    Value

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadListAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    + +

    ReadIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    public static Task<IList> ReadListAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -5982,12 +5986,6 @@
    Parameters
    - - - - - @@ -6000,30 +5998,6 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - @@ -6038,7 +6012,7 @@
    Returns
    - + @@ -6046,19 +6020,19 @@
    Returns
    Stream stream

    Stream

    -
    Typetype

    List type

    System.Buffers.ArrayPool<System.Byte> pool

    Array pool

    -
    System.Int32minLen

    Minimum length

    -
    System.Int32maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    Task<System.Collections.IList>System.Nullable<System.Int32>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadListAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    + +

    ReadIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    public static Task<List<T>> ReadListAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    public static Task<int?> ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -6086,24 +6060,6 @@
    Parameters
    - - - - - - - - - - - - - - - @@ -6124,44 +6080,28 @@
    Returns
    - + - - -
    System.Buffers.ArrayPool<System.Byte> pool

    Array pool

    -
    System.Int32minLen

    Minimum length

    -
    System.Int32maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    Task<List<T>>Task<System.Nullable<System.Int32>>

    Value

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadListNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    + +

    ReadList(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static IList ReadListNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static IList ReadList(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    Parameters
    @@ -6235,20 +6175,20 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadListNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    + +

    ReadList<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static List<T>? ReadListNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static List<T> ReadList<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    Parameters
    @@ -6308,7 +6248,7 @@
    Returns
    - + @@ -6332,20 +6272,20 @@
    Type Parameters
    System.Nullable<List<T>>List<T>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadListNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    + +

    ReadListAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<IList> ReadListNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<IList> ReadListAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -6425,20 +6365,20 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadListNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    + +

    ReadListAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<List<T>?> ReadListNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<List<T>> ReadListAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -6504,7 +6444,7 @@
    Returns
    - + @@ -6528,20 +6468,20 @@
    Type Parameters
    Task<System.Nullable<List<T>>>Task<List<T>>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadLong(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadListNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static long ReadLong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +public static IList ReadListNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    Parameters
    @@ -6557,6 +6497,12 @@
    Parameters
    + + + + + @@ -6569,6 +6515,24 @@
    Parameters
    + + + + + + + + + + + + + + + @@ -6583,7 +6547,7 @@
    Returns
    - + @@ -6591,20 +6555,20 @@
    Returns
    Stream stream

    Stream

    +
    Typetype

    List type

    System.Buffers.ArrayPool<System.Byte> pool

    Array pool

    +
    System.Int32minLen

    Minimum length

    +
    System.Int32maxLen

    Maximum length

    +
    ISerializerOptionsvalueOptions

    Value serializer options

    System.Int64System.Collections.IList

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadLongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadListNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<long> ReadLongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static List<T>? ReadListNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    Parameters
    @@ -6635,9 +6599,21 @@
    Parameters
    - - - + + + + + + + + + + + + @@ -6652,43 +6628,65 @@
    Returns
    - +
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Int32minLen

    Minimum length

    +
    System.Int32maxLen

    Maximum length

    +
    ISerializerOptionsvalueOptions

    Value serializer options

    Task<System.Int64>System.Nullable<List<T>>

    Value

    - - | - Improve this Doc - - - View Source - - -

    ReadLongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Read

    -
    -
    -
    Declaration
    -
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    -
    -
    Parameters
    +
    Type Parameters
    - - - + + + + +
    Type Name Description
    StreamstreamT

    Element type

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadListNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<IList> ReadListNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + @@ -6701,6 +6699,30 @@
    Parameters
    + + + + + + + + + + + + + + + + + + + + @@ -6715,7 +6737,7 @@
    Returns
    - + @@ -6723,20 +6745,20 @@
    Returns
    TypeNameDescription
    Streamstream

    Stream

    +
    Typetype

    List type

    System.Buffers.ArrayPool<System.Byte> pool

    Array pool

    +
    System.Int32minLen

    Minimum length

    +
    System.Int32maxLen

    Maximum length

    +
    ISerializerOptionsvalueOptions

    Value serializer options

    +
    CancellationTokencancellationToken

    Cancellation token

    System.Nullable<System.Int64>Task<System.Collections.IList>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadLongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadListNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<long?> ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<List<T>?> ReadListNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -6764,6 +6786,24 @@
    Parameters
    + + + + + + + + + + + + + + + @@ -6784,27 +6824,43 @@
    Returns
    - + + + +
    System.Buffers.ArrayPool<System.Byte> pool

    Array pool

    +
    System.Int32minLen

    Minimum length

    +
    System.Int32maxLen

    Maximum length

    +
    ISerializerOptionsvalueOptions

    Value serializer options

    Task<System.Nullable<System.Int64>>Task<System.Nullable<List<T>>>

    Value

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumber(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadLong(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    public static object ReadNumber(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    +
    public static long ReadLong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -6820,12 +6876,6 @@
    Parameters
    - - - - - @@ -6852,7 +6902,7 @@
    Returns
    - + @@ -6860,20 +6910,19 @@
    Returns
    Stream stream

    Stream

    -
    Typetype

    Number type

    System.ObjectSystem.Int64

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadLongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    public static T ReadNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    -    where T : struct, IConvertible
    +
    public static Task<long> ReadLongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -6901,6 +6950,12 @@
    Parameters
    + + + + + @@ -6915,42 +6970,27 @@
    Returns
    - +
    System.Buffers.ArrayPool<System.Byte> pool

    Array pool

    +
    CancellationTokencancellationToken

    Cancellation token

    TTask<System.Int64>

    Value

    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumberAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadLongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    public static Task<object> ReadNumberAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -6966,12 +7006,6 @@
    Parameters
    - - - - - @@ -6984,12 +7018,6 @@
    Parameters
    - - - - - @@ -7004,7 +7032,7 @@
    Returns
    - + @@ -7012,20 +7040,19 @@
    Returns
    Stream stream

    Stream

    -
    Typetype

    Number type

    System.Buffers.ArrayPool<System.Byte> pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    Task<System.Object>System.Nullable<System.Int64>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadLongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    public static async Task<T> ReadNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    -    where T : struct, IConvertible
    +
    public static Task<long?> ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -7073,43 +7100,27 @@
    Returns
    - +
    Task<T>Task<System.Nullable<System.Int64>>

    Value

    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumberNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadNumber(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    +
    public static object ReadNumber(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -7165,20 +7176,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumberNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static T? ReadNumberNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +    
    public static T ReadNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
         where T : struct, IConvertible
    Parameters
    @@ -7221,7 +7231,7 @@
    Returns
    - System.Nullable<T> + T

    Value

    @@ -7244,20 +7254,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumberNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadNumberAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<object> ReadNumberNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<object> ReadNumberAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -7319,20 +7328,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadNumberNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<T?> ReadNumberNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +    
    public static async Task<T> ReadNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
         where T : struct, IConvertible
    Parameters
    @@ -7381,7 +7389,7 @@
    Returns
    - Task<System.Nullable<T>> + Task<T>

    Value

    @@ -7398,27 +7406,26 @@
    Type Parameters
    T -

    Number type

    - + | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObject(Stream, Type, Nullable<Int32>, ISerializerOptions)

    + +

    ReadNumberNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadObject(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
    +public static object ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -7439,7 +7446,7 @@
    Parameters
    - @@ -7449,9 +7456,9 @@
    Parameters
    - - - + + @@ -7474,20 +7481,21 @@
    Returns
    Type type

    Type

    +

    Number type

    ISerializerOptionsoptions

    Options

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObject<T>(Stream, Nullable<Int32>, ISerializerOptions)

    + +

    ReadNumberNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T ReadObject<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
    +public static T? ReadNumberNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null) + where T : struct, IConvertible
    Parameters
    @@ -7512,9 +7520,9 @@
    Parameters
    - - - + + @@ -7529,7 +7537,7 @@
    Returns
    - + @@ -7546,27 +7554,26 @@
    Type Parameters
    - +
    ISerializerOptionsoptions

    Options

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    TSystem.Nullable<T>

    Value

    T

    Object type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObjectAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    + +

    ReadNumberNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<object> ReadObjectAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static Task<object> ReadNumberNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -7587,7 +7594,7 @@
    Parameters
    - @@ -7597,9 +7604,9 @@
    Parameters
    - - - + + @@ -7628,20 +7635,21 @@
    Returns
    Type type

    Type

    +

    Number type

    ISerializerOptionsoptions

    Options

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObjectAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    + +

    ReadNumberNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<T> ReadObjectAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static Task<T?> ReadNumberNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null) + where T : struct, IConvertible
    Parameters
    @@ -7666,9 +7674,9 @@
    Parameters
    - - - + + @@ -7689,7 +7697,7 @@
    Returns
    - + @@ -7706,27 +7714,27 @@
    Type Parameters
    -
    ISerializerOptionsoptions

    Options

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    Task<T>Task<System.Nullable<T>>

    Value

    T

    Object type

    +

    Number type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObjectNullable(Stream, Type, Nullable<Int32>, ISerializerOptions)

    + +

    ReadObject(Stream, Type, Nullable<Int32>, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadObjectNullable(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
    +public static object ReadObject(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
    Parameters
    @@ -7747,7 +7755,7 @@
    Parameters
    - @@ -7782,20 +7790,20 @@
    Returns
    Type type

    Object type

    +

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObjectNullable<T>(Stream, Nullable<Int32>, ISerializerOptions)

    + +

    ReadObject<T>(Stream, Nullable<Int32>, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T ReadObjectNullable<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
    +public static T ReadObject<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
    Parameters
    @@ -7861,20 +7869,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObjectNullableAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    + +

    ReadObjectAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<object> ReadObjectNullableAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static Task<object> ReadObjectAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -7895,7 +7903,7 @@
    Parameters
    - @@ -7936,20 +7944,20 @@
    Returns
    Type type

    Object type

    +

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadObjectNullableAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    + +

    ReadObjectAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T> ReadObjectNullableAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static Task<T> ReadObjectAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -8021,20 +8029,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneByte(Stream, Nullable<Int32>)

    + +

    ReadObjectNullable(Stream, Type, Nullable<Int32>, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static byte ReadOneByte(this Stream stream, int? version = null)
    +public static object ReadObjectNullable(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
    Parameters
    @@ -8050,12 +8058,24 @@
    Parameters
    + + + + + + + + + + @@ -8070,7 +8090,7 @@
    Returns
    - + @@ -8078,20 +8098,20 @@
    Returns
    Stream stream

    Stream

    +
    Typetype

    Object type

    System.Nullable<System.Int32> version

    Serializer version

    +
    ISerializerOptionsoptions

    Options

    System.ByteSystem.Object

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneByteAsync(Stream, Nullable<Int32>, CancellationToken)

    + +

    ReadObjectNullable<T>(Stream, Nullable<Int32>, ISerializerOptions)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<byte> ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +public static T ReadObjectNullable<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
    Parameters
    @@ -8116,9 +8136,9 @@
    Parameters
    - - - + + @@ -8133,28 +8153,44 @@
    Returns
    - + + + +
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializerOptionsoptions

    Options

    Task<System.Byte>T

    Value

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneByteNullable(Stream, Nullable<Int32>)

    + +

    ReadObjectNullableAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static ushort? ReadOneByteNullable(this Stream stream, int? version = null)
    +public static async Task<object> ReadObjectNullableAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -8170,12 +8206,30 @@
    Parameters
    + + + + + + + + + + + + + + + @@ -8190,7 +8244,7 @@
    Returns
    - + @@ -8198,20 +8252,20 @@
    Returns
    Stream stream

    Stream

    +
    Typetype

    Object type

    System.Nullable<System.Int32> version

    Serializer version

    +
    ISerializerOptionsoptions

    Options

    +
    CancellationTokencancellationToken

    Cancellation token

    System.Nullable<System.UInt16>Task<System.Object>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    + +

    ReadObjectNullableAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<byte?> ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +public static async Task<T> ReadObjectNullableAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -8233,6 +8287,12 @@
    Parameters
    + + + + + @@ -8253,28 +8313,44 @@
    Returns
    - + + + +
    System.Nullable<System.Int32> version

    Serializer version

    +
    ISerializerOptionsoptions

    Options

    Task<System.Nullable<System.Byte>>Task<T>

    Value

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneSByte(Stream, Nullable<Int32>)

    + +

    ReadOneByte(Stream, Nullable<Int32>)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static sbyte ReadOneSByte(this Stream stream, int? version = null)
    +public static byte ReadOneByte(this Stream stream, int? version = null)
    Parameters
    @@ -8310,7 +8386,7 @@
    Returns
    - + @@ -8318,20 +8394,20 @@
    Returns
    System.SByteSystem.Byte

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneSByteAsync(Stream, Nullable<Int32>, CancellationToken)

    + +

    ReadOneByteAsync(Stream, Nullable<Int32>, CancellationToken)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<sbyte> ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +public static Task<byte> ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -8373,7 +8449,7 @@
    Returns
    - + @@ -8381,20 +8457,19 @@
    Returns
    Task<System.SByte>Task<System.Byte>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneSByteNullable(Stream, Nullable<Int32>)

    + +

    ReadOneByteNullable(Stream, Nullable<Int32>)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null)
    +
    public static ushort? ReadOneByteNullable(this Stream stream, int? version = null)
    Parameters
    @@ -8430,7 +8505,7 @@
    Returns
    - + @@ -8438,20 +8513,19 @@
    Returns
    System.Nullable<System.SByte>System.Nullable<System.UInt16>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadOneSByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    + +

    ReadOneByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<sbyte?> ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    public static Task<byte?> ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -8493,7 +8567,7 @@
    Returns
    - + @@ -8501,21 +8575,259 @@
    Returns
    Task<System.Nullable<System.SByte>>Task<System.Nullable<System.Byte>>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerialized<T>(Stream, Nullable<Int32>)

    + +

    ReadOneSByte(Stream, Nullable<Int32>)

    Read

    Declaration
    -
    public static T ReadSerialized<T>(this Stream stream, int? version = null)
    -    where T : class, IStreamSerializer
    -
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static sbyte ReadOneSByte(this Stream stream, int? version = null)
    + +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.SByte

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadOneSByteAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<sbyte> ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.SByte>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadOneSByteNullable(Stream, Nullable<Int32>)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Nullable<System.SByte>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadOneSByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<sbyte?> ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.Nullable<System.SByte>>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadSerialized<T>(Stream, Nullable<Int32>)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static T ReadSerialized<T>(this Stream stream, int? version = null)
    +    where T : class, IStreamSerializer
    +
    Parameters
    @@ -8656,7 +8968,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedData(Stream, Int32, ArrayPool<Byte>)

    @@ -8665,7 +8977,8 @@

    Declaration
    -
    public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool<byte> pool = null)
    Parameters
    @@ -8708,7 +9021,8 @@
    Returns
    - @@ -8718,7 +9032,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedDataAsync(Stream, Int32, ArrayPool<Byte>, CancellationToken)

    @@ -8727,7 +9041,8 @@

    Declaration
    -
    public static async Task<byte[]> ReadSerializedDataAsync(this Stream stream, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<byte[]> ReadSerializedDataAsync(this Stream stream, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    System.Byte[]

    Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!)

    +

    Serialized data (a pool array which needs to be returned to the pool (BufferPool will be used per default) after use and might +be larger than the given length!)

    @@ -8776,7 +9091,8 @@
    Returns
    - @@ -8786,7 +9102,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedNullable<T>(Stream, Nullable<Int32>)

    @@ -8860,7 +9176,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -8940,7 +9256,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedObject(Stream, Type, Nullable<Int32>)

    @@ -8949,8 +9265,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, int? version = null)
    +
    public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, int? version = null)
    Parameters
    Task<System.Byte[]>

    Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!)

    +

    Serialized data (a pool array which needs to be returned to the pool (BufferPool will be used per default) after use and might +be larger than the given length!)

    @@ -9012,8 +9327,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Task<IStreamSerializer> ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
    +
    public static Task<IStreamSerializer> ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -9072,7 +9386,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedStruct<T>(Stream, Nullable<Int32>)

    @@ -9145,7 +9459,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9224,7 +9538,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructNullable<T>(Stream, Nullable<Int32>)

    @@ -9298,7 +9612,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9378,7 +9692,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializerVersion(Stream)

    @@ -9429,7 +9743,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializerVersionAsync(Stream, CancellationToken)

    @@ -9439,7 +9753,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<int> ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    +public static async Task<int> ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    Parameters
    @@ -9486,7 +9800,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -9495,8 +9809,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static short ReadShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static short ReadShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -9549,7 +9862,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -9558,8 +9871,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<short> ReadShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<short> ReadShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -9618,7 +9930,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -9627,8 +9939,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -9681,7 +9992,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -9690,8 +10001,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<short?> ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<short?> ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -9750,7 +10060,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStream(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

    @@ -9836,7 +10146,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStreamAsync(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

    @@ -9845,7 +10155,8 @@

    Declaration
    -
    public static Task<Stream> ReadStreamAsync(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> ReadStreamAsync(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
    Parameters
    @@ -9928,7 +10239,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStreamNullable(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

    @@ -10015,7 +10326,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStreamNullableAsync<T>(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

    @@ -10123,7 +10434,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10132,8 +10443,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static string ReadString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static string ReadString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -10198,7 +10508,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10207,8 +10517,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static string ReadString16(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static string ReadString16(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -10273,7 +10582,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10282,8 +10591,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<string> ReadString16Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<string> ReadString16Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    Parameters
    @@ -10354,7 +10662,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10363,8 +10671,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static string ReadString16Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static string ReadString16Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -10429,7 +10736,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10438,8 +10745,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<string> ReadString16NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<string> ReadString16NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    Parameters
    @@ -10510,7 +10816,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10519,8 +10825,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static string ReadString32(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static string ReadString32(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -10585,7 +10890,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10594,8 +10899,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<string> ReadString32Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<string> ReadString32Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    Parameters
    @@ -10666,7 +10970,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10675,8 +10979,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static string ReadString32Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static string ReadString32Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -10741,7 +11044,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10750,8 +11053,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<string> ReadString32NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<string> ReadString32NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    Parameters
    @@ -10822,7 +11124,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10831,8 +11133,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<string> ReadStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<string> ReadStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    Parameters
    @@ -10903,7 +11204,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStringNullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10912,8 +11213,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static string ReadStringNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static string ReadStringNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -10978,7 +11278,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStringNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10987,8 +11287,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<string> ReadStringNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<string> ReadStringNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    Parameters
    @@ -11059,7 +11358,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStruct<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

    @@ -11145,7 +11444,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadStructAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

    @@ -11237,7 +11536,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadStructNullable<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

    @@ -11323,7 +11622,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadStructNullableAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

    @@ -11415,7 +11714,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadUInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -11424,8 +11723,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -11478,7 +11776,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -11487,8 +11785,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<uint> ReadUIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<uint> ReadUIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -11547,7 +11844,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -11556,8 +11853,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -11610,7 +11906,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -11619,8 +11915,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<uint?> ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<uint?> ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -11679,7 +11974,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULong(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -11688,8 +11983,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -11742,7 +12036,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -11751,8 +12045,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<ulong> ReadULongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<ulong> ReadULongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -11811,7 +12104,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -11820,8 +12113,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -11874,7 +12166,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -11883,8 +12175,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<ulong?> ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<ulong?> ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -11943,7 +12234,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -11952,8 +12243,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -12006,7 +12296,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -12015,8 +12305,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<ushort> ReadUShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<ushort> ReadUShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -12075,7 +12364,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -12084,8 +12373,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    Parameters
    @@ -12138,7 +12426,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -12147,8 +12435,7 @@

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<ushort?> ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<ushort?> ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -12207,7 +12494,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Boolean)

    @@ -12264,7 +12551,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Byte)

    @@ -12321,7 +12608,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Decimal)

    @@ -12378,7 +12665,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Double)

    @@ -12435,7 +12722,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int16)

    @@ -12492,7 +12779,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int32)

    @@ -12549,7 +12836,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int64)

    @@ -12606,7 +12893,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, SByte)

    @@ -12663,7 +12950,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Single)

    @@ -12720,7 +13007,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt16)

    @@ -12777,7 +13064,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt32)

    @@ -12834,7 +13121,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt64)

    @@ -13127,7 +13414,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObject(Stream, Object)

    @@ -13183,7 +13470,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectAsync(Stream, Object, CancellationToken)

    @@ -13192,7 +13479,7 @@

    Declaration
    -
    public static Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    public static async Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13244,7 +13531,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullable(Stream, Object)

    @@ -13301,7 +13588,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullableAsync(Stream, Object, CancellationToken)

    @@ -13363,7 +13650,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteArray(Stream, Array)

    @@ -13420,7 +13707,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteArrayAsync(Stream, Array, CancellationToken)

    @@ -13482,7 +13769,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteArrayNullable(Stream, Nullable<Array>)

    @@ -13539,7 +13826,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteArrayNullableAsync(Stream, Nullable<Array>, CancellationToken)

    @@ -13601,7 +13888,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Boolean, CancellationToken)

    @@ -13663,7 +13950,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Byte, CancellationToken)

    @@ -13725,7 +14012,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Decimal, CancellationToken)

    @@ -13787,7 +14074,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Double, CancellationToken)

    @@ -13849,7 +14136,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int16, CancellationToken)

    @@ -13911,7 +14198,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int32, CancellationToken)

    @@ -13973,7 +14260,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int64, CancellationToken)

    @@ -14035,7 +14322,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, SByte, CancellationToken)

    @@ -14097,7 +14384,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Single, CancellationToken)

    @@ -14159,7 +14446,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt16, CancellationToken)

    @@ -14221,7 +14508,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt32, CancellationToken)

    @@ -14283,7 +14570,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt64, CancellationToken)

    @@ -14345,7 +14632,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytes(Stream, ReadOnlySpan<Byte>)

    @@ -14402,7 +14689,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytes(Stream, Span<Byte>)

    @@ -14459,7 +14746,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesAsync(Stream, Memory<Byte>, CancellationToken)

    @@ -14521,7 +14808,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, CancellationToken)

    @@ -14583,7 +14870,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesNullable(Stream, Byte[])

    @@ -14640,7 +14927,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesNullableAsync(Stream, Byte[], CancellationToken)

    @@ -14702,7 +14989,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteDict(Stream, IDictionary)

    @@ -14759,7 +15046,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteDictAsync(Stream, IDictionary, CancellationToken)

    @@ -14769,7 +15056,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    +public static async Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14821,7 +15108,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteDictNullable(Stream, IDictionary)

    @@ -14878,7 +15165,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteDictNullableAsync(Stream, IDictionary, CancellationToken)

    @@ -14940,7 +15227,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnum(Stream, Object)

    @@ -14997,7 +15284,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnum<T>(Stream, T)

    @@ -15071,7 +15358,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumAsync(Stream, Object, CancellationToken)

    @@ -15081,7 +15368,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +public static async Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15133,7 +15420,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnumAsync<T>(Stream, T, CancellationToken)

    @@ -15143,7 +15430,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteEnumAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    +public static async Task WriteEnumAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
         where T : struct, Enum
    Parameters
    @@ -15212,7 +15499,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumNullable(Stream, Object)

    @@ -15269,7 +15556,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnumNullable<T>(Stream, Nullable<T>)

    @@ -15343,7 +15630,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync(Stream, Object, CancellationToken)

    @@ -15405,7 +15692,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    @@ -15481,20 +15768,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteFixedArray<T>(Stream, Span<T>)

    +

    WriteFixedArray(Stream, Array)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteFixedArray<T>(this Stream stream, Span<T> value)
    +public static Stream WriteFixedArray(this Stream stream, Array value)
    Parameters
    @@ -15513,7 +15800,7 @@
    Parameters
    - + @@ -15532,42 +15819,26 @@
    Returns
    - - -
    Span<T>Array value

    Value to write

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

    + +

    WriteFixedArray<T>(Stream, ReadOnlySpan<T>)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, CancellationToken cancellationToken = null)
    +public static Stream WriteFixedArray<T>(this Stream stream, ReadOnlySpan<T> value)
    Parameters
    @@ -15586,15 +15857,9 @@
    Parameters
    - + - - - - - @@ -15609,8 +15874,9 @@
    Returns
    - - + +
    Memory<T>ReadOnlySpan<T> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    @@ -15632,20 +15898,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNull<T>(Stream, T)

    -

    Write a boolean flag if an object is not null

    + +

    WriteFixedArray<T>(Stream, Span<T>)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool WriteIfNull<T>(this Stream stream, T obj)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Stream WriteFixedArray<T>(this Stream stream, Span<T> value)
    Parameters
    @@ -15664,9 +15930,9 @@
    Parameters
    - - - + + @@ -15681,8 +15947,8 @@
    Returns
    - - + @@ -15698,27 +15964,27 @@
    Type Parameters
    -
    Tobj

    Object

    +
    Span<T>value

    Value to write

    System.Boolean

    Is not null?

    +
    Stream

    Stream

    T

    Object type

    +

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNull<T>(Stream, T, Action)

    -

    Write a boolean flag if an object is not null

    + +

    WriteFixedArrayAsync(Stream, Array, CancellationToken)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteIfNull<T>(this Stream stream, T obj, Action action)
    +public static Task WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15737,15 +16003,15 @@
    Parameters
    - - - + + - - - + + @@ -15760,44 +16026,27 @@
    Returns
    - - - - -
    Tobj

    Object

    +
    Arrayvalue

    Value to write

    Actionaction

    Write action to execute, if the object isn't null

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - - + +
    NameDescription
    T

    Object type

    -
    Task
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNullAsync<T>(Stream, T, CancellationToken)

    -

    Write a boolean flag if an object is not null

    + +

    WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<bool> WriteIfNullAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Task WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15816,9 +16065,9 @@
    Parameters
    - - - + + @@ -15839,9 +16088,8 @@
    Returns
    - - + +
    Tobj

    Object

    +
    Memory<T>value

    Value to write

    Task<System.Boolean>

    Is not null?

    -
    Task
    @@ -15856,27 +16104,27 @@
    Type Parameters
    T -

    Object type

    +

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNullAsync<T>(Stream, T, Func<Task>, CancellationToken)

    -

    Write a boolean flag if an object is not null

    + +

    WriteFixedArrayAsync<T>(Stream, ReadOnlyMemory<T>, CancellationToken)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteIfNullAsync<T>(this Stream stream, T obj, Func<Task> action, CancellationToken cancellationToken = null)
    +public static Task WriteFixedArrayAsync<T>(this Stream stream, ReadOnlyMemory<T> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15895,15 +16143,9 @@
    Parameters
    - - - - - - - - + + @@ -15940,27 +16182,27 @@
    Type Parameters
    -
    Tobj

    Object

    -
    Func<Task>action

    Write action to execute, if the object isn't null

    +
    ReadOnlyMemory<T>value

    Value to write

    T

    Object type

    +

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteList(Stream, IList)

    -

    Write

    + +

    WriteIfNotNull<T>(Stream, T)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteList(this Stream stream, IList value)
    +public static bool WriteIfNotNull<T>(this Stream stream, T obj)
    Parameters
    @@ -15979,9 +16221,9 @@
    Parameters
    - - - + + @@ -15996,28 +16238,44 @@
    Returns
    - - + + + +
    System.Collections.IListvalue

    Value to write

    +
    Tobj

    Object

    Stream

    Stream

    +
    System.Boolean

    Is not null?

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListAsync(Stream, IList, CancellationToken)

    -

    Write

    + +

    WriteIfNotNull<T>(Stream, T, Action)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    +public static Stream WriteIfNotNull<T>(this Stream stream, T obj, Action action)
    Parameters
    @@ -16036,15 +16294,15 @@
    Parameters
    - - - + + - - - + + @@ -16059,27 +16317,44 @@
    Returns
    - - + + + + +
    System.Collections.IListvalue

    Value to write

    +
    Tobj

    Object

    CancellationTokencancellationToken

    Cancellation token

    +
    Actionaction

    Write action to execute, if the object isn't null

    TaskStream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListNullable(Stream, IList)

    -

    Write

    + +

    WriteIfNotNullAsync<T>(Stream, T, CancellationToken)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteListNullable(this Stream stream, IList value)
    +public static async Task<bool> WriteIfNotNullAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -16098,9 +16373,15 @@
    Parameters
    - - - + + + + + + + @@ -16115,28 +16396,44 @@
    Returns
    - - +
    System.Collections.IListvalue

    Value to write

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    +
    Task<System.Boolean>

    Is not null?

    - - | - Improve this Doc - - - View Source - - -

    WriteListNullableAsync(Stream, IList, CancellationToken)

    -

    Write

    -
    -
    -
    Declaration
    -
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteListNullableAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteIfNotNullAsync<T>(Stream, T, Func<Task>, CancellationToken)

    +

    Write a boolean flag if an object is not null

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task WriteIfNotNullAsync<T>(this Stream stream, T obj, Func<Task> action, CancellationToken cancellationToken = null)
    Parameters
    @@ -16155,9 +16452,15 @@
    Parameters
    - - - + + + + + + + @@ -16183,22 +16486,38 @@
    Returns
    System.Collections.IListvalue

    Value to write

    +
    Tobj

    Object

    +
    Func<Task>action

    Write action to execute, if the object isn't null

    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Boolean>)

    + +

    WriteList(Stream, IList)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, bool? value)
    +public static Stream WriteList(this Stream stream, IList value)
    Parameters
    @@ -16217,7 +16536,7 @@
    Parameters
    - + @@ -16242,20 +16561,20 @@
    Returns
    System.Nullable<System.Boolean>System.Collections.IList value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Byte>)

    + +

    WriteListAsync(Stream, IList, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, byte? value)
    +public static async Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16274,9 +16593,15 @@
    Parameters
    - + + + + + + @@ -16291,28 +16616,27 @@
    Returns
    - - + +
    System.Nullable<System.Byte>System.Collections.IList value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Decimal>)

    + +

    WriteListNullable(Stream, IList)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, decimal? value)
    +public static Stream WriteListNullable(this Stream stream, IList value)
    Parameters
    @@ -16331,7 +16655,7 @@
    Parameters
    - + @@ -16356,20 +16680,20 @@
    Returns
    System.Nullable<System.Decimal>System.Collections.IList value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Double>)

    + +

    WriteListNullableAsync(Stream, IList, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, double? value)
    +public static Task WriteListNullableAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16388,9 +16712,15 @@
    Parameters
    - + + + + + + @@ -16405,28 +16735,27 @@
    Returns
    - - + +
    System.Nullable<System.Double>System.Collections.IList value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Int16>)

    +

    WriteNullable(Stream, Nullable<Boolean>)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, short? value)
    +public static Stream WriteNullable(this Stream stream, bool? value)
    Parameters
    @@ -16445,7 +16774,7 @@
    Parameters
    - + @@ -16470,20 +16799,19 @@
    Returns
    System.Nullable<System.Int16>System.Nullable<System.Boolean> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Int32>)

    +

    WriteNullable(Stream, Nullable<Byte>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, int? value)
    +
    public static Stream WriteNullable(this Stream stream, byte? value)
    Parameters
    @@ -16502,7 +16830,7 @@
    Parameters
    - + @@ -16527,20 +16855,19 @@
    Returns
    System.Nullable<System.Int32>System.Nullable<System.Byte> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Int64>)

    +

    WriteNullable(Stream, Nullable<Decimal>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, long? value)
    +
    public static Stream WriteNullable(this Stream stream, decimal? value)
    Parameters
    @@ -16559,7 +16886,7 @@
    Parameters
    - + @@ -16584,20 +16911,19 @@
    Returns
    System.Nullable<System.Int64>System.Nullable<System.Decimal> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<SByte>)

    +

    WriteNullable(Stream, Nullable<Double>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, sbyte? value)
    +
    public static Stream WriteNullable(this Stream stream, double? value)
    Parameters
    @@ -16616,7 +16942,7 @@
    Parameters
    - + @@ -16641,20 +16967,19 @@
    Returns
    System.Nullable<System.SByte>System.Nullable<System.Double> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Single>)

    +

    WriteNullable(Stream, Nullable<Int16>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, float? value)
    +
    public static Stream WriteNullable(this Stream stream, short? value)
    Parameters
    @@ -16673,7 +16998,7 @@
    Parameters
    - + @@ -16698,20 +17023,19 @@
    Returns
    System.Nullable<System.Single>System.Nullable<System.Int16> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<UInt16>)

    +

    WriteNullable(Stream, Nullable<Int32>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, ushort? value)
    +
    public static Stream WriteNullable(this Stream stream, int? value)
    Parameters
    @@ -16730,7 +17054,7 @@
    Parameters
    - + @@ -16755,20 +17079,19 @@
    Returns
    System.Nullable<System.UInt16>System.Nullable<System.Int32> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<UInt32>)

    +

    WriteNullable(Stream, Nullable<Int64>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, uint? value)
    +
    public static Stream WriteNullable(this Stream stream, long? value)
    Parameters
    @@ -16787,7 +17110,7 @@
    Parameters
    - + @@ -16812,20 +17135,19 @@
    Returns
    System.Nullable<System.UInt32>System.Nullable<System.Int64> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<UInt64>)

    +

    WriteNullable(Stream, Nullable<SByte>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, ulong? value)
    +
    public static Stream WriteNullable(this Stream stream, sbyte? value)
    Parameters
    @@ -16844,7 +17166,7 @@
    Parameters
    - + @@ -16869,20 +17191,19 @@
    Returns
    System.Nullable<System.UInt64>System.Nullable<System.SByte> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<Single>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, float? value)
    Parameters
    @@ -16901,15 +17222,9 @@
    Parameters
    - + - - - - - @@ -16924,27 +17239,27 @@
    Returns
    - - + +
    System.Nullable<System.Boolean>System.Nullable<System.Single> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<UInt16>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, ushort? value)
    Parameters
    @@ -16963,15 +17278,9 @@
    Parameters
    - + - - - - - @@ -16986,27 +17295,27 @@
    Returns
    - - + +
    System.Nullable<System.Byte>System.Nullable<System.UInt16> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<UInt32>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, uint? value)
    Parameters
    @@ -17025,15 +17334,9 @@
    Parameters
    - + - - - - - @@ -17048,27 +17351,27 @@
    Returns
    - - + +
    System.Nullable<System.Decimal>System.Nullable<System.UInt32> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<UInt64>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, ulong? value)
    Parameters
    @@ -17087,15 +17390,9 @@
    Parameters
    - + - - - - - @@ -17110,27 +17407,28 @@
    Returns
    - - + +
    System.Nullable<System.Double>System.Nullable<System.UInt64> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Int16>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = null)
    +public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17149,7 +17447,7 @@
    Parameters
    - + @@ -17179,20 +17477,19 @@
    Returns
    System.Nullable<System.Int16>System.Nullable<System.Boolean> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17211,7 +17508,7 @@
    Parameters
    - + @@ -17241,20 +17538,19 @@
    Returns
    System.Nullable<System.Int32>System.Nullable<System.Byte> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17273,7 +17569,7 @@
    Parameters
    - + @@ -17303,20 +17599,19 @@
    Returns
    System.Nullable<System.Int64>System.Nullable<System.Decimal> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17335,7 +17630,7 @@
    Parameters
    - + @@ -17365,20 +17660,19 @@
    Returns
    System.Nullable<System.SByte>System.Nullable<System.Double> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Int16>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17397,7 +17691,7 @@
    Parameters
    - + @@ -17427,20 +17721,19 @@
    Returns
    System.Nullable<System.Single>System.Nullable<System.Int16> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17459,7 +17752,7 @@
    Parameters
    - + @@ -17489,20 +17782,19 @@
    Returns
    System.Nullable<System.UInt16>System.Nullable<System.Int32> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17521,7 +17813,7 @@
    Parameters
    - + @@ -17551,20 +17843,19 @@
    Returns
    System.Nullable<System.UInt32>System.Nullable<System.Int64> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17583,7 +17874,7 @@
    Parameters
    - + @@ -17613,19 +17904,19 @@
    Returns
    System.Nullable<System.UInt64>System.Nullable<System.SByte> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumber(Stream, Object)

    + +

    WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNumber(this Stream stream, object value)
    +
    public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17644,9 +17935,15 @@
    Parameters
    - + + + + + + @@ -17661,28 +17958,26 @@
    Returns
    - - + +
    System.ObjectSystem.Nullable<System.Single> value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumber<T>(Stream, T)

    + +

    WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNumber<T>(this Stream stream, T value)
    -    where T : struct, IConvertible
    +
    public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17701,60 +17996,49 @@
    Parameters
    - + - -
    TSystem.Nullable<System.UInt16> value

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - + +
    NameType Description
    T

    Number type

    -
    Task
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberAsync(Stream, Object, CancellationToken)

    + +

    WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17773,7 +18057,7 @@
    Parameters
    - + @@ -17803,20 +18087,19 @@
    Returns
    System.ObjectSystem.Nullable<System.UInt32> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberAsync<T>(Stream, T, CancellationToken)

    + +

    WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNumberAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    -    where T : struct, IConvertible
    +
    public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17835,7 +18118,7 @@
    Parameters
    - + @@ -17863,37 +18146,22 @@
    Returns
    TSystem.Nullable<System.UInt64> value

    Value to write

    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Number type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberInt(Stream, Object, Nullable<NumberTypes>)

    -

    Write

    + +

    WriteNullableCount(Stream, Nullable<Int64>)

    +

    Write a nullable count

    Declaration
    -
    public static Stream WriteNumberInt(Stream stream, object value, NumberTypes? type)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool WriteNullableCount(this Stream stream, long? count)
    Parameters
    @@ -17912,15 +18180,9 @@
    Parameters
    - - - - - - - - + + @@ -17935,28 +18197,28 @@
    Returns
    - - +
    System.Objectvalue

    Value to write

    -
    System.Nullable<NumberTypes>type

    Number type

    +
    System.Nullable<System.Int64>count

    Count

    Stream

    Stream

    +
    System.Boolean

    Is not null?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullable(Stream, Object)

    -

    Write

    + +

    WriteNullableCount(Stream, Nullable<Int64>, Action)

    +

    Write a nullable count

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNumberNullable(this Stream stream, object value)
    +public static Stream WriteNullableCount(this Stream stream, long? count, Action action)
    Parameters
    @@ -17975,9 +18237,15 @@
    Parameters
    - - - + + + + + + + @@ -18000,21 +18268,20 @@
    Returns
    System.Objectvalue

    Value to write

    +
    System.Nullable<System.Int64>count

    Count

    +
    Actionaction

    Write action to execute, if the count isn't null

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullable<T>(Stream, Nullable<T>)

    -

    Write

    + +

    WriteNullableCountAsync(Stream, Nullable<Int64>, CancellationToken)

    +

    Write a nullable count

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNumberNullable<T>(this Stream stream, T? value)
    -    where T : struct, IConvertible
    +public static async Task<bool> WriteNullableCountAsync(this Stream stream, long? count, CancellationToken cancellationToken = null)
    Parameters
    @@ -18033,61 +18300,51 @@
    Parameters
    - - - + + - -
    System.Nullable<T>value

    Value to write

    +
    System.Nullable<System.Int64>count

    Count

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - +
    NameType Description
    T

    Number type

    +
    Task<System.Boolean>

    Is not null?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullableAsync(Stream, Object, CancellationToken)

    -

    Write

    + +

    WriteNullableCountAsync(Stream, Nullable<Int64>, Func<Task>, CancellationToken)

    +

    Write a nullable count

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNumberNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +public static async Task WriteNullableCountAsync(this Stream stream, long? count, Func<Task> action, CancellationToken cancellationToken = null)
    Parameters
    @@ -18106,9 +18363,15 @@
    Parameters
    - - - + + + + + + + @@ -18136,21 +18399,19 @@
    Returns
    System.Objectvalue

    Value to write

    +
    System.Nullable<System.Int64>count

    Count

    +
    Func<Task>action

    Write action to execute, if the count isn't null

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    + +

    WriteNumber(Stream, Object)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNumberNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    -    where T : struct, IConvertible
    +
    public static Stream WriteNumber(this Stream stream, object value)
    Parameters
    @@ -18169,15 +18430,9 @@
    Parameters
    - + - - - - - @@ -18192,22 +18447,80 @@
    Returns
    - - + +
    System.Nullable<T>System.Object value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    -
    Type Parameters
    - - - - - - - - - - + + | + Improve this Doc + + + View Source + + +

    WriteNumber<T>(Stream, T)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Stream WriteNumber<T>(this Stream stream, T value)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    +
    NameDescription
    T
    + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + @@ -18215,20 +18528,159 @@
    Type Parameters
    NameDescription
    T

    Number type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObject(Stream, Object)

    + +

    WriteNumberAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberAsync<T>(Stream, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task WriteNumberAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullable(Stream, Object)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteObject(this Stream stream, object obj)
    +public static Stream WriteNumberNullable(this Stream stream, object value)
    Parameters
    @@ -18248,8 +18700,8 @@
    Parameters
    - - + @@ -18272,20 +18724,1240 @@
    Returns
    System.Objectobj

    Object to write

    +
    value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObjectAsync(Stream, Object, CancellationToken)

    + +

    WriteNumberNullable<T>(Stream, Nullable<T>)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteNumberNullable<T>(this Stream stream, T? value)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<T>value

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullableAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteNumberNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteNumberNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<T>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObject(Stream, Object)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteObject(this Stream stream, object obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectNullable(Stream, Object)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteObjectNullable(this Stream stream, object obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectNullableAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    + + | + Improve this Doc + + + View Source + + +

    WriteSerialized(Stream, IStreamSerializer)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerialized<T>(Stream, T)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerialized<T>(this Stream stream, T obj)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedAsync<T>(Stream, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteSerializedAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedData(Stream, Byte[], Int32, ArrayPool<Byte>)

    +

    Write serialized Data

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Byte[]data

    Serialized data (will be returned to pool)

    +
    System.Int32len

    Data length in bytes

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool<Byte>, CancellationToken)

    +

    Write serialized Data

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Byte[]data

    Serialized data (will be returned to pool)

    +
    System.Int32len

    Data length in bytes

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullable(Stream, IStreamSerializer)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullable<T>(Stream, T)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedNullable<T>(this Stream stream, T obj)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableAsync<T>(Stream, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteSerializedNullableAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task WriteSerializedNullableAsync<T>(this Stream stream, T? obj, CancellationToken cancellationToken = null)
    +    where T : struct, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<T>obj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static Stream WriteSerializedNullableStruct<T>(this Stream stream, T? obj) + where T : struct, IStreamSerializer
    Parameters
    @@ -18304,50 +19976,62 @@
    Parameters
    - + - + +
    System.ObjectSystem.Nullable<T> obj

    Object to write

    +

    Object

    +
    Returns
    + + - - - + + + + + + +
    CancellationTokencancellationToken

    Cancellation token

    +
    TypeDescription
    Stream

    Stream

    -
    Returns
    +
    Type Parameters
    - + - - + +
    TypeName Description
    TaskT

    Structure type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObjectNullable(Stream, Object)

    + +

    WriteSerializedStruct<T>(Stream, T)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteObjectNullable(this Stream stream, object obj)
    +public static Stream WriteSerializedStruct<T>(this Stream stream, T obj) + where T : struct, IStreamSerializer
    Parameters
    @@ -18366,9 +20050,9 @@
    Parameters
    - + - @@ -18385,26 +20069,43 @@
    Returns
    + + +
    System.ObjectT obj

    Object to write

    +

    Object

    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Structure type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObjectNullableAsync(Stream, Object, CancellationToken)

    + +

    WriteSerializedStructAsync<T>(Stream, T, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static Task WriteSerializedStructAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null) + where T : struct, IStreamSerializer
    Parameters
    @@ -18423,9 +20124,9 @@
    Parameters
    - + - @@ -18451,22 +20152,38 @@
    Returns
    System.ObjectT obj

    Object to write

    +

    Object

    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerialized(Stream, IStreamSerializer)

    -

    Write

    + +

    WriteSerializerVersion(Stream)

    +

    Write the serializer version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj)
    +public static Stream WriteSerializerVersion(this Stream stream)
    Parameters
    @@ -18482,12 +20199,6 @@
    Parameters
    - - - - - @@ -18510,20 +20221,20 @@
    Returns
    Stream stream

    Stream

    -
    IStreamSerializerobj

    Object

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

    -

    Write

    + +

    WriteSerializerVersionAsync(Stream, CancellationToken)

    +

    Write the serializer version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    Parameters
    @@ -18539,12 +20250,6 @@
    Parameters
    - - - - - @@ -18572,20 +20277,19 @@
    Returns
    Stream stream

    Stream

    -
    IStreamSerializerobj

    Object

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedData(Stream, Byte[], Int32, ArrayPool<Byte>)

    -

    Write serialized Data

    + +

    WriteStream(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>)

    +

    Write a stream

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null)
    +
    public static Stream WriteStream(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null)
    Parameters
    @@ -18604,21 +20308,21 @@
    Parameters
    - - - + + - - - + + - - - + + @@ -18641,20 +20345,19 @@
    Returns
    System.Byte[]data

    Serialized data

    +
    Streamsource

    Source stream

    System.Int32len

    Data length in bytes

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool<Byte>, CancellationToken)

    -

    Write serialized Data

    + +

    WriteStreamAsync(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    Write a stream

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task WriteStreamAsync(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -18673,21 +20376,21 @@
    Parameters
    - - - + + - - - + + - - - + + @@ -18715,20 +20418,20 @@
    Returns
    System.Byte[]data

    Serialized data

    +
    Streamsource

    Source stream

    System.Int32len

    Data length in bytes

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullable(Stream, IStreamSerializer)

    -

    Write

    + +

    WriteStreamNullable(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>)

    +

    Write a stream

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer obj)
    +public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null)
    Parameters
    @@ -18747,9 +20450,21 @@
    Parameters
    - - - + + + + + + + + + + + + @@ -18772,20 +20487,20 @@
    Returns
    IStreamSerializerobj

    Object

    +
    System.Nullable<Stream>source

    Source stream

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    -

    Write

    + +

    WriteStreamNullableAsync(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    Write a stream

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +public static Task WriteStreamNullableAsync(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -18804,65 +20519,27 @@
    Parameters
    - - - + + - - - + + - - -
    IStreamSerializerobj

    Object

    +
    System.Nullable<Stream>source

    Source stream

    CancellationTokencancellationToken

    Cancellation token

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    Returns
    - - - - - - - - - - - - - -
    TypeDescription
    Task
    - - | - Improve this Doc - - - View Source - - -

    WriteSerializerVersion(Stream)

    -

    Write the serializer version

    -
    -
    -
    Declaration
    -
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializerVersion(this Stream stream)
    -
    -
    Parameters
    - - + - - - + + + - - - - - + + @@ -18877,7 +20554,7 @@
    Returns
    - + @@ -18885,20 +20562,19 @@
    Returns
    TypeNameDescriptionSystem.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    Streamstream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializerVersionAsync(Stream, CancellationToken)

    -

    Write the serializer version

    + +

    WriteString(Stream, String)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    +
    public static Stream WriteString(this Stream stream, string value)
    Parameters
    @@ -18917,9 +20593,9 @@
    Parameters
    - - - + + @@ -18934,26 +20610,27 @@
    Returns
    - - + +
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Stringvalue

    Value to write

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStream(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>)

    -

    Write a stream

    + +

    WriteString16(Stream, String)

    +

    Write UTF-16 (little endian) string

    Declaration
    -
    public static Stream WriteStream(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +
    public static Stream WriteString16(this Stream stream, string value)
    Parameters
    @@ -18972,21 +20649,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -19009,19 +20674,19 @@
    Returns
    Streamsource

    Source stream

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    System.Stringvalue

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStreamAsync(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    -

    Write a stream

    + +

    WriteString16Async(Stream, String, CancellationToken)

    +

    Write UTF-16 (little endian) string

    Declaration
    -
    public static Task WriteStreamAsync(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19040,21 +20705,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -19082,20 +20735,19 @@
    Returns
    Streamsource

    Source stream

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    System.Stringvalue

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStreamNullable(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>)

    -

    Write a stream

    + +

    WriteString16Nullable<T>(Stream, String)

    +

    Write UTF-16 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +
    public static Stream WriteString16Nullable<T>(this Stream stream, string value)
    Parameters
    @@ -19114,21 +20766,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -19149,22 +20789,36 @@
    Returns
    System.Nullable<Stream>source

    Source stream

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    System.Stringvalue

    Value to write

    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStreamNullableAsync(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    -

    Write a stream

    + +

    WriteString16NullableAsync(Stream, String, CancellationToken)

    +

    Write UTF-16 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStreamNullableAsync(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    public static Task WriteString16NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19183,21 +20837,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -19219,27 +20861,25 @@
    Returns
    - +
    System.Nullable<Stream>source

    Source stream

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    System.Stringvalue

    Value to write

    Task

    Stream

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString(Stream, String)

    -

    Write

    + +

    WriteString32(Stream, String)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteString(this Stream stream, string value)
    +
    public static Stream WriteString32(this Stream stream, string value)
    Parameters
    @@ -19283,20 +20923,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString16(Stream, String)

    -

    Write UTF-16 (little endian) string

    + +

    WriteString32Async(Stream, String, CancellationToken)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteString16(this Stream stream, string value)
    +
    public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19318,6 +20957,12 @@
    Parameters
    + + + + + @@ -19332,28 +20977,26 @@
    Returns
    - - + +
    System.String value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString16Async(Stream, String, CancellationToken)

    -

    Write UTF-16 (little endian) string

    + +

    WriteString32Nullable(Stream, String)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteString32Nullable(this Stream stream, string value)
    Parameters
    @@ -19375,12 +21018,6 @@
    Parameters
    - - - - - @@ -19395,27 +21032,27 @@
    Returns
    - - + +
    System.String value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString16Nullable<T>(Stream, String)

    -

    Write UTF-16 (little endian) string

    + +

    WriteString32NullableAsync(Stream, String, CancellationToken)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteString16Nullable<T>(this Stream stream, string value)
    +
    public static Task WriteString32NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19439,55 +21076,44 @@
    Parameters
    - -

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - +
    NameType Description
    TTask
    | - Improve this Doc - - - View Source + Improve this Doc - -

    WriteString16NullableAsync(Stream, String, CancellationToken)

    -

    Write UTF-16 (little endian) string

    + + View Source + + +

    WriteStringAsync(Stream, String, CancellationToken)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteString16NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19536,20 +21162,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32(Stream, String)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStringNullable(Stream, String)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteString32(this Stream stream, string value)
    +
    public static Stream WriteStringNullable(this Stream stream, string value)
    Parameters
    @@ -19593,20 +21218,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32Async(Stream, String, CancellationToken)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStringNullableAsync(Stream, String, CancellationToken)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task WriteStringNullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19655,20 +21279,20 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32Nullable(Stream, String)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStruct(Stream, Object, Boolean)

    +

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteString32Nullable(this Stream stream, string value)
    +public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true)
    Parameters
    @@ -19687,9 +21311,15 @@
    Parameters
    - + - + + + + + @@ -19712,20 +21342,21 @@
    Returns
    System.StringSystem.Object value

    Value to write

    +

    Struct

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32NullableAsync(Stream, String, CancellationToken)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStruct<T>(Stream, T, Boolean)

    +

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteString32NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +public static Stream WriteStruct<T>(this Stream stream, T value, bool forceLittleEndian = true) + where T : struct
    Parameters
    @@ -19744,15 +21375,15 @@
    Parameters
    - + - - - - + + @@ -19767,27 +21398,44 @@
    Returns
    - - + + + + +
    System.StringT value

    Value to write

    +

    Struct

    CancellationTokencancellationToken

    Cancellation token

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    TaskStream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStringAsync(Stream, String, CancellationToken)

    -

    Write

    + +

    WriteStructAsync(Stream, Object, Boolean, CancellationToken)

    +

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    Parameters
    @@ -19806,9 +21454,15 @@
    Parameters
    - + - + + + + + @@ -19836,20 +21490,21 @@
    Returns
    System.StringSystem.Object value

    Value to write

    +

    Struct

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStringNullable(Stream, String)

    -

    Write

    + +

    WriteStructAsync<T>(Stream, T, Boolean, CancellationToken)

    +

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStringNullable(this Stream stream, string value)
    +public static Task WriteStructAsync<T>(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = null) + where T : struct
    Parameters
    @@ -19868,107 +21523,72 @@
    Parameters
    - + - - -
    System.StringT value

    Value to write

    +

    Struct

    -
    Returns
    - - - - + + + - - - - + +
    TypeDescriptionSystem.BooleanforceLittleEndian

    Force little endian encoding?

    +
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    - - | - Improve this Doc - - - View Source - - -

    WriteStringNullableAsync(Stream, String, CancellationToken)

    -

    Write

    -
    -
    -
    Declaration
    -
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStringNullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    -
    -
    Parameters
    +
    Returns
    - - - - - - - - - - - - - - + +
    TypeName Description
    Streamstream

    Stream

    -
    System.Stringvalue

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    -
    Task
    -
    Returns
    +
    Type Parameters
    - + - - + +
    TypeName Description
    TaskT

    Structure type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStruct(Stream, Object, Boolean)

    + +

    WriteStructNullable(Stream, Object, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true)
    +public static Stream WriteStructNullable(this Stream stream, object value, bool forceLittleEndian = true)
    Parameters
    @@ -20018,20 +21638,21 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStructAsync(Stream, Object, Boolean, CancellationToken)

    + +

    WriteStructNullable<T>(Stream, Nullable<T>, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Stream WriteStructNullable<T>(this Stream stream, T? value, bool forceLittleEndian = true) + where T : struct
    Parameters
    @@ -20050,7 +21671,7 @@
    Parameters
    - + @@ -20061,45 +21682,56 @@
    Parameters
    + +
    System.ObjectSystem.Nullable<T> value

    Struct

    Force little endian encoding?

    +
    Returns
    + + + + + + + + - - - +
    TypeDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    Stream

    Stream

    -
    Returns
    +
    Type Parameters
    - + - - + +
    TypeName Description
    TaskT

    Structure type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStructNullable(Stream, Object, Boolean)

    + +

    WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStructNullable(this Stream stream, object value, bool forceLittleEndian = true)
    +public static Task WriteStructNullableAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    Parameters
    @@ -20127,6 +21759,12 @@
    Parameters
    + + + + + @@ -20141,28 +21779,28 @@
    Returns
    - - + +
    System.Boolean forceLittleEndian

    Force little endian encoding?

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken)

    +

    WriteStructNullableAsync<T>(Stream, Nullable<T>, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStructNullableAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task WriteStructNullableAsync<T>(this Stream stream, T? value, bool forceLittleEndian = true, CancellationToken cancellationToken = null) + where T : struct
    Parameters
    @@ -20181,7 +21819,7 @@
    Parameters
    - + @@ -20215,6 +21853,22 @@
    Returns
    System.ObjectSystem.Nullable<T> value

    Struct

    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    @@ -20226,7 +21880,7 @@
    Returns
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html index 8667819..aad1fe9 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -365,7 +365,7 @@
    Property Value

    Version

    -

    Version number

    +

    Version number (the first 8 bits are used internal, while other bits can be used for customization)

    Declaration
    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html index fd41be3..04cb6df 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html @@ -91,10 +91,10 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source

    StreamSerializerAttribute(Int32, Int32, Int32, Boolean, StreamSerializerModes)

    @@ -149,10 +149,10 @@
    Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source

    StreamSerializerAttribute(StreamSerializerModes, Int32, Boolean)

    @@ -197,18 +197,18 @@

    Fields

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StructureFields

    +

    NumericStructureFields

    Structure fields which require endianess conversion

    Declaration
    -
    protected List<FieldInfo>? StructureFields
    +
    protected List<FieldInfo>? NumericStructureFields
    Field Value
    @@ -229,10 +229,10 @@

    Properties

    | - Improve this Doc + Improve this Doc - View Source + View Source

    FromVersion

    @@ -260,10 +260,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    KeyOptionsType

    @@ -291,10 +291,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    KeySerializerOptions

    @@ -322,10 +322,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    KeySerializerOptionsFactoryMethod

    @@ -353,10 +353,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    KeySerializerOptionsFactoryType

    @@ -384,10 +384,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    MaxLen

    @@ -415,10 +415,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    MinLen

    @@ -446,10 +446,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    Mode

    @@ -477,10 +477,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    OptionsType

    @@ -508,10 +508,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    Position

    @@ -539,10 +539,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    SerializerOptions

    @@ -570,10 +570,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    SerializerOptionsFactoryMethod

    @@ -601,10 +601,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    SerializerOptionsFactoryType

    @@ -632,10 +632,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    SkipPropertyNameChecksum

    @@ -663,10 +663,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    StreamFactory

    @@ -694,10 +694,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    StreamFactoryMethod

    @@ -725,10 +725,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    StreamFactoryType

    @@ -756,10 +756,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    UseDefaultValues

    @@ -787,10 +787,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    ValueOptionsType

    @@ -818,10 +818,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    ValueSerializerOptions

    @@ -849,10 +849,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    ValueSerializerOptionsFactoryMethod

    @@ -880,10 +880,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    ValueSerializerOptionsFactoryType

    @@ -911,10 +911,10 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source

    Version

    @@ -944,19 +944,19 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    CreateSerializerOptions(Nullable<Type>, PropertyInfo)

    +

    CreateSerializerOptions(Nullable<Type>, Nullable<PropertyInfoExt>)

    Create serializer options

    Declaration
    -
    protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfo property)
    +
    protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfoExt? property)
    Parameters
    @@ -975,7 +975,7 @@
    Parameters
    - + @@ -1000,19 +1000,19 @@
    Returns
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt> property

    Property

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetKeySerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

    +

    GetKeySerializerOptions(Nullable<PropertyInfoExt>, Stream, Int32, CancellationToken)

    Get key serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfo property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = null)
    Parameters
    @@ -1025,7 +1025,7 @@
    Parameters
    - + @@ -1068,10 +1068,60 @@
    Returns
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt> property

    Target property

    | - Improve this Doc + Improve this Doc + + + View Source + + +

    GetNumericStructureFields(Type)

    +

    Get the structure fields which require endianess conversion

    +
    +
    +
    Declaration
    +
    +
    public virtual List<FieldInfo> GetNumericStructureFields(Type type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    Typetype

    Structure type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    List<System.Reflection.FieldInfo>

    Fields

    +
    + + | + Improve this Doc - View Source + View Source

    GetReadProperties(Type, Nullable<Int32>)

    @@ -1124,19 +1174,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

    +

    GetSerializerOptions(Nullable<PropertyInfoExt>, Stream, Int32, CancellationToken)

    Get serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetSerializerOptions(PropertyInfo property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = null)
    Parameters
    @@ -1149,7 +1199,7 @@
    Parameters
    - + @@ -1192,10 +1242,10 @@
    Returns
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt> property

    Target property

    | - Improve this Doc + Improve this Doc - View Source + View Source

    GetStream(Object, PropertyInfo, Stream, Int32, CancellationToken)

    @@ -1266,60 +1316,10 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source - - -

    GetStructureFields(Type)

    -

    Get the structure fields which require endianess conversion

    -
    -
    -
    Declaration
    -
    -
    public virtual List<FieldInfo> GetStructureFields(Type type)
    -
    -
    Parameters
    - - - - - - - - - - - - - - - -
    TypeNameDescription
    Typetype

    Structure type

    -
    -
    Returns
    - - - - - - - - - - - - - -
    TypeDescription
    List<System.Reflection.FieldInfo>

    Fields

    -
    - - | - Improve this Doc - - - View Source + View Source

    GetUseDefaultValue(Int32)

    @@ -1366,19 +1366,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetValueSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken)

    +

    GetValueSerializerOptions(Nullable<PropertyInfoExt>, Stream, Int32, CancellationToken)

    Get value serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfo property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = null)
    Parameters
    @@ -1391,7 +1391,7 @@
    Parameters
    - + @@ -1434,10 +1434,10 @@
    Returns
    System.Reflection.PropertyInfoSystem.Nullable<PropertyInfoExt> property

    Target property

    | - Improve this Doc + Improve this Doc - View Source + View Source

    GetWriteProperties(Type, Nullable<Int32>)

    @@ -1490,10 +1490,10 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source

    IsIncluded(StreamSerializerModes, Int32)

    @@ -1546,10 +1546,10 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source

    MemoryStreamFactory(Object, PropertyInfo, StreamSerializerAttribute, Stream, Int32, CancellationToken)

    @@ -1645,10 +1645,10 @@

    Extension Methods

    diff --git a/docs/manifest.json b/docs/manifest.json index 72462eb..886baec 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -57,7 +57,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html", - "hash": "Sns2y/PQJ++7/g/UqvHTXWxsB8ioCxW6TiRRhaHCbG0=" + "hash": "iqb2GPbwDkIxhrGlQRXekbkSbIaIrJTmhuFCEsCTH2k=" } }, "is_incremental": false, @@ -69,7 +69,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html", - "hash": "Uixq0FAIzkGxkYXHwyNrmqkmYw+pWLrxvStjjwprH3M=" + "hash": "V07afv/pWlD1kFGRIJfwbQUeIiMYeea0wgcGhsWsWyg=" } }, "is_incremental": false, @@ -81,7 +81,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html", - "hash": "hdOic9G+ZdU33/F+HnliYjg4loPDJkzobW6b1/Zz3AA=" + "hash": "lKrEeEHgymfhIs/hQ2Myeoy6NP/83AO2yjNicGkUHck=" } }, "is_incremental": false, @@ -93,7 +93,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html", - "hash": "3T5TSbcM3B/Hzesd2Tbo/MNG8aJP61r2wWRmYLw5O50=" + "hash": "46/RM2odGXLa9VXFdWZZO+GuvmThcvUmSKNBvAdZ4CM=" } }, "is_incremental": false, @@ -105,7 +105,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html", - "hash": "J+Y8rtYUYAJbnex80jqsroxbrq39WHkphJwYhwGy8cU=" + "hash": "gNRzPisPhHeQitoshItJNv0oVHvrGEwO5GR2znxL1WE=" } }, "is_incremental": false, @@ -117,7 +117,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html", - "hash": "jJXnNVZ4ysuffgsGE8JFeSFtKqk4cBZry5Y+f5nBeSc=" + "hash": "ZU7aICTQ7vxXd4JiH9UAl/dAyUrKQP00valeraygoN4=" } }, "is_incremental": false, @@ -285,7 +285,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ISerializerOptions.html", - "hash": "ilRpuXKDFGPsngYh2h1ifnuuYuKSw+yFTy/Gg6PS7Es=" + "hash": "iPspk1MQHhraB7VRlNZlVGi5SmryUIcpg16c704S+bs=" } }, "is_incremental": false, @@ -357,7 +357,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerException.html", - "hash": "QjXgAuU2M22/nVPKrbkxwUBZn4eWZ2MjQ9zYerHn70s=" + "hash": "wx2/t2umrTTQBUNt9QwZtm9YvVer7FtPuiYGpKrZaNM=" } }, "is_incremental": false, @@ -369,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "1zDQMHsge+8xYlyz3s/0mBW9Gf+BXGUL7c6MmSxwuLg=" + "hash": "qvpjeHU2MH1u5D4XKPEPnoSj9l25YGSZBvfW+J/sx+4=" } }, "is_incremental": false, @@ -381,7 +381,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html", - "hash": "y0T7/DVtXkhFFEmQyde17D2U9PFKlShO4eg+/fXWsHE=" + "hash": "b4arXOWMp6EnF5VcKU903H+QEBP5rGvmFFadvoee2As=" } }, "is_incremental": false, @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "vywSgLLABrh8DRk8Sdwi0sNVDQHzoqBx/pv6schnyiY=" + "hash": "8pbBzxVVsTV2gqL0SG6B4E1q//gnqq9hvsJpQRBqokY=" } }, "is_incremental": false, @@ -525,7 +525,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "xh6PtWY/+SQ3Ii4u+VQXT/8J5+3uVPMUwQd9vW+VmV8=" + "hash": "ASuFpeqoa/RPfWFR1yFNrM8GCYZRtB+Ua5SqL37mkXI=" } }, "is_incremental": false, @@ -573,7 +573,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html", - "hash": "hPxOJHk0gapXfxaY4whuPCeKBFK+KihUX0o5Qes/FzM=" + "hash": "bRVZbbW7ch4z7GwFIkBR8f6CF7Ewf9KeAXhGxMpCDRY=" } }, "is_incremental": false, diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index 9701b73..1704606 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -409,13 +409,13 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync nameWithType: AutoStreamSerializerInfo.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,System.Threading.CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,CancellationToken) name: DeserializeAsync(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_DeserializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Int32_System_Threading_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,System.Threading.CancellationToken) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_DeserializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,CancellationToken) name.vb: DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, System.Threading.CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, System.Threading.CancellationToken) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, CancellationToken) nameWithType: AutoStreamSerializerInfo.DeserializeAsync(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) nameWithType.vb: AutoStreamSerializerInfo.DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer @@ -486,13 +486,13 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync nameWithType: AutoStreamSerializerInfo.SerializeAsync -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Threading.CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,CancellationToken) name: SerializeAsync(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_SerializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Threading_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Threading.CancellationToken) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_SerializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,CancellationToken) name.vb: SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Threading.CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Threading.CancellationToken) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, CancellationToken) nameWithType: AutoStreamSerializerInfo.SerializeAsync(IAutoStreamSerializerConfig, T, Stream, CancellationToken) nameWithType.vb: AutoStreamSerializerInfo.SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer @@ -520,12 +520,15 @@ references: commentId: T:wan24.StreamSerializerExtensions.DefaultSerializerOptions fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions nameWithType: DefaultSerializerOptions -- uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name: DefaultSerializerOptions(PropertyInfo, StreamSerializerAttribute) - href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_System_Reflection_PropertyInfo_wan24_StreamSerializerExtensions_StreamSerializerAttribute_ - commentId: M:wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(System.Reflection.PropertyInfo, wan24.StreamSerializerExtensions.StreamSerializerAttribute) - nameWithType: DefaultSerializerOptions.DefaultSerializerOptions(PropertyInfo, StreamSerializerAttribute) +- uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name: DefaultSerializerOptions(Nullable, StreamSerializerAttribute) + href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_StreamSerializerAttribute_ + commentId: M:wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name.vb: DefaultSerializerOptions(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) + fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(System.Nullable, wan24.StreamSerializerExtensions.StreamSerializerAttribute) + fullName.vb: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.StreamSerializerAttribute) + nameWithType: DefaultSerializerOptions.DefaultSerializerOptions(Nullable, StreamSerializerAttribute) + nameWithType.vb: DefaultSerializerOptions.DefaultSerializerOptions(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) - uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor* name: DefaultSerializerOptions href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_ @@ -2120,6 +2123,19 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerException.SerializerException nameWithType: SerializerException.SerializerException +- uid: wan24.StreamSerializerExtensions.SerializerException.From(Exception,System.String) + name: From(Exception, String) + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_From_Exception_System_String_ + commentId: M:wan24.StreamSerializerExtensions.SerializerException.From(Exception,System.String) + fullName: wan24.StreamSerializerExtensions.SerializerException.From(Exception, System.String) + nameWithType: SerializerException.From(Exception, String) +- uid: wan24.StreamSerializerExtensions.SerializerException.From* + name: From + href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_From_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerException.From + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerException.From + nameWithType: SerializerException.From - uid: wan24.StreamSerializerExtensions.SerializerException.Wrap(Action,System.String) name: Wrap(Action, String) href: api/wan24.StreamSerializerExtensions.SerializerException.html#wan24_StreamSerializerExtensions_SerializerException_Wrap_Action_System_String_ @@ -2205,12 +2221,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureValidLength nameWithType: SerializerHelper.EnsureValidLength -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - name: GetKeySerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_System_Reflection_PropertyInfo_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(System.Reflection.PropertyInfo, Stream, System.Int32, CancellationToken) - nameWithType: SerializerHelper.GetKeySerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) + name: GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt, Stream, System.Int32, CancellationToken) + nameWithType: SerializerHelper.GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions* name: GetKeySerializerOptions href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_ @@ -2257,12 +2273,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectSerializerInfo nameWithType: SerializerHelper.GetObjectSerializerInfo -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - name: GetSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_System_Reflection_PropertyInfo_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(System.Reflection.PropertyInfo, Stream, System.Int32, CancellationToken) - nameWithType: SerializerHelper.GetSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) + name: GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt, Stream, System.Int32, CancellationToken) + nameWithType: SerializerHelper.GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions* name: GetSerializerOptions href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_ @@ -2270,12 +2286,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions nameWithType: SerializerHelper.GetSerializerOptions -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - name: GetValueSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_System_Reflection_PropertyInfo_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(System.Reflection.PropertyInfo, Stream, System.Int32, CancellationToken) - nameWithType: SerializerHelper.GetValueSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) + name: GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt, Stream, System.Int32, CancellationToken) + nameWithType: SerializerHelper.GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions* name: GetValueSerializerOptions href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_ @@ -2463,12 +2479,15 @@ references: commentId: T:wan24.StreamSerializerExtensions.SerializerOptionsBase fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase nameWithType: SerializerOptionsBase -- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name: SerializerOptionsBase(PropertyInfo, StreamSerializerAttribute) - href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_System_Reflection_PropertyInfo_wan24_StreamSerializerExtensions_StreamSerializerAttribute_ - commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(System.Reflection.PropertyInfo, wan24.StreamSerializerExtensions.StreamSerializerAttribute) - nameWithType: SerializerOptionsBase.SerializerOptionsBase(PropertyInfo, StreamSerializerAttribute) +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name: SerializerOptionsBase(Nullable, StreamSerializerAttribute) + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_StreamSerializerAttribute_ + commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name.vb: SerializerOptionsBase(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(System.Nullable, wan24.StreamSerializerExtensions.StreamSerializerAttribute) + fullName.vb: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.StreamSerializerAttribute) + nameWithType: SerializerOptionsBase.SerializerOptionsBase(Nullable, StreamSerializerAttribute) + nameWithType.vb: SerializerOptionsBase.SerializerOptionsBase(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) - uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor* name: SerializerOptionsBase href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_ @@ -3429,6 +3448,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) nameWithType: StreamExtensions.ReadEnumNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) nameWithType.vb: StreamExtensions.ReadEnumNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadFixedArray(Stream, Array, Nullable, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray_Stream_Array_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadFixedArray(Stream, Array, Nullable(Of Int32), ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Array, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Array, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadFixedArray(Stream, Array, Nullable, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadFixedArray(Stream, Array, Nullable(Of Int32), ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray* name: ReadFixedArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray_ @@ -3445,6 +3473,24 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Of T)(Stream, T(), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) nameWithType: StreamExtensions.ReadFixedArray(Stream, T[], Nullable, ISerializerOptions) nameWithType.vb: StreamExtensions.ReadFixedArray(Of T)(Stream, T(), Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,Span{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name: ReadFixedArray(Stream, Span, Nullable, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray__1_Stream_Span___0__System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,Span{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: ReadFixedArray(Of T)(Stream, Span(Of T), Nullable(Of Int32), ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Span, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Of T)(Stream, Span(Of T), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamExtensions.ReadFixedArray(Stream, Span, Nullable, ISerializerOptions) + nameWithType.vb: StreamExtensions.ReadFixedArray(Of T)(Stream, Span(Of T), Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadFixedArrayAsync(Stream, Array, Nullable, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync_Stream_Array_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadFixedArrayAsync(Stream, Array, Nullable(Of Int32), ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Array, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Array, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, Array, Nullable, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Stream, Array, Nullable(Of Int32), ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync* name: ReadFixedArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync_ @@ -3461,6 +3507,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, T(), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, T[], Nullable, ISerializerOptions, CancellationToken) nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, T(), Nullable(Of Int32), ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,Memory{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name: ReadFixedArrayAsync(Stream, Memory, Nullable, ISerializerOptions, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync__1_Stream_Memory___0__System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,Memory{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) + name.vb: ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), Nullable(Of Int32), ISerializerOptions, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Memory, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) + nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, Memory, Nullable, ISerializerOptions, CancellationToken) + nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), Nullable(Of Int32), ISerializerOptions, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) name: ReadFloat(Stream, Nullable, ArrayPool) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloat_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ @@ -5429,6 +5484,12 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream,Array) + name: WriteFixedArray(Stream, Array) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray_Stream_Array_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream,Array) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, Array) + nameWithType: StreamExtensions.WriteFixedArray(Stream, Array) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray* name: WriteFixedArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray_ @@ -5436,6 +5497,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray nameWithType: StreamExtensions.WriteFixedArray +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,ReadOnlySpan{``0}) + name: WriteFixedArray(Stream, ReadOnlySpan) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__1_Stream_ReadOnlySpan___0__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,ReadOnlySpan{``0}) + name.vb: WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, ReadOnlySpan) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T)) + nameWithType: StreamExtensions.WriteFixedArray(Stream, ReadOnlySpan) + nameWithType.vb: StreamExtensions.WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,Span{``0}) name: WriteFixedArray(Stream, Span) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__1_Stream_Span___0__ @@ -5445,6 +5515,12 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T)) nameWithType: StreamExtensions.WriteFixedArray(Stream, Span) nameWithType.vb: StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream,Array,CancellationToken) + name: WriteFixedArrayAsync(Stream, Array, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_Stream_Array_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream,Array,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, Array, CancellationToken) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Array, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync* name: WriteFixedArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_ @@ -5461,56 +5537,65 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), CancellationToken) nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Memory, CancellationToken) nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull* - name: WriteIfNull - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNull_ - commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull - isSpec: "True" - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull - nameWithType: StreamExtensions.WriteIfNull -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0) - name: WriteIfNull(Stream, T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNull__1_Stream___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0) - name.vb: WriteIfNull(Of T)(Stream, T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Stream, T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Of T)(Stream, T) - nameWithType: StreamExtensions.WriteIfNull(Stream, T) - nameWithType.vb: StreamExtensions.WriteIfNull(Of T)(Stream, T) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0,Action) - name: WriteIfNull(Stream, T, Action) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNull__1_Stream___0_Action_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull``1(Stream,``0,Action) - name.vb: WriteIfNull(Of T)(Stream, T, Action) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Stream, T, Action) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNull(Of T)(Stream, T, Action) - nameWithType: StreamExtensions.WriteIfNull(Stream, T, Action) - nameWithType.vb: StreamExtensions.WriteIfNull(Of T)(Stream, T, Action) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync* - name: WriteIfNullAsync - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNullAsync_ - commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync - isSpec: "True" - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync - nameWithType: StreamExtensions.WriteIfNullAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,CancellationToken) - name: WriteIfNullAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNullAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,CancellationToken) - name.vb: WriteIfNullAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteIfNullAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,Func{Task},CancellationToken) - name: WriteIfNullAsync(Stream, T, Func, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNullAsync__1_Stream___0_Func_Task__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync``1(Stream,``0,Func{Task},CancellationToken) - name.vb: WriteIfNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Stream, T, Func, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) - nameWithType: StreamExtensions.WriteIfNullAsync(Stream, T, Func, CancellationToken) - nameWithType.vb: StreamExtensions.WriteIfNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,ReadOnlyMemory{``0},CancellationToken) + name: WriteFixedArrayAsync(Stream, ReadOnlyMemory, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Stream_ReadOnlyMemory___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,ReadOnlyMemory{``0},CancellationToken) + name.vb: WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, ReadOnlyMemory, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, ReadOnlyMemory, CancellationToken) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull* + name: WriteIfNotNull + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull + nameWithType: StreamExtensions.WriteIfNotNull +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0) + name: WriteIfNotNull(Stream, T) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull__1_Stream___0_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0) + name.vb: WriteIfNotNull(Of T)(Stream, T) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Stream, T) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Of T)(Stream, T) + nameWithType: StreamExtensions.WriteIfNotNull(Stream, T) + nameWithType.vb: StreamExtensions.WriteIfNotNull(Of T)(Stream, T) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,Action) + name: WriteIfNotNull(Stream, T, Action) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull__1_Stream___0_Action_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,Action) + name.vb: WriteIfNotNull(Of T)(Stream, T, Action) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Stream, T, Action) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Of T)(Stream, T, Action) + nameWithType: StreamExtensions.WriteIfNotNull(Stream, T, Action) + nameWithType.vb: StreamExtensions.WriteIfNotNull(Of T)(Stream, T, Action) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync* + name: WriteIfNotNullAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync + nameWithType: StreamExtensions.WriteIfNotNullAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,CancellationToken) + name: WriteIfNotNullAsync(Stream, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync__1_Stream___0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,CancellationToken) + name.vb: WriteIfNotNullAsync(Of T)(Stream, T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Stream, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, CancellationToken) + nameWithType: StreamExtensions.WriteIfNotNullAsync(Stream, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,Func{Task},CancellationToken) + name: WriteIfNotNullAsync(Stream, T, Func, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync__1_Stream___0_Func_Task__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,Func{Task},CancellationToken) + name.vb: WriteIfNotNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Stream, T, Func, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) + nameWithType: StreamExtensions.WriteIfNotNullAsync(Stream, T, Func, CancellationToken) + nameWithType.vb: StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream,System.Collections.IList) name: WriteList(Stream, IList) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteList_Stream_System_Collections_IList_ @@ -5793,6 +5878,56 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync nameWithType: StreamExtensions.WriteNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64}) + name: WriteNullableCount(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_Stream_System_Nullable_System_Int64__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64}) + name.vb: WriteNullableCount(Stream, Nullable(Of Int64)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable(Of System.Int64)) + nameWithType: StreamExtensions.WriteNullableCount(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteNullableCount(Stream, Nullable(Of Int64)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64},Action) + name: WriteNullableCount(Stream, Nullable, Action) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_Stream_System_Nullable_System_Int64__Action_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64},Action) + name.vb: WriteNullableCount(Stream, Nullable(Of Int64), Action) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable, Action) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable(Of System.Int64), Action) + nameWithType: StreamExtensions.WriteNullableCount(Stream, Nullable, Action) + nameWithType.vb: StreamExtensions.WriteNullableCount(Stream, Nullable(Of Int64), Action) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount* + name: WriteNullableCount + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount + nameWithType: StreamExtensions.WriteNullableCount +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},CancellationToken) + name: WriteNullableCountAsync(Stream, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_Stream_System_Nullable_System_Int64__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},CancellationToken) + name.vb: WriteNullableCountAsync(Stream, Nullable(Of Int64), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable(Of System.Int64), CancellationToken) + nameWithType: StreamExtensions.WriteNullableCountAsync(Stream, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableCountAsync(Stream, Nullable(Of Int64), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},Func{Task},CancellationToken) + name: WriteNullableCountAsync(Stream, Nullable, Func, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_Stream_System_Nullable_System_Int64__Func_Task__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},Func{Task},CancellationToken) + name.vb: WriteNullableCountAsync(Stream, Nullable(Of Int64), Func(Of Task), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable, Func, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable(Of System.Int64), Func(Of Task), CancellationToken) + nameWithType: StreamExtensions.WriteNullableCountAsync(Stream, Nullable, Func, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableCountAsync(Stream, Nullable(Of Int64), Func(Of Task), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync* + name: WriteNullableCountAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync + nameWithType: StreamExtensions.WriteNullableCountAsync - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream,System.Object) name: WriteNumber(Stream, Object) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber_Stream_System_Object_ @@ -5837,22 +5972,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteNumberAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) - name: WriteNumberInt(Stream, Object, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberInt_Stream_System_Object_System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) - name.vb: WriteNumberInt(Stream, Object, Nullable(Of NumberTypes)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream, System.Object, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(Stream, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes)) - nameWithType: StreamExtensions.WriteNumberInt(Stream, Object, Nullable) - nameWithType.vb: StreamExtensions.WriteNumberInt(Stream, Object, Nullable(Of NumberTypes)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt* - name: WriteNumberInt - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberInt_ - commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt - isSpec: "True" - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt - nameWithType: StreamExtensions.WriteNumberInt - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object) name: WriteNumberNullable(Stream, Object) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable_Stream_System_Object_ @@ -5962,6 +6081,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized nameWithType: StreamExtensions.WriteSerialized +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(Stream,``0) + name: WriteSerialized(Stream, T) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized__1_Stream___0_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(Stream,``0) + name.vb: WriteSerialized(Of T)(Stream, T) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream, T) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Of T)(Stream, T) + nameWithType: StreamExtensions.WriteSerialized(Stream, T) + nameWithType.vb: StreamExtensions.WriteSerialized(Of T)(Stream, T) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) name: WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ @@ -5975,6 +6103,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync nameWithType: StreamExtensions.WriteSerializedAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Stream,``0,CancellationToken) + name: WriteSerializedAsync(Stream, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync__1_Stream___0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Stream,``0,CancellationToken) + name.vb: WriteSerializedAsync(Of T)(Stream, T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedAsync(Stream, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte}) name: WriteSerializedData(Stream, Byte[], Int32, ArrayPool) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_Stream_System_Byte___System_Int32_System_Buffers_ArrayPool_System_Byte__ @@ -6020,6 +6157,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable nameWithType: StreamExtensions.WriteSerializedNullable +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(Stream,``0) + name: WriteSerializedNullable(Stream, T) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable__1_Stream___0_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(Stream,``0) + name.vb: WriteSerializedNullable(Of T)(Stream, T) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream, T) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Of T)(Stream, T) + nameWithType: StreamExtensions.WriteSerializedNullable(Stream, T) + nameWithType.vb: StreamExtensions.WriteSerializedNullable(Of T)(Stream, T) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) name: WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ @@ -6033,6 +6179,72 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync nameWithType: StreamExtensions.WriteSerializedNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,``0,CancellationToken) + name: WriteSerializedNullableAsync(Stream, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Stream___0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,``0,CancellationToken) + name.vb: WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) + name: WriteSerializedNullableAsync(Stream, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Stream_System_Nullable___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) + name.vb: WriteSerializedNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct* + name: WriteSerializedNullableStruct + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStruct_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct + nameWithType: StreamExtensions.WriteSerializedNullableStruct +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct``1(Stream,System.Nullable{``0}) + name: WriteSerializedNullableStruct(Stream, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStruct__1_Stream_System_Nullable___0__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct``1(Stream,System.Nullable{``0}) + name.vb: WriteSerializedNullableStruct(Of T)(Stream, Nullable(Of T)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct(Stream, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, System.Nullable(Of T)) + nameWithType: StreamExtensions.WriteSerializedNullableStruct(Stream, Nullable) + nameWithType.vb: StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, Nullable(Of T)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct* + name: WriteSerializedStruct + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStruct_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct + nameWithType: StreamExtensions.WriteSerializedStruct +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct``1(Stream,``0) + name: WriteSerializedStruct(Stream, T) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStruct__1_Stream___0_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct``1(Stream,``0) + name.vb: WriteSerializedStruct(Of T)(Stream, T) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct(Stream, T) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct(Of T)(Stream, T) + nameWithType: StreamExtensions.WriteSerializedStruct(Stream, T) + nameWithType.vb: StreamExtensions.WriteSerializedStruct(Of T)(Stream, T) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync* + name: WriteSerializedStructAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync + nameWithType: StreamExtensions.WriteSerializedStructAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Stream,``0,CancellationToken) + name: WriteSerializedStructAsync(Stream, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync__1_Stream___0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Stream,``0,CancellationToken) + name.vb: WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Stream, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedStructAsync(Stream, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) name: WriteSerializerVersion(Stream) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion_Stream_ @@ -6295,6 +6507,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct nameWithType: StreamExtensions.WriteStruct +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``1(Stream,``0,System.Boolean) + name: WriteStruct(Stream, T, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct__1_Stream___0_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``1(Stream,``0,System.Boolean) + name.vb: WriteStruct(Of T)(Stream, T, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream, T, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Of T)(Stream, T, System.Boolean) + nameWithType: StreamExtensions.WriteStruct(Stream, T, Boolean) + nameWithType.vb: StreamExtensions.WriteStruct(Of T)(Stream, T, Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,System.Boolean,CancellationToken) name: WriteStructAsync(Stream, Object, Boolean, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_Stream_System_Object_System_Boolean_CancellationToken_ @@ -6308,6 +6529,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync nameWithType: StreamExtensions.WriteStructAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Stream,``0,System.Boolean,CancellationToken) + name: WriteStructAsync(Stream, T, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync__1_Stream___0_System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Stream,``0,System.Boolean,CancellationToken) + name.vb: WriteStructAsync(Of T)(Stream, T, Boolean, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream, T, System.Boolean, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of T)(Stream, T, System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructAsync(Stream, T, Boolean, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStructAsync(Of T)(Stream, T, Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,System.Boolean) name: WriteStructNullable(Stream, Object, Boolean) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable_Stream_System_Object_System_Boolean_ @@ -6321,6 +6551,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable nameWithType: StreamExtensions.WriteStructNullable +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``1(Stream,System.Nullable{``0},System.Boolean) + name: WriteStructNullable(Stream, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable__1_Stream_System_Nullable___0__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``1(Stream,System.Nullable{``0},System.Boolean) + name.vb: WriteStructNullable(Of T)(Stream, Nullable(Of T), Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Of T)(Stream, System.Nullable(Of T), System.Boolean) + nameWithType: StreamExtensions.WriteStructNullable(Stream, Nullable, Boolean) + nameWithType.vb: StreamExtensions.WriteStructNullable(Of T)(Stream, Nullable(Of T), Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,System.Boolean,CancellationToken) name: WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_Stream_System_Object_System_Boolean_CancellationToken_ @@ -6334,6 +6573,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync nameWithType: StreamExtensions.WriteStructNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Stream,System.Nullable{``0},System.Boolean,CancellationToken) + name: WriteStructNullableAsync(Stream, Nullable, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync__1_Stream_System_Nullable___0__System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Stream,System.Nullable{``0},System.Boolean,CancellationToken) + name.vb: WriteStructNullableAsync(Of T)(Stream, Nullable(Of T), Boolean, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream, System.Nullable, System.Boolean, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of T)(Stream, System.Nullable(Of T), System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Nullable, Boolean, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of T)(Stream, Nullable(Of T), Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializer name: StreamSerializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -6655,15 +6903,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamSerializerAttribute nameWithType: StreamSerializerAttribute.StreamSerializerAttribute -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Reflection.PropertyInfo) - name: CreateSerializerOptions(Nullable, PropertyInfo) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_System_Nullable_Type__System_Reflection_PropertyInfo_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Reflection.PropertyInfo) - name.vb: CreateSerializerOptions(Nullable(Of Type), PropertyInfo) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable, System.Reflection.PropertyInfo) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable(Of Type), System.Reflection.PropertyInfo) - nameWithType: StreamSerializerAttribute.CreateSerializerOptions(Nullable, PropertyInfo) - nameWithType.vb: StreamSerializerAttribute.CreateSerializerOptions(Nullable(Of Type), PropertyInfo) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Nullable{PropertyInfoExt}) + name: CreateSerializerOptions(Nullable, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_System_Nullable_Type__System_Nullable_PropertyInfoExt__ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Nullable{PropertyInfoExt}) + name.vb: CreateSerializerOptions(Nullable(Of Type), Nullable(Of PropertyInfoExt)) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable(Of Type), System.Nullable(Of PropertyInfoExt)) + nameWithType: StreamSerializerAttribute.CreateSerializerOptions(Nullable, Nullable) + nameWithType.vb: StreamSerializerAttribute.CreateSerializerOptions(Nullable(Of Type), Nullable(Of PropertyInfoExt)) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions* name: CreateSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_ @@ -6684,12 +6932,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.FromVersion nameWithType: StreamSerializerAttribute.FromVersion -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - name: GetKeySerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_System_Reflection_PropertyInfo_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Reflection.PropertyInfo, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetKeySerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) + name: GetKeySerializerOptions(Nullable, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_System_Nullable_PropertyInfoExt__Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) + name.vb: GetKeySerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable, Stream, System.Int32, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable(Of PropertyInfoExt), Stream, System.Int32, CancellationToken) + nameWithType: StreamSerializerAttribute.GetKeySerializerOptions(Nullable, Stream, Int32, CancellationToken) + nameWithType.vb: StreamSerializerAttribute.GetKeySerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions* name: GetKeySerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_ @@ -6697,6 +6948,19 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions nameWithType: StreamSerializerAttribute.GetKeySerializerOptions +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetNumericStructureFields(Type) + name: GetNumericStructureFields(Type) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetNumericStructureFields_Type_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetNumericStructureFields(Type) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetNumericStructureFields(Type) + nameWithType: StreamSerializerAttribute.GetNumericStructureFields(Type) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetNumericStructureFields* + name: GetNumericStructureFields + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetNumericStructureFields_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetNumericStructureFields + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetNumericStructureFields + nameWithType: StreamSerializerAttribute.GetNumericStructureFields - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetReadProperties(Type,System.Nullable{System.Int32}) name: GetReadProperties(Type, Nullable) href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetReadProperties_Type_System_Nullable_System_Int32__ @@ -6713,12 +6977,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetReadProperties nameWithType: StreamSerializerAttribute.GetReadProperties -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - name: GetSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_System_Reflection_PropertyInfo_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Reflection.PropertyInfo, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) + name: GetSerializerOptions(Nullable, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_System_Nullable_PropertyInfoExt__Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) + name.vb: GetSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable, Stream, System.Int32, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable(Of PropertyInfoExt), Stream, System.Int32, CancellationToken) + nameWithType: StreamSerializerAttribute.GetSerializerOptions(Nullable, Stream, Int32, CancellationToken) + nameWithType.vb: StreamSerializerAttribute.GetSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions* name: GetSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_ @@ -6739,19 +7006,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream nameWithType: StreamSerializerAttribute.GetStream -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStructureFields(Type) - name: GetStructureFields(Type) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetStructureFields_Type_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStructureFields(Type) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStructureFields(Type) - nameWithType: StreamSerializerAttribute.GetStructureFields(Type) -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStructureFields* - name: GetStructureFields - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetStructureFields_ - commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStructureFields - isSpec: "True" - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStructureFields - nameWithType: StreamSerializerAttribute.GetStructureFields - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetUseDefaultValue(System.Int32) name: GetUseDefaultValue(Int32) href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetUseDefaultValue_System_Int32_ @@ -6765,12 +7019,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetUseDefaultValue nameWithType: StreamSerializerAttribute.GetUseDefaultValue -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - name: GetValueSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_System_Reflection_PropertyInfo_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Reflection.PropertyInfo, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetValueSerializerOptions(PropertyInfo, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) + name: GetValueSerializerOptions(Nullable, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_System_Nullable_PropertyInfoExt__Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) + name.vb: GetValueSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable, Stream, System.Int32, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable(Of PropertyInfoExt), Stream, System.Int32, CancellationToken) + nameWithType: StreamSerializerAttribute.GetValueSerializerOptions(Nullable, Stream, Int32, CancellationToken) + nameWithType.vb: StreamSerializerAttribute.GetValueSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions* name: GetValueSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_ @@ -6911,6 +7168,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.Mode nameWithType: StreamSerializerAttribute.Mode +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.NumericStructureFields + name: NumericStructureFields + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_NumericStructureFields + commentId: F:wan24.StreamSerializerExtensions.StreamSerializerAttribute.NumericStructureFields + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.NumericStructureFields + nameWithType: StreamSerializerAttribute.NumericStructureFields - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.OptionsType name: OptionsType href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_OptionsType @@ -7040,12 +7303,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactoryType nameWithType: StreamSerializerAttribute.StreamFactoryType -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.StructureFields - name: StructureFields - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_StructureFields - commentId: F:wan24.StreamSerializerExtensions.StreamSerializerAttribute.StructureFields - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.StructureFields - nameWithType: StreamSerializerAttribute.StructureFields - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseDefaultValues name: UseDefaultValues href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_UseDefaultValues diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index 07b6f5a..36c3793 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -51,5 +51,5 @@ {"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs","line":"84","date_time":"2023-06-11T11:43:40.7516458Z","message_severity":"warning","correlation_id":"22F84BDC-D3F4-4A81-AFD4-40AC0B7641A0.1.1.17"} {"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs","line":"73","date_time":"2023-06-11T11:44:51.1935737Z","message_severity":"warning","correlation_id":"44B1E5E9-6F25-4256-AF54-C99B8636032D.1.1.16"} {"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs","line":"84","date_time":"2023-06-11T11:44:51.1975713Z","message_severity":"warning","correlation_id":"44B1E5E9-6F25-4256-AF54-C99B8636032D.1.1.17"} -{"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs","line":"73","date_time":"2023-07-22T17:12:54.2096587Z","message_severity":"warning","correlation_id":"EF0E2159-5DF4-4BED-B7FE-106BF5CDFD59.1.1.16"} -{"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs","line":"84","date_time":"2023-07-22T17:12:54.2206586Z","message_severity":"warning","correlation_id":"EF0E2159-5DF4-4BED-B7FE-106BF5CDFD59.1.1.17"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-24T09:12:24.730424Z","message_severity":"warning","correlation_id":"AB2A3ED5-0256-4B54-A82D-22AE5DAFAB60.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-24T09:12:24.7414575Z","message_severity":"warning","correlation_id":"AB2A3ED5-0256-4B54-A82D-22AE5DAFAB60.1.1.13"} diff --git a/src/Stream-Serializer-Extensions.sln b/src/Stream-Serializer-Extensions.sln index 4b1999d..8743947 100644 --- a/src/Stream-Serializer-Extensions.sln +++ b/src/Stream-Serializer-Extensions.sln @@ -43,13 +43,11 @@ Global {F8293296-B214-4304-B87A-D954AD821BC8}.Release|Any CPU.ActiveCfg = Release|Any CPU {F8293296-B214-4304-B87A-D954AD821BC8}.Release|Any CPU.Build.0 = Release|Any CPU {F8293296-B214-4304-B87A-D954AD821BC8}.Trunk|Any CPU.ActiveCfg = Debug|Any CPU - {F8293296-B214-4304-B87A-D954AD821BC8}.Trunk|Any CPU.Build.0 = Debug|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Release|Any CPU.Build.0 = Release|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Trunk|Any CPU.ActiveCfg = Debug|Any CPU - {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Trunk|Any CPU.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs index 66e3241..d06bf25 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs @@ -1,5 +1,4 @@ -using System.Threading; -using wan24.Core; +using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -126,7 +125,7 @@ public void Deserialize(IAutoStreamSerializerConfig config, T obj, Stream str { if (Deserializer == null) { - ISerializerOptions? options = Property.Property.GetSerializerOptions(stream, version, default); + ISerializerOptions? options = Property.GetSerializerOptions(stream, version, default); Property.Setter!(obj, IsNullable ? stream.ReadObjectNullable(Property.Property.PropertyType, version, options) : stream.ReadObject(Property.Property.PropertyType, version, options)); @@ -151,7 +150,7 @@ public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, { if (AsyncDeserializer == null) { - ISerializerOptions? options = Property.Property.GetSerializerOptions(stream, version, cancellationToken); + ISerializerOptions? options = Property.GetSerializerOptions(stream, version, cancellationToken); Property.Setter!(obj, IsNullable ? await stream.ReadObjectNullableAsync(Property.Property.PropertyType, version, options, cancellationToken).DynamicContext() : await stream.ReadObjectAsync(Property.Property.PropertyType, version, options, cancellationToken).DynamicContext()); diff --git a/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs b/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs index 1409a59..332b3c2 100644 --- a/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs +++ b/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -12,6 +12,6 @@ public class DefaultSerializerOptions : SerializerOptionsBase ///
    /// Target property /// Stream serializer attribute (required, if property is ) - public DefaultSerializerOptions(PropertyInfo? property, StreamSerializerAttribute? attr = null) : base(property, attr) { } + public DefaultSerializerOptions(PropertyInfoExt? property, StreamSerializerAttribute? attr = null) : base(property, attr) { } } } diff --git a/src/Stream-Serializer-Extensions/ISerializerOptions.cs b/src/Stream-Serializer-Extensions/ISerializerOptions.cs index 5c479bd..7da4db9 100644 --- a/src/Stream-Serializer-Extensions/ISerializerOptions.cs +++ b/src/Stream-Serializer-Extensions/ISerializerOptions.cs @@ -1,4 +1,4 @@ -using System.Reflection; +using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -10,7 +10,7 @@ public interface ISerializerOptions /// /// Target property /// - PropertyInfo? Property { get; } + PropertyInfoExt? Property { get; } /// /// Stream serializer attribute /// diff --git a/src/Stream-Serializer-Extensions/SerializerException.cs b/src/Stream-Serializer-Extensions/SerializerException.cs index 498c5f6..428e552 100644 --- a/src/Stream-Serializer-Extensions/SerializerException.cs +++ b/src/Stream-Serializer-Extensions/SerializerException.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -32,6 +33,9 @@ public SerializerException(string? message, Exception inner) : base(message, inn /// Action /// Message [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static void Wrap(Action action, string? message = null) { try @@ -42,9 +46,9 @@ public static void Wrap(Action action, string? message = null) { throw; } - catch(Exception ex) + catch (Exception ex) { - throw new SerializerException(message ?? ex.Message, ex); + throw From(ex, message); } } @@ -55,6 +59,9 @@ public static void Wrap(Action action, string? message = null) /// Function /// Message [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T Wrap(Func func, string? message = null) { try @@ -67,7 +74,7 @@ public static T Wrap(Func func, string? message = null) } catch (Exception ex) { - throw new SerializerException(message ?? ex.Message, ex); + throw From(ex, message); } } @@ -77,6 +84,9 @@ public static T Wrap(Func func, string? message = null) /// Action /// Message [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task WrapAsync(Func action, string? message = null) { try @@ -89,7 +99,7 @@ public static async Task WrapAsync(Func action, string? message = null) } catch (Exception ex) { - throw new SerializerException(message ?? ex.Message, ex); + throw From(ex, message); } } @@ -100,6 +110,9 @@ public static async Task WrapAsync(Func action, string? message = null) /// Function /// Message [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task WrapAsync(Func> func, string? message = null) { try @@ -112,8 +125,18 @@ public static async Task WrapAsync(Func> func, string? message = n } catch (Exception ex) { - throw new SerializerException(message ?? ex.Message, ex); + throw From(ex, message); } } + + /// + /// Create a from an + /// + /// + /// Individual message + /// (may be the ex, if it's a already!) + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static SerializerException From(Exception ex, string? message = null) => ex as SerializerException ?? new(message ?? ex.Message, ex); } } diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index eb2f10b..81011b5 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -1,7 +1,7 @@ using System.Collections; using System.ComponentModel.DataAnnotations; -using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; using wan24.ObjectValidation; @@ -18,6 +18,7 @@ public static class SerializerHelper /// Type /// Type without flags [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static NumberTypes RemoveFlags(this NumberTypes type) => type & ~NumberTypes.FLAGS; /// @@ -26,6 +27,7 @@ public static class SerializerHelper /// Type /// Type without value flags [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static NumberTypes RemoveValueFlags(this NumberTypes type) => type & ~NumberTypes.VALUE_FLAGS; /// @@ -34,6 +36,7 @@ public static class SerializerHelper /// Type /// Unsigned? [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsUnsigned(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.Unsigned); /// @@ -42,6 +45,7 @@ public static class SerializerHelper /// Type /// Min.value? [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsMinValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MinValue); /// @@ -50,6 +54,7 @@ public static class SerializerHelper /// Type /// Max. value? [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsMaxValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MaxValue); /// @@ -58,6 +63,7 @@ public static class SerializerHelper /// Type /// Zero? [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsZero(this NumberTypes type) => type == NumberTypes.Zero; /// @@ -66,6 +72,7 @@ public static class SerializerHelper /// Type /// Has value flags? [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool HasValueFlags(this NumberTypes type) => (type & NumberTypes.VALUE_FLAGS) != 0; /// @@ -74,6 +81,7 @@ public static class SerializerHelper /// Type /// Type without flags [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ObjectTypes RemoveFlags(this ObjectTypes type) => type & ~ObjectTypes.FLAGS; /// @@ -82,6 +90,7 @@ public static class SerializerHelper /// Type /// Empty? [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsEmpty(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Empty); /// @@ -90,6 +99,7 @@ public static class SerializerHelper /// Type /// Unsigned? [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsUnsigned(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Unsigned); /// @@ -98,6 +108,9 @@ public static class SerializerHelper /// Type /// A number? [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static bool IsNumber(this ObjectTypes type) => type.RemoveFlags() switch { ObjectTypes.Short => true, @@ -510,7 +523,8 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje /// Value /// Non-null value [TargetedPatchingOptOut("Tiny method")] - public static object EnsureNotNull(object? value) => value ?? throw new ArgumentNullException(nameof(value)); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static object EnsureNotNull(object? value) => value ?? throw new SerializerException($"Argument {nameof(value)} is NULL", new ArgumentNullException(nameof(value))); /// /// Ensure a valid length @@ -520,9 +534,10 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje /// Maximum value /// Length [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int EnsureValidLength(int len, int min = 0, int max = int.MaxValue) { - if (len < min || len > max) throw new InvalidDataException($"Invalid length {len}"); + if (len < min || len > max) throw new SerializerException($"Invalid length {len}", new InvalidDataException()); return len; } @@ -534,9 +549,10 @@ public static int EnsureValidLength(int len, int min = 0, int max = int.MaxValue /// Maximum value /// Length [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static long EnsureValidLength(long len, long min = 0, long max = long.MaxValue) { - if (len < min || len > max) throw new InvalidDataException($"Invalid length {len}"); + if (len < min || len > max) throw new SerializerException($"Invalid length {len}", new InvalidDataException()); return len; } @@ -548,6 +564,9 @@ public static long EnsureValidLength(long len, long min = 0, long max = long.Max /// Value /// If the validation failed [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T ValidateDeserializedObject(this T value) where T : notnull { if (!value.TryValidateObject(out List results)) @@ -565,6 +584,9 @@ public static T ValidateDeserializedObject(this T value) where T : notnull /// Include the serializer version number? /// Bytes [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerVersion = true) { using MemoryStream ms = new(); @@ -581,6 +603,9 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV /// Serializer version number included? /// Object [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T ToObject(this byte[] bytes, bool includesSerializerVersion = true) where T : class, IStreamSerializer, new() { using MemoryStream ms = new(bytes); @@ -598,8 +623,9 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV /// Cancellation token /// Serializer options [TargetedPatchingOptOut("Tiny method")] - public static ISerializerOptions? GetSerializerOptions(this PropertyInfo pi, Stream stream, int version, CancellationToken cancellationToken) - => pi.GetCustomAttribute()?.GetSerializerOptions(pi, stream, version, cancellationToken); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ISerializerOptions? GetSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken) + => pi.GetCustomAttributeCached()?.GetSerializerOptions(pi, stream, version, cancellationToken); /// /// Get the key serializer options @@ -610,8 +636,9 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV /// Cancellation token /// Serializer options [TargetedPatchingOptOut("Tiny method")] - public static ISerializerOptions? GetKeySerializerOptions(this PropertyInfo pi, Stream stream, int version, CancellationToken cancellationToken) - => pi.GetCustomAttribute()?.GetKeySerializerOptions(pi, stream, version, cancellationToken); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ISerializerOptions? GetKeySerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken) + => pi.GetCustomAttributeCached()?.GetKeySerializerOptions(pi, stream, version, cancellationToken); /// /// Get the value serializer options @@ -622,7 +649,8 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV /// Cancellation token /// Serializer options [TargetedPatchingOptOut("Tiny method")] - public static ISerializerOptions? GetValueSerializerOptions(this PropertyInfo pi, Stream stream, int version, CancellationToken cancellationToken) - => pi.GetCustomAttribute()?.GetValueSerializerOptions(pi, stream, version, cancellationToken); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ISerializerOptions? GetValueSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken) + => pi.GetCustomAttributeCached()?.GetValueSerializerOptions(pi, stream, version, cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs index 02238a7..51e1e17 100644 --- a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs +++ b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs @@ -1,5 +1,4 @@ using System.ComponentModel.DataAnnotations; -using System.Reflection; using wan24.Core; using wan24.ObjectValidation; @@ -15,16 +14,16 @@ public abstract class SerializerOptionsBase : ISerializerOptions /// /// Target property /// Stream serializer attribute (required, if property is ) - protected SerializerOptionsBase(PropertyInfo? property, StreamSerializerAttribute? attr = null) : base() + protected SerializerOptionsBase(PropertyInfoExt? property, StreamSerializerAttribute? attr = null) : base() { Property = property; Attribute = attr ?? - property?.GetCustomAttributeCached() ?? + property?.Property.GetCustomAttributeCached() ?? throw (property == null ? new ArgumentNullException(nameof(attr)) : new ArgumentException($"{typeof(StreamSerializerAttribute)} attribute required", nameof(property))); } /// - public PropertyInfo? Property { get; } + public PropertyInfoExt? Property { get; } /// public StreamSerializerAttribute Attribute { get; } diff --git a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj index 4ad6b73..0dc2a18 100644 --- a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj +++ b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj @@ -27,9 +27,13 @@ Debug;Release;Trunk + + False + + - + diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs index ee12d56..4e93b96 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs @@ -18,6 +18,7 @@ public static partial class StreamExtensions /// Serializer version /// Enumerable [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Enumerate(this Stream stream, int? version = null) where tEnumerator : StreamEnumeratorBase => StreamEnumeratorBase.Enumerate(stream, version); @@ -31,6 +32,9 @@ public static IEnumerable Enumerate(this Stream s /// Serializer version /// Cancellation token /// Enumerable +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async IAsyncEnumerable EnumerateAsync( this Stream stream, int? version = null, @@ -53,6 +57,7 @@ public static async IAsyncEnumerable EnumerateAsyncVersion /// Enumerable [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable EnumerateSerialized(this Stream stream, int? version = null) where T : class, IStreamSerializer => StreamEnumeratorBase.Enumerate>(stream, version); @@ -65,6 +70,9 @@ public static IEnumerable EnumerateSerialized(this Stream stream, int? ver /// Version /// Cancellation token /// Enumerable +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async IAsyncEnumerable EnumerateSerializedAsync(this Stream stream, int? version = null, [EnumeratorCancellation] CancellationToken cancellationToken = default) where T : class, IStreamSerializer { @@ -83,6 +91,9 @@ public static async IAsyncEnumerable EnumerateSerializedAsync(this Stream /// Version /// Array pool /// Enumerable +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static IEnumerable EnumerateNumber(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible { @@ -99,6 +110,9 @@ public static IEnumerable EnumerateNumber(this Stream stream, int? version /// Array pool /// Cancellation token /// Enumerable +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async IAsyncEnumerable EnumerateNumberAsync( this Stream stream, int? version = null, @@ -122,6 +136,9 @@ public static async IAsyncEnumerable EnumerateNumberAsync( /// Minimum UTF-8 string bytes length /// Maximum UTF-8 string bytes length /// Enumerable +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static IEnumerable EnumerateString(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) { using StreamStringEnumerator enumerator = new(stream, version, pool, minLen, maxLen); @@ -138,6 +155,9 @@ public static IEnumerable EnumerateString(this Stream stream, int? versi /// Maximum UTF-8 string bytes length /// Cancellation token /// Enumerable +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async IAsyncEnumerable EnumerateStringAsync( this Stream stream, int? version = null, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs index 719c539..00b6fd5 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs @@ -1,4 +1,6 @@ -using wan24.Core; +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -12,21 +14,12 @@ public static partial class StreamExtensions /// Serializer version /// Options /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions? options = null) - => SerializerException.Wrap(() => - { - ObjectTypes objType; - byte[] data = ReadSerializedData(stream, len: 1); - try - { - objType = (ObjectTypes)data[0]; - } - finally - { - StreamSerializer.BufferPool.Return(data); - } - return ReadAnyInt(stream, version, objType, options); - }); + => ReadAnyInt(stream, version, (ObjectTypes)ReadOneByte(stream, version), options); /// /// Read any object @@ -36,6 +29,9 @@ public static object ReadAny(this Stream stream, int? version = null, ISerialize /// Object type /// Options /// Object +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objType, ISerializerOptions? options) => SerializerException.Wrap(() => { @@ -143,7 +139,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp case ObjectTypes.Stream: Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), - FileMode.OpenOrCreate, + FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, bufferSize: Settings.BufferSize, @@ -172,21 +168,13 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp /// Options /// Cancellation token /// Object - public static Task ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - ObjectTypes objType; - byte[] data = await ReadSerializedDataAsync(stream, len: 1, cancellationToken: cancellationToken).DynamicContext(); - try - { - objType = (ObjectTypes)data[0]; - } - finally - { - StreamSerializer.BufferPool.Return(data); - } - return await ReadAnyIntAsync(stream, version, objType, options, cancellationToken).DynamicContext(); - }); + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) + => await ReadAnyIntAsync(stream, version, (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(), options, cancellationToken) + .DynamicContext(); /// /// Read any object @@ -197,6 +185,9 @@ public static Task ReadAnyAsync(this Stream stream, int? version = null, /// Options /// Cancellation token /// Object +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectTypes objType, ISerializerOptions? options, CancellationToken cancellationToken) => SerializerException.WrapAsync(async () => { @@ -313,7 +304,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT case ObjectTypes.Stream: Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), - FileMode.OpenOrCreate, + FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, bufferSize: Settings.BufferSize, @@ -350,21 +341,15 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT /// Serializer version /// Options /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static object? ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) - => SerializerException.Wrap(() => - { - ObjectTypes objType; - byte[] data = ReadSerializedData(stream, len: 1); - try - { - objType = (ObjectTypes)data[0]; - } - finally - { - StreamSerializer.BufferPool.Return(data); - } - return objType == ObjectTypes.Null ? null : ReadAnyInt(stream, version, objType, options); - }); + { + ObjectTypes objType = (ObjectTypes)ReadOneByte(stream, version); + return objType == ObjectTypes.Null ? null : ReadAnyInt(stream, version, objType, options); + } /// /// Read any object @@ -374,25 +359,19 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT /// Options /// Cancellation token /// Object - public static Task ReadAnyNullableAsync( - this Stream stream, - int? version = null, - ISerializerOptions? options = null, + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadAnyNullableAsync( + this Stream stream, + int? version = null, + ISerializerOptions? options = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - ObjectTypes objType; - byte[] data = await ReadSerializedDataAsync(stream, len: 1, cancellationToken: cancellationToken).DynamicContext(); - try - { - objType = (ObjectTypes)data[0]; - } - finally - { - StreamSerializer.BufferPool.Return(data); - } - return objType == ObjectTypes.Null ? null : await ReadAnyIntAsync(stream, version, objType, options, cancellationToken).DynamicContext(); - }); + { + ObjectTypes objType = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + return objType == ObjectTypes.Null ? null : await ReadAnyIntAsync(stream, version, objType, options, cancellationToken).DynamicContext(); + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs index 6b89bb8..f4be7c3 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs @@ -1,5 +1,6 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -16,8 +17,12 @@ public static partial class StreamExtensions /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T[] ReadArray( this Stream stream, int? version = null, @@ -26,15 +31,14 @@ public static T[] ReadArray( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => SerializerException.Wrap(() => - { - if (typeof(T) == typeof(byte)) return (ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value as T[])!; - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - T[] res = new T[len]; - for (int i = 0; i < len; res[i] = ReadObject(stream, version, valueOptions), i++) ; - return res; - }); + { + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) return Array.Empty(); + T[] res = new T[len]; + for (int i = 0; i < len; res[i] = ReadObject(stream, version, valueOptions), i++) ; + return res; + } /// /// Read @@ -45,8 +49,12 @@ public static T[] ReadArray( /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Array ReadArray( this Stream stream, Type type, @@ -56,17 +64,15 @@ public static Array ReadArray( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => SerializerException.Wrap(() => - { - if (type.GetElementType() == typeof(byte)) return ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value; - ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type"); - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Type elementType = type.GetElementType()!; - Array res = Array.CreateInstance(elementType, len); - for (int i = 0; i < len; res.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; - return res; - }); + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type")); + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type elementType = type.GetElementType()!; + Array res = Array.CreateInstance(elementType, len); + for (int i = 0; i < len; res.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; + return res; + } /// /// Read @@ -77,10 +83,14 @@ public static Array ReadArray( /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Cancellation token /// Value - public static Task ReadArrayAsync( + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadArrayAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -89,16 +99,14 @@ public static Task ReadArrayAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - if (typeof(T) == typeof(byte)) - return (await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!; - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - T[] res = new T[len]; - for (int i = 0; i < len; res[i] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(), i++) ; - return res; - }); + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) return Array.Empty(); + T[] res = new T[len]; + for (int i = 0; i < len; res[i] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(), i++) ; + return res; + } /// /// Read @@ -109,10 +117,14 @@ public static Task ReadArrayAsync( /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Cancellation token /// Value - public static Task ReadArrayAsync( + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadArrayAsync( this Stream stream, Type type, int? version = null, @@ -122,18 +134,15 @@ public static Task ReadArrayAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - if (type.GetElementType() == typeof(byte)) - return (await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext()).Value; - ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type"); - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Type elementType = type.GetElementType()!; - Array res = Array.CreateInstance(elementType, len); - for (int i = 0; i < len; res.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++) ; - return res; - }); + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type")); + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type elementType = type.GetElementType()!; + Array res = Array.CreateInstance(elementType, len); + for (int i = 0; i < len; res.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++) ; + return res; + } /// /// Read @@ -144,9 +153,12 @@ public static Task ReadArrayAsync( /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T[]? ReadArrayNullable( this Stream stream, int? version = null, @@ -155,7 +167,25 @@ public static Task ReadArrayAsync( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => ReadBool(stream, version, pool) ? ReadArray(stream, version, pool, minLen, maxLen, valueOptions) : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, version, pool) ? ReadArray(stream, version, pool, minLen, maxLen, valueOptions) : null; + } + default: + { + int? len = ReadNumberNullable(stream, version, pool); + if (len == null) return null; + if (len < 1) return Array.Empty(); + T[] res = new T[SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)]; + ReadFixedArray(stream, res.AsSpan(), version, valueOptions); + return res; + } + } + } /// /// Read @@ -166,9 +196,12 @@ public static Task ReadArrayAsync( /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Array? ReadArrayNullable( this Stream stream, Type type, @@ -178,7 +211,29 @@ public static Task ReadArrayAsync( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => ReadBool(stream, version, pool) ? ReadArray(stream, type, version, pool, minLen, maxLen, valueOptions) : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, version, pool) ? ReadArray(stream, type, version, pool, minLen, maxLen, valueOptions) : null; + } + default: + { + int? len = ReadNumberNullable(stream, version, pool); + if (len == null) return null; + return len < 1 + ? Array.CreateInstance(type.GetElementType()!, length: 0) + : ReadFixedArray( + stream, + Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)), + version, + valueOptions + ); + } + } + } /// /// Read @@ -189,10 +244,13 @@ public static Task ReadArrayAsync( /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadArrayNullableAsync( this Stream stream, int? version = null, @@ -202,9 +260,27 @@ public static Task ReadArrayAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadArrayAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadArrayAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + : null; + } + default: + { + int? len = await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == null) return null; + if (len < 1) return Array.Empty(); + T[] res = new T[SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)]; + await ReadFixedArrayAsync(stream, res.AsMemory(), version, valueOptions, cancellationToken).DynamicContext(); + return res; + } + } + } /// /// Read @@ -215,10 +291,13 @@ public static Task ReadArrayAsync( /// Array pool /// Minimum length /// Maximum length - /// Value serializer options + /// Value deserializer options /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadArrayNullableAsync( this Stream stream, Type type, @@ -229,9 +308,32 @@ public static Task ReadArrayAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadArrayAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadArrayAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + : null; + } + default: + { + int? len = await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == null) return null; + return len < 1 + ? Array.CreateInstance(type.GetElementType()!, length: 0) + : await ReadFixedArrayAsync( + stream, + Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)), + version, + valueOptions, + cancellationToken + ).DynamicContext(); + } + } + } /// /// Read @@ -240,14 +342,64 @@ public static Task ReadArrayAsync( /// Stream /// Array /// Serializer version - /// Value serializer options + /// Value deserializer options /// Value + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static T[] ReadFixedArray(this Stream stream, T[] arr, int? version = null, ISerializerOptions? valueOptions = null) - => SerializerException.Wrap(() => + { + ReadFixedArray(stream, arr.AsSpan(), version, valueOptions); + return arr; + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Span ReadFixedArray(this Stream stream, Span arr, int? version = null, ISerializerOptions? valueOptions = null) + { + try { - for (int i = 0; i < arr.Length; arr[i] = ReadObject(stream, version, valueOptions), i++) ; + for (int i = 0, len = arr.Length; i < len; arr[i] = ReadObject(stream, version, valueOptions), i++) ; return arr; - }); + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw SerializerException.From(ex); + } + } + + /// + /// Read + /// + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Array ReadFixedArray(this Stream stream, Array arr, int? version = null, ISerializerOptions? valueOptions = null) + { + Type elementType = arr.GetType().GetElementType()!; + for (int i = 0, len = arr.Length; i < len; arr.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; + return arr; + } /// /// Read @@ -256,20 +408,78 @@ public static T[] ReadFixedArray(this Stream stream, T[] arr, int? version = /// Stream /// Array /// Serializer version - /// Value serializer options + /// Value deserializer options /// Cancellation token /// Value - public static Task ReadFixedArrayAsync( + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadFixedArrayAsync( this Stream stream, T[] arr, int? version = null, ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => + { + await ReadFixedArrayAsync(stream, arr.AsMemory(), version, valueOptions, cancellationToken).DynamicContext(); + return arr; + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task> ReadFixedArrayAsync( + this Stream stream, + Memory arr, + int? version = null, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + { + T item; + for (int i = 0, len = arr.Length; i < len; i++) { - for (int i = 0; i < arr.Length; arr[i] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(), i++) ; - return arr; - }); + item = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); + arr.Span[i] = item; + } + return arr; + } + + /// + /// Read + /// + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadFixedArrayAsync( + this Stream stream, + Array arr, + int? version = null, + ISerializerOptions? valueOptions = null, + CancellationToken cancellationToken = default + ) + { + Type elementType = arr.GetType().GetElementType()!; + for (int i = 0, len = arr.Length; i < len; arr.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++) ; + return arr; + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs index a5384ff..eac3f33 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs @@ -1,7 +1,10 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; +//TODO Use Predicate? + namespace wan24.StreamSerializerExtensions { // Basic @@ -14,7 +17,6 @@ public static partial class StreamExtensions /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static bool ReadBool(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(bool), version, pool, (data) => data[0] == 1); @@ -26,7 +28,6 @@ public static bool ReadBool(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadBoolAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(bool), version, pool, (data) => data[0] == 1, cancellationToken); @@ -38,22 +39,29 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, /// Array pool /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool? pool = null) { - switch (version ??= StreamSerializer.VERSION) + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: case 2: - return ReadBool(stream, version, pool) ? ReadBool(stream, version, pool) : null; + { + return ReadBool(stream, version, pool) ? ReadBool(stream, version, pool) : null; + } default: - ObjectTypes type = (ObjectTypes)ReadOneByte(stream, version); - return type switch { - ObjectTypes.Null => null, - ObjectTypes.Bool => true, - ObjectTypes.Empty => false, - _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) - }; + ObjectTypes type = (ObjectTypes)ReadOneByte(stream, version); + return type switch + { + ObjectTypes.Null => null, + ObjectTypes.Bool => true, + ObjectTypes.Empty => false, + _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) + }; + } } } @@ -66,24 +74,31 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadBoolNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) { - switch (version ??= StreamSerializer.VERSION) + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: case 2: - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - : null; + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + : null; + } default: - ObjectTypes type = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return type switch { - ObjectTypes.Null => null, - ObjectTypes.Bool => true, - ObjectTypes.Empty => false, - _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) - }; + ObjectTypes type = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + return type switch + { + ObjectTypes.Null => null, + ObjectTypes.Bool => true, + ObjectTypes.Empty => false, + _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) + }; + } } } @@ -94,8 +109,8 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, /// Serializer version /// Value [TargetedPatchingOptOut("Tiny method")] - public static sbyte ReadOneSByte(this Stream stream, int? version = null) - => (sbyte)ReadOneByte(stream, version); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static sbyte ReadOneSByte(this Stream stream, int? version = null) => (sbyte)ReadOneByte(stream, version); /// /// Read @@ -106,6 +121,7 @@ public static sbyte ReadOneSByte(this Stream stream, int? version = null) /// Value #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) #pragma warning restore IDE0060 // Remove unused parameter => Task.FromResult(ReadOneSByte(stream, version)); @@ -116,7 +132,6 @@ public static Task ReadOneSByteAsync(this Stream stream, int? version = n /// Stream /// Serializer version /// Value - [TargetedPatchingOptOut("Tiny method")] public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null) => ReadNullableNumeric(stream, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, version, pool: null, (data) => (sbyte)data[0]); @@ -127,9 +142,8 @@ public static Task ReadOneSByteAsync(this Stream stream, int? version = n /// Serializer version /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, version, pool: null, (data) => Task.FromResult((sbyte)data[0]), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, version, pool: null, (data) => (sbyte)data[0], cancellationToken); /// /// Read @@ -139,12 +153,15 @@ public static Task ReadOneSByteAsync(this Stream stream, int? version = n /// Value #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static byte ReadOneByte(this Stream stream, int? version = null) #pragma warning restore IDE0060 // Remove unused parameter => SerializerException.Wrap(() => { int res = stream.ReadByte(); - if (res < 0) throw new SerializerException("Failed to read one byte from stream"); + if (res < 0) throw new IOException("Failed to read one byte from stream"); return (byte)res; }); @@ -157,6 +174,7 @@ public static byte ReadOneByte(this Stream stream, int? version = null) /// Value #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) #pragma warning restore IDE0060 // Remove unused parameter => Task.FromResult(ReadOneByte(stream, version)); @@ -167,7 +185,6 @@ public static Task ReadOneByteAsync(this Stream stream, int? version = nul /// Stream /// Serializer version /// Value - [TargetedPatchingOptOut("Tiny method")] public static ushort? ReadOneByteNullable(this Stream stream, int? version = null) => ReadNullableNumeric(stream, sizeof(byte), byte.MinValue, byte.MaxValue, version, pool: null, (data) => data[0]); @@ -178,9 +195,8 @@ public static Task ReadOneByteAsync(this Stream stream, int? version = nul /// Serializer version /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(byte), byte.MinValue, byte.MaxValue, version, pool: null, (data) => Task.FromResult(data[0]), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(byte), byte.MinValue, byte.MaxValue, version, pool: null, (data) => data[0], cancellationToken); /// /// Read @@ -189,7 +205,6 @@ public static Task ReadOneByteAsync(this Stream stream, int? version = nul /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static short ReadShort(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(short), version, pool, (data) => data.AsSpan().ToShort()); @@ -201,7 +216,6 @@ public static short ReadShort(this Stream stream, int? version = null, ArrayPool /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(short), version, pool, (data) => data.AsSpan().ToShort(), cancellationToken); @@ -212,7 +226,6 @@ public static Task ReadShortAsync(this Stream stream, int? version = null /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(short), short.MinValue, short.MaxValue, version, pool, (data) => data.AsSpan().ToShort()); @@ -224,9 +237,8 @@ public static Task ReadShortAsync(this Stream stream, int? version = null /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(short), short.MinValue, short.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToShort()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(short), short.MinValue, short.MaxValue, version, pool, (data) => data.AsSpan().ToShort(), cancellationToken); /// /// Read @@ -235,7 +247,6 @@ public static Task ReadShortAsync(this Stream stream, int? version = null /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(ushort), version, pool, (data) => data.AsSpan().ToUShort()); @@ -247,7 +258,6 @@ public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPo /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadUShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(ushort), version, pool, (data) => data.AsSpan().ToUShort(), cancellationToken); @@ -258,7 +268,6 @@ public static Task ReadUShortAsync(this Stream stream, int? version = nu /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(ushort), ushort.MinValue, ushort.MaxValue, version, pool, (data) => data.AsSpan().ToUShort()); @@ -270,9 +279,8 @@ public static Task ReadUShortAsync(this Stream stream, int? version = nu /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(ushort), ushort.MinValue, ushort.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToUShort()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(ushort), ushort.MinValue, ushort.MaxValue, version, pool, (data) => data.AsSpan().ToUShort(), cancellationToken); /// /// Read @@ -281,7 +289,6 @@ public static Task ReadUShortAsync(this Stream stream, int? version = nu /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static int ReadInt(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(int), version, pool, (data) => data.AsSpan().ToInt()); @@ -293,7 +300,6 @@ public static int ReadInt(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(int), version, pool, (data) => data.AsSpan().ToInt(), cancellationToken); @@ -304,7 +310,6 @@ public static Task ReadIntAsync(this Stream stream, int? version = null, Ar /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(int), int.MinValue, int.MaxValue, version, pool, (data) => data.AsSpan().ToInt()); @@ -316,9 +321,8 @@ public static Task ReadIntAsync(this Stream stream, int? version = null, Ar /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(int), int.MinValue, int.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToInt()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(int), int.MinValue, int.MaxValue, version, pool, (data) => data.AsSpan().ToInt(), cancellationToken); /// /// Read @@ -327,7 +331,6 @@ public static Task ReadIntAsync(this Stream stream, int? version = null, Ar /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(uint), version, pool, (data) => data.AsSpan().ToUInt()); @@ -339,7 +342,6 @@ public static uint ReadUInt(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadUIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(uint), version, pool, (data) => data.AsSpan().ToUInt(), cancellationToken); @@ -350,7 +352,6 @@ public static Task ReadUIntAsync(this Stream stream, int? version = null, /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(uint), uint.MinValue, uint.MaxValue, version, pool, (data) => data.AsSpan().ToUInt()); @@ -362,9 +363,8 @@ public static Task ReadUIntAsync(this Stream stream, int? version = null, /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(uint), uint.MinValue, uint.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToUInt()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(uint), uint.MinValue, uint.MaxValue, version, pool, (data) => data.AsSpan().ToUInt(), cancellationToken); /// /// Read @@ -373,7 +373,6 @@ public static Task ReadUIntAsync(this Stream stream, int? version = null, /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static long ReadLong(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(long), version, pool, (data) => data.AsSpan().ToLong()); @@ -385,7 +384,6 @@ public static long ReadLong(this Stream stream, int? version = null, ArrayPoolArray pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadLongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(long), version, pool, (data) => data.AsSpan().ToLong(), cancellationToken); @@ -396,7 +394,6 @@ public static Task ReadLongAsync(this Stream stream, int? version = null, /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(long), long.MinValue, long.MaxValue, version, pool, (data) => data.AsSpan().ToLong()); @@ -408,9 +405,8 @@ public static Task ReadLongAsync(this Stream stream, int? version = null, /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(long), long.MinValue, long.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToLong()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(long), long.MinValue, long.MaxValue, version, pool, (data) => data.AsSpan().ToLong(), cancellationToken); /// /// Read @@ -419,7 +415,6 @@ public static Task ReadLongAsync(this Stream stream, int? version = null, /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(ulong), version, pool, (data) => data.AsSpan().ToULong()); @@ -431,7 +426,6 @@ public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadULongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(ulong), version, pool, (data) => data.AsSpan().ToULong(), cancellationToken); @@ -442,7 +436,6 @@ public static Task ReadULongAsync(this Stream stream, int? version = null /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(ulong), ulong.MinValue, ulong.MaxValue, version, pool, (data) => data.AsSpan().ToULong()); @@ -454,9 +447,8 @@ public static Task ReadULongAsync(this Stream stream, int? version = null /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(ulong), ulong.MinValue, ulong.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToULong()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(ulong), ulong.MinValue, ulong.MaxValue, version, pool, (data) => data.AsSpan().ToULong(), cancellationToken); /// /// Read @@ -465,7 +457,6 @@ public static Task ReadULongAsync(this Stream stream, int? version = null /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static float ReadFloat(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(float), version, pool, (data) => data.AsSpan().ToFloat()); @@ -477,7 +468,6 @@ public static float ReadFloat(this Stream stream, int? version = null, ArrayPool /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadFloatAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(float), version, pool, (data) => data.AsSpan().ToFloat(), cancellationToken); @@ -488,7 +478,6 @@ public static Task ReadFloatAsync(this Stream stream, int? version = null /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(float), float.MinValue, float.MaxValue, version, pool, (data) => data.AsSpan().ToFloat()); @@ -500,9 +489,8 @@ public static Task ReadFloatAsync(this Stream stream, int? version = null /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(float), float.MinValue, float.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToFloat()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(float), float.MinValue, float.MaxValue, version, pool, (data) => data.AsSpan().ToFloat(), cancellationToken); /// /// Read @@ -511,7 +499,6 @@ public static Task ReadFloatAsync(this Stream stream, int? version = null /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static double ReadDouble(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(double), version, pool, (data) => data.AsSpan().ToDouble()); @@ -523,7 +510,6 @@ public static double ReadDouble(this Stream stream, int? version = null, ArrayPo /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadNumericAsync(stream, sizeof(double), version, pool, (data) => data.AsSpan().ToDouble(), cancellationToken); @@ -534,7 +520,6 @@ public static Task ReadDoubleAsync(this Stream stream, int? version = nu /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(double), double.MinValue, double.MaxValue, version, pool, (data) => data.AsSpan().ToDouble()); @@ -546,9 +531,8 @@ public static Task ReadDoubleAsync(this Stream stream, int? version = nu /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(double), double.MinValue, double.MaxValue, version, pool, (data) => Task.FromResult(data.AsSpan().ToDouble()), cancellationToken); + => ReadNullableNumericAsync(stream, sizeof(double), double.MinValue, double.MaxValue, version, pool, (data) => data.AsSpan().ToDouble(), cancellationToken); /// /// Read @@ -557,7 +541,6 @@ public static Task ReadDoubleAsync(this Stream stream, int? version = nu /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNumeric(stream, sizeof(decimal), version, pool, (data) => data.AsSpan().ToDecimal()); @@ -569,7 +552,6 @@ public static decimal ReadDecimal(this Stream stream, int? version = null, Array /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadDecimalAsync( this Stream stream, int? version = null, @@ -585,7 +567,6 @@ public static Task ReadDecimalAsync( /// Serializer version /// Array pool /// Value - [TargetedPatchingOptOut("Tiny method")] public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool? pool = null) => ReadNullableNumeric(stream, sizeof(decimal), decimal.MinValue, decimal.MaxValue, version, pool, (data) => data.AsSpan().ToDecimal()); @@ -597,7 +578,6 @@ public static Task ReadDecimalAsync( /// Array pool /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadDecimalNullableAsync( this Stream stream, int? version = null, @@ -611,7 +591,7 @@ public static Task ReadDecimalAsync( decimal.MaxValue, version, pool, - (data) => Task.FromResult(data.AsSpan().ToDecimal()), + (data) => data.AsSpan().ToDecimal(), cancellationToken ); @@ -623,21 +603,24 @@ public static Task ReadDecimalAsync( /// Serialized data size in bytes /// Serializer version /// Array pool - /// Deserializer action + /// Deserializer action /// Value #pragma warning disable IDE0060 // Remove unused parameter - [TargetedPatchingOptOut("Tiny method")] - private static T ReadNumeric(Stream stream, int size, int? version, ArrayPool? pool, Func action) where T : struct, IConvertible +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static T ReadNumeric(Stream stream, int size, int? version, ArrayPool? pool, Func deserializer) where T : struct, IConvertible #pragma warning restore IDE0060 // Remove unused parameter { + pool ??= StreamSerializer.BufferPool; byte[] data = ReadSerializedData(stream, size, pool); try { - return action(data); + return deserializer(data); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + pool.Return(data, clearArray: false); } } @@ -649,23 +632,33 @@ private static T ReadNumeric(Stream stream, int size, int? version, ArrayPool /// Serialized data size in bytes /// Serializer version /// Array pool - /// Deserializer action + /// Deserializer action /// Cancellation token /// Value #pragma warning disable IDE0060 // Remove unused parameter - [TargetedPatchingOptOut("Tiny method")] - private static async Task ReadNumericAsync(Stream stream, int size, int? version, ArrayPool? pool, Func action, CancellationToken cancellationToken) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task ReadNumericAsync( + Stream stream, + int size, + int? version, + ArrayPool? pool, + Func deserializer, + CancellationToken cancellationToken + ) #pragma warning restore IDE0060 // Remove unused parameter where T : struct, IConvertible { + pool ??= StreamSerializer.BufferPool; byte[] data = await ReadSerializedDataAsync(stream, size, pool, cancellationToken).DynamicContext(); try { - return action(data); + return deserializer(data); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + pool.Return(data, clearArray: false); } } @@ -679,34 +672,43 @@ private static async Task ReadNumericAsync(Stream stream, int size, int? v /// Maximum /// Serializer version /// Array pool - /// Action to execute, if the red value isn't a default handleable numeric value + /// Deserializer function to execute, if the red value isn't a default handleable numeric value /// Value - private static T? ReadNullableNumeric(Stream stream, int size, T min, T max, int? version, ArrayPool? pool, Func action) where T : struct, IConvertible +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static T? ReadNullableNumeric(Stream stream, int size, T min, T max, int? version, ArrayPool? pool, Func deserializer) + where T : struct, IConvertible { - switch (version ??= StreamSerializer.VERSION) + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: case 2: - if (!ReadBool(stream, version, pool)) return null; + { + if (!ReadBool(stream, version, pool)) return null; + } break; default: - switch ((NumberTypes)ReadOneByte(stream, version)) { - case NumberTypes.Null: return null; - case NumberTypes.MinValue: return min; - case NumberTypes.MaxValue: return max; - case NumberTypes.Zero: return default(T); + switch ((NumberTypes)ReadOneByte(stream, version)) + { + case NumberTypes.Null: return null; + case NumberTypes.MinValue: return min; + case NumberTypes.MaxValue: return max; + case NumberTypes.Zero: return default(T); + } } break; } byte[] data = ReadSerializedData(stream, size, pool); try { - return action(data); + return deserializer(data); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + pool.Return(data, clearArray: false); } } @@ -720,9 +722,12 @@ private static async Task ReadNumericAsync(Stream stream, int size, int? v /// Maximum /// Serializer version /// Array pool - /// Action to execute, if the red value isn't a default handleable numeric value + /// Deserializer function to execute, if the red value isn't a default handleable numeric value /// Cancellation token /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static async Task ReadNullableNumericAsync( Stream stream, int size, @@ -730,35 +735,40 @@ private static async Task ReadNumericAsync(Stream stream, int size, int? v T max, int? version, ArrayPool? pool, - Func> action, + Func deserializer, CancellationToken cancellationToken ) where T : struct, IConvertible { - switch (version ??= StreamSerializer.VERSION) + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: case 2: - if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) return null; + { + if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) return null; + } break; default: - switch ((NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext()) { - case NumberTypes.Null: return null; - case NumberTypes.MinValue: return min; - case NumberTypes.MaxValue: return max; - case NumberTypes.Zero: return default(T); + switch ((NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext()) + { + case NumberTypes.Null: return null; + case NumberTypes.MinValue: return min; + case NumberTypes.MaxValue: return max; + case NumberTypes.Zero: return default(T); + } } break; } byte[] data = await ReadSerializedDataAsync(stream, size, pool, cancellationToken).DynamicContext(); try { - return await action(data).DynamicContext(); + return deserializer(data); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + pool.Return(data, clearArray: false); } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs index 606c491..ce9d4fa 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs @@ -18,34 +18,40 @@ public static partial class StreamExtensions /// Maximum length in bytes /// Value and length public static (byte[] Value, int Length) ReadBytes( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - int minLen = 0, + this Stream stream, + int? version = null, + byte[]? buffer = null, + ArrayPool? pool = null, + int minLen = 0, int maxLen = int.MaxValue ) { bool rented = false; try { - return SerializerException.Wrap(() => + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0 && buffer == null) buffer = Array.Empty(); + rented = buffer == null && pool != null; + buffer ??= rented ? pool!.Rent(len) : new byte[len]; + if (buffer.Length < len) throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); + if (len != 0) { - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) throw new ArgumentException($"Buffer too small ({len} bytes required)", nameof(buffer)); - if (len != 0 && stream.Read(buffer.AsSpan(0, len)) != len) throw new SerializerException($"Failed to read serialized data ({len} bytes)"); - return (buffer, len); - }); + int red = stream.Read(buffer.AsSpan(0, len)); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + } + return (buffer, len); } - catch + catch (SerializerException) { if (rented) pool!.Return(buffer!); throw; } + catch (Exception ex) + { + if (rented) pool!.Return(buffer!); + throw SerializerException.From(ex); + } } /// @@ -79,17 +85,25 @@ public static (byte[] Value, int Length) ReadBytes( if (len == 0 && buffer == null) buffer = Array.Empty(); rented = buffer == null && pool != null; buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) throw new ArgumentException($"Buffer too small ({len} bytes required)", nameof(buffer)); - if (len != 0 && await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext() != len) - throw new SerializerException($"Failed to read serialized data ({len} bytes)"); + if (buffer.Length < len) throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); + if (len != 0) + { + int red = await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext(); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + } return (buffer, len); }).DynamicContext(); } - catch + catch (SerializerException) { if (rented) pool!.Return(buffer!); throw; } + catch (Exception ex) + { + if (rented) pool!.Return(buffer!); + throw SerializerException.From(ex); + } } /// @@ -111,7 +125,46 @@ public static (byte[] Value, int Length)? ReadBytesNullable( int minLen = 0, int maxLen = int.MaxValue ) - => ReadBool(stream, version, pool) ? ReadBytes(stream, version, buffer, pool, minLen, maxLen) : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, version, pool) ? ReadBytes(stream, version, buffer, pool, minLen, maxLen) : null; + } + default: + { + bool rented = false; + try + { + int len = ReadNumber(stream, version, pool); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0 && buffer == null) buffer = Array.Empty(); + rented = buffer == null && pool != null; + buffer ??= rented ? pool!.Rent(len) : new byte[len]; + if (buffer.Length < len) throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); + if (len != 0) + { + int red = stream.Read(buffer.AsSpan(0, len)); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + } + return (buffer, len); + } + catch (SerializerException) + { + if (rented) pool!.Return(buffer!); + throw; + } + catch (Exception ex) + { + if (rented) pool!.Return(buffer!); + throw SerializerException.From(ex); + } + } + } + } /// /// Read @@ -134,8 +187,50 @@ public static (byte[] Value, int Length)? ReadBytesNullable( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadBytesAsync(stream, version, buffer, pool, minLen, maxLen, cancellationToken).DynamicContext() - : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadBytesAsync(stream, version, buffer, pool, minLen, maxLen, cancellationToken).DynamicContext() + : null; + } + default: + { + bool rented = false; + try + { + return await SerializerException.WrapAsync(async () => + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0 && buffer == null) buffer = Array.Empty(); + rented = buffer == null && pool != null; + buffer ??= rented ? pool!.Rent(len) : new byte[len]; + if (buffer.Length < len) + throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); + if (len != 0) + { + int red = await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext(); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + } + return (buffer, len); + }).DynamicContext(); + } + catch (SerializerException) + { + if (rented) pool!.Return(buffer!); + throw; + } + catch (Exception ex) + { + if (rented) pool!.Return(buffer!); + throw SerializerException.From(ex); + } + } + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs index e69c467..1d768b4 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs @@ -1,6 +1,7 @@ using System.Buffers; using System.Collections; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -21,6 +22,10 @@ public static partial class StreamExtensions /// Key serializer options /// Value serializer options /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Dictionary ReadDict( this Stream stream, int? version = null, @@ -31,16 +36,14 @@ public static Dictionary ReadDict( ISerializerOptions? valueOptions = null ) where tKey : notnull - => SerializerException.Wrap(() => - { - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Dictionary res = new(len); - for (int i = 0; i < len; i++) - res[ReadObject(stream, version, keyOptions)] - = ReadObject(stream, version, valueOptions); - return res; - }); + { + pool ??= StreamSerializer.BufferPool; + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + for (int i = 0; i < len; i++) res[ReadObject(stream, version, keyOptions)] = ReadObject(stream, version, valueOptions); + return res; + } /// /// Read @@ -54,6 +57,10 @@ public static Dictionary ReadDict( /// Key serializer options /// Value serializer options /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static IDictionary ReadDict( this Stream stream, Type type, @@ -64,22 +71,20 @@ public static IDictionary ReadDict( ISerializerOptions? keyOptions = null, ISerializerOptions? valueOptions = null ) - => SerializerException.Wrap(() => - { - ArgumentValidationHelper.EnsureValidArgument( - nameof(type), - type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a dictionary type" - ); - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Type[] types = type.GetGenericArguments(); - IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; i++) - res[ReadObject(stream, types[0], version, keyOptions)] - = ReadObject(stream, types[1], version, valueOptions); - return res; - }); + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a dictionary type" + )); + pool ??= StreamSerializer.BufferPool; + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type[] types = type.GetGenericArguments(); + IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; i++) res[ReadObject(stream, types[0], version, keyOptions)] = ReadObject(stream, types[1], version, valueOptions); + return res; + } /// /// Read @@ -95,7 +100,11 @@ public static IDictionary ReadDict( /// Value serializer options /// Cancellation token /// Value - public static Task> ReadDictAsync( + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task> ReadDictAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -106,16 +115,16 @@ public static Task> ReadDictAsync( CancellationToken cancellationToken = default ) where tKey : notnull - => SerializerException.WrapAsync(async () => - { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Dictionary res = new(len); - for (int i = 0; i < len; i++) - res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken).DynamicContext()] - = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); - return res; - }); + { + pool ??= StreamSerializer.BufferPool; + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + for (int i = 0; i < len; i++) + res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken).DynamicContext()] + = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); + return res; + } /// /// Read @@ -130,7 +139,11 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). /// Value serializer options /// Cancellation token /// Value - public static Task ReadDictAsync( + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadDictAsync( this Stream stream, Type type, int? version = null, @@ -141,22 +154,22 @@ public static Task ReadDictAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - ArgumentValidationHelper.EnsureValidArgument( - nameof(type), - type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a dictionary type" - ); - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Type[] types = type.GetGenericArguments(); - IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; i++) - res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationToken).DynamicContext()] - = await ReadObjectAsync(stream, types[1], version, valueOptions, cancellationToken).DynamicContext(); - return res; - }); + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a dictionary type" + )); + pool ??= StreamSerializer.BufferPool; + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type[] types = type.GetGenericArguments(); + IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; i++) + res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationToken).DynamicContext()] + = await ReadObjectAsync(stream, types[1], version, valueOptions, cancellationToken).DynamicContext(); + return res; + } /// /// Read @@ -172,6 +185,9 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok /// Value serializer options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Dictionary? ReadDictNullable( this Stream stream, int? version = null, @@ -182,7 +198,24 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok ISerializerOptions? valueOptions = null ) where tKey : notnull - => ReadBool(stream, version, pool) ? ReadDict(stream, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; + { + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + return ReadBool(stream, version, pool) ? ReadDict(stream, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; + default: + { + int len = ReadNumber(stream, version, pool); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + for (int i = 0; i < len; i++) res[ReadObject(stream, version, keyOptions)] = ReadObject(stream, version, valueOptions); + return res; + } + } + } /// /// Read @@ -197,6 +230,9 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok /// Value serializer options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static IDictionary? ReadDictNullable( this Stream stream, Type type, @@ -207,7 +243,32 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok ISerializerOptions? keyOptions = null, ISerializerOptions? valueOptions = null ) - => ReadBool(stream, version, pool) ? ReadDict(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a dictionary type" + )); + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, version, pool) ? ReadDict(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; + } + default: + { + int len = ReadNumber(stream, version, pool); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type[] types = type.GetGenericArguments(); + IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; i++) res[ReadObject(stream, types[0], version, keyOptions)] = ReadObject(stream, types[1], version, valueOptions); + return res; + } + } + } /// /// Read @@ -224,6 +285,9 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task?> ReadDictNullableAsync( this Stream stream, int? version = null, @@ -235,9 +299,30 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok CancellationToken cancellationToken = default ) where tKey : notnull - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDictAsync(stream, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() - : null; + { + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadDictAsync(stream, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() + : null; + } + default: + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + for (int i = 0; i < len; i++) + res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken).DynamicContext()] + = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); + return res; + } + } + } /// /// Read @@ -253,6 +338,9 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadDictNullableAsync( this Stream stream, Type type, @@ -264,8 +352,35 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDictAsync(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() - : null; + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a dictionary type" + )); + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadDictAsync(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() + : null; + } + default: + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type[] types = type.GetGenericArguments(); + IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; i++) + res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationToken).DynamicContext()] + = await ReadObjectAsync(stream, types[1], version, valueOptions, cancellationToken).DynamicContext(); + return res; + } + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs index ba75252..7af1bd5 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs @@ -1,5 +1,6 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -15,6 +16,9 @@ public static partial class StreamExtensions /// Serializer version /// Array pool /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T ReadEnum(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum => (T)ReadEnumInt(stream, typeof(T), version, numberType: null, pool); @@ -26,6 +30,9 @@ public static T ReadEnum(this Stream stream, int? version = null, ArrayPoolSerializer version /// Array pool /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Enum ReadEnum(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) => ReadEnumInt(stream, type, version, numberType: null, pool); @@ -38,6 +45,9 @@ public static Enum ReadEnum(this Stream stream, Type type, int? version = null, /// Number type /// Array pool /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Enum ReadEnumInt(Stream stream, Type type, int? version, NumberTypes? numberType, ArrayPool? pool) => SerializerException.Wrap(() => { @@ -64,6 +74,9 @@ private static Enum ReadEnumInt(Stream stream, Type type, int? version, NumberTy /// Array pool /// Cancellation token /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadEnumAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) where T : struct, Enum => (T)await ReadEnumIntAsync(stream, typeof(T), version, numberType: null, pool, cancellationToken).DynamicContext(); @@ -77,6 +90,9 @@ public static async Task ReadEnumAsync(this Stream stream, int? version = /// Array pool /// Cancellation token /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadEnumAsync(this Stream stream, Type type, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) => ReadEnumIntAsync(stream, type, version, numberType: null, pool, cancellationToken); @@ -90,6 +106,9 @@ public static Task ReadEnumAsync(this Stream stream, Type type, int? versi /// Array pool /// Cancellation token /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Task ReadEnumIntAsync(Stream stream, Type type, int? version, NumberTypes? numberType, ArrayPool? pool, CancellationToken cancellationToken) => SerializerException.WrapAsync(async () => { @@ -112,18 +131,24 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// Array pool /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T? ReadEnumNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum - => SerializerException.Wrap(() => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) - { - case 1: + case 1: + { return ReadBool(stream, version, pool) ? ReadEnum(stream, version, pool) : null; - default: + } + default: + { NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); return numberType == NumberTypes.Null ? null : (T?)ReadEnumInt(stream, typeof(T), version, numberType, pool); - } - }); + } + } + } /// /// Read @@ -134,22 +159,28 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// Array pool /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Enum? ReadEnumNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) - => SerializerException.Wrap(() => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) - { - case 1: + case 1: + { return ReadBool(stream, version, pool) ? ReadEnum(stream, type, version, pool) : (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); - default: + } + default: + { NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); return numberType == NumberTypes.Null ? (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")) : ReadEnumInt(stream, type, version, numberType, pool); - } - }); + } + } + } /// /// Read @@ -161,23 +192,29 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static Task ReadEnumNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadEnumNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) where T : struct, Enum - => SerializerException.WrapAsync(async () => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) - { - case 1: + case 1: + { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext() : default(T?); - default: + } + default: + { NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); return numberType == NumberTypes.Null ? default(T?) : (T)await ReadEnumIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken).DynamicContext(); - } - }); + } + } + } /// /// Read @@ -189,27 +226,33 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static Task ReadEnumNullableAsync( - this Stream stream, +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadEnumNullableAsync( + this Stream stream, Type type, - int? version = null, - ArrayPool? pool = null, + int? version = null, + ArrayPool? pool = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => + { + switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) - { - case 1: + case 1: + { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadEnumAsync(stream, type, version, pool, cancellationToken).DynamicContext() : (Enum?)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); - default: + } + default: + { NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); return numberType == NumberTypes.Null ? (Enum?)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")) : await ReadEnumIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); - } - }); + } + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs index 98e8cfb..041dfa2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs @@ -1,6 +1,7 @@ using System.Buffers; using System.Collections; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -19,6 +20,10 @@ public static partial class StreamExtensions /// Maximum length /// Value serializer options /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static List ReadList( this Stream stream, int? version = null, @@ -27,15 +32,13 @@ public static List ReadList( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => SerializerException.Wrap(() => - { - if (typeof(T) == typeof(byte)) return new List((ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value as T[])!); - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - List res = new(len); - for (int i = 0; i < len; res.Add(ReadObject(stream, version, valueOptions)), i++) ; - return res; - }); + { + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + for (int i = 0; i < len; res.Add(ReadObject(stream, version, valueOptions)), i++) ; + return res; + } /// /// Read @@ -48,6 +51,10 @@ public static List ReadList( /// Maximum length /// Value serializer options /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static IList ReadList( this Stream stream, Type type, @@ -57,21 +64,19 @@ public static IList ReadList( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => SerializerException.Wrap(() => - { - if (type.GetElementType() == typeof(byte)) return new List(ReadBytes(stream, version, buffer: null, pool, minLen, maxLen).Value); - ArgumentValidationHelper.EnsureValidArgument( - nameof(type), - type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a list type" - ); - int len = ReadNumber(stream, version, pool); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Type itemType = type.GetGenericArgumentsCached()[0]; - IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; res.Add(ReadObject(stream, itemType, version, valueOptions)), i++) ; - return res; - }); + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a list type" + )); + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type itemType = type.GetGenericArgumentsCached()[0]; + IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; res.Add(ReadObject(stream, itemType, version, valueOptions)), i++) ; + return res; + } /// /// Read @@ -85,7 +90,11 @@ public static IList ReadList( /// Value serializer options /// Cancellation token /// Value - public static Task> ReadListAsync( + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task> ReadListAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -94,16 +103,13 @@ public static Task> ReadListAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - if (typeof(T) == typeof(byte)) - return new List((await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!); - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - List res = new(len); - for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext()), i++) ; - return res; - }); + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + return res; + } /// /// Read @@ -117,7 +123,11 @@ public static Task> ReadListAsync( /// Value serializer options /// Cancellation token /// Value - public static Task ReadListAsync( + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadListAsync( this Stream stream, Type type, int? version = null, @@ -127,22 +137,19 @@ public static Task ReadListAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - if (type.GetElementType() == typeof(byte)) - return new List((await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext()).Value); - ArgumentValidationHelper.EnsureValidArgument( - nameof(type), - type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a list type" - ); - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - Type itemType = type.GetGenericArgumentsCached()[0]; - IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, itemType, version, valueOptions, cancellationToken).DynamicContext()), i++) ; - return res; - }); + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a list type" + )); + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type itemType = type.GetGenericArgumentsCached()[0]; + IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, itemType, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + return res; + } /// /// Read @@ -156,6 +163,9 @@ public static Task ReadListAsync( /// Value serializer options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static List? ReadListNullable( this Stream stream, int? version = null, @@ -164,7 +174,25 @@ public static Task ReadListAsync( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => ReadBool(stream, version, pool) ? ReadList(stream, version, pool, minLen, maxLen, valueOptions) : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, version, pool) ? ReadList(stream, version, pool, minLen, maxLen, valueOptions) : null; + } + default: + { + int len = ReadNumber(stream, version, pool); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + for (int i = 0; i < len; res.Add(ReadObject(stream, version, valueOptions)), i++) ; + return res; + } + } + } /// /// Read @@ -178,6 +206,9 @@ public static Task ReadListAsync( /// Value serializer options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static IList? ReadListNullable( this Stream stream, Type type, @@ -187,7 +218,31 @@ public static Task ReadListAsync( int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null ) - => ReadBool(stream, version, pool) ? ReadList(stream, type, version, pool, minLen, maxLen, valueOptions) : null; + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a list type" + )); + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, version, pool) ? ReadList(stream, type, version, pool, minLen, maxLen, valueOptions) : null; + } + default: + { + int len = ReadNumber(stream, version, pool); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type itemType = type.GetGenericArgumentsCached()[0]; + IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; res.Add(ReadObject(stream, itemType, version, valueOptions)), i++) ; + return res; + } + } + } /// /// Read @@ -202,6 +257,9 @@ public static Task ReadListAsync( /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task?> ReadListNullableAsync( this Stream stream, int? version = null, @@ -211,9 +269,27 @@ public static Task ReadListAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadListAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : null; + { + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadListAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + : null; + } + default: + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + return res; + } + } + } /// /// Read @@ -228,6 +304,9 @@ public static Task ReadListAsync( /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadListNullableAsync( this Stream stream, Type type, @@ -238,8 +317,32 @@ public static Task ReadListAsync( ISerializerOptions? valueOptions = null, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadListAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : null; + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(type), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + "Not a list type" + )); + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadListAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + : null; + } + default: + { + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == -1) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type itemType = type.GetGenericArgumentsCached()[0]; + IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); + for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, itemType, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + return res; + } + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs index 6ba5c6b..4d67e1b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs @@ -1,5 +1,6 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -37,6 +38,9 @@ public static object ReadNumber(this Stream stream, Type type, int? version = nu /// Number type /// Array pool /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static object ReadNumberInt(Stream stream, Type resType, int? version, NumberTypes? numberType, ArrayPool? pool) => SerializerException.Wrap(() => { @@ -170,6 +174,9 @@ public static Task ReadNumberAsync(this Stream stream, Type type, int? v /// Array pool /// Cancellation token /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Task ReadNumberIntAsync( Stream stream, Type resType, @@ -288,6 +295,9 @@ CancellationToken cancellationToken /// Array pool /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T? ReadNumberNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible => SerializerException.Wrap(() => { @@ -313,6 +323,9 @@ CancellationToken cancellationToken /// Array pool /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static object? ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) => SerializerException.Wrap(() => { @@ -339,6 +352,9 @@ CancellationToken cancellationToken /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadNumberNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) where T : struct, IConvertible => SerializerException.WrapAsync(async () => @@ -369,6 +385,9 @@ CancellationToken cancellationToken /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadNumberNullableAsync( this Stream stream, Type type, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs index 2ac7ec0..69a8264 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs @@ -1,6 +1,7 @@ using System.ComponentModel.DataAnnotations; using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; using wan24.ObjectValidation; @@ -19,6 +20,9 @@ public static partial class StreamExtensions /// Options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T ReadObject(this Stream stream, int? version = null, ISerializerOptions? options = null) => SerializerException.Wrap(() => { @@ -37,6 +41,9 @@ public static T ReadObject(this Stream stream, int? version = null, ISerializ /// Options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static object ReadObject(this Stream stream, Type type, int? version = null, ISerializerOptions? options = null) => SerializerException.Wrap(() => { @@ -56,6 +63,9 @@ public static object ReadObject(this Stream stream, Type type, int? version = nu /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadObjectAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { @@ -78,6 +88,9 @@ public static Task ReadObjectAsync(this Stream stream, int? version = null /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadObjectAsync( this Stream stream, Type type, @@ -105,6 +118,9 @@ public static Task ReadObjectAsync( /// Options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T? ReadObjectNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) #pragma warning disable IDE0034 // default expression can be simplified => ReadBool(stream, version) ? ReadObject(stream, version, options) : default(T?); @@ -119,6 +135,9 @@ public static Task ReadObjectAsync( /// Options /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static object? ReadObjectNullable(this Stream stream, Type type, int? version = null, ISerializerOptions? options = null) => ReadBool(stream, version) ? ReadObject(stream, type, version, options) : null; @@ -132,6 +151,9 @@ public static Task ReadObjectAsync( /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadObjectNullableAsync( this Stream stream, int? version = null, @@ -154,6 +176,9 @@ public static Task ReadObjectAsync( /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadObjectNullableAsync( this Stream stream, Type type, @@ -173,48 +198,47 @@ public static Task ReadObjectAsync( /// Serializer version /// Object public static T ReadAnyObject(this Stream stream, int? version = null) where T : class, new() - => SerializerException.Wrap(() => + { + // Handle serializable type + Type type = typeof(T); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (T)ReadSerializedObject(stream, type, version); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); + int count = ReadNumber(stream, version); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + T res = new(); + for (int i = 0; i < count; i++) { - // Handle serializable type - Type type = typeof(T); - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (T)ReadSerializedObject(stream, type, version); - // Find the stream serializer attribute - StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); - if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); - // Get properties to read - PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); - int count = ReadNumber(stream, version); - if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); - // Deserialize property values - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - PropertyInfoExt pi; - T res = new(); - for (int i = 0; i < count; i++) - { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? ReadAnyNullable(stream, version) - : ReadAny(stream, version) - ); - } - // Validate the resulting object - if (!res.TryValidateObject(out List results)) - throw new SerializerException( - $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", - new ObjectValidationException(results) - ); - return res; - }); + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? ReadAnyNullable(stream, version) + : ReadAny(stream, version) + ); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + } /// /// Read any object @@ -224,47 +248,46 @@ public static Task ReadObjectAsync( /// Serializer version /// Object public static object ReadAnyObject(this Stream stream, Type type, int? version = null) - => SerializerException.Wrap(() => + { + // Handle serializable type + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); + int count = ReadNumber(stream, version); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); + for (int i = 0; i < count; i++) { - // Handle serializable type - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); - // Find the stream serializer attribute - StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); - if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); - // Get properties to read - PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); - int count = ReadNumber(stream, version); - if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); - // Deserialize property values - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - PropertyInfoExt pi; - object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); - for (int i = 0; i < count; i++) - { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? ReadAnyNullable(stream, version) - : ReadAny(stream, version) - ); - } - // Validate the resulting object - if (!res.TryValidateObject(out List results)) - throw new SerializerException( - $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", - new ObjectValidationException(results) - ); - return res; - }); + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? ReadAnyNullable(stream, version) + : ReadAny(stream, version) + ); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + } /// /// Read any object @@ -274,53 +297,52 @@ public static object ReadAnyObject(this Stream stream, Type type, int? version = /// Serializer version /// Cancellation token /// Object - public static Task ReadAnyObjectAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, new() - => SerializerException.WrapAsync(async () => + public static async Task ReadAnyObjectAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, new() + { + // Handle serializable type + Type type = typeof(T); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) + return (T)await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( + type, + await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ).ToArray(); + int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + T res = new(); + for (int i = 0; i < count; i++) { - // Handle serializable type - Type type = typeof(T); - if (typeof(IStreamSerializer).IsAssignableFrom(type)) - return (T)await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); - // Find the stream serializer attribute - StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); - if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); - // Get properties to read - PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( - type, - await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ).ToArray(); - int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); - if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); - // Deserialize property values - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - PropertyInfoExt pi; - T res = new(); - for (int i = 0; i < count; i++) - { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ); - } - // Validate the resulting object - if (!res.TryValidateObject(out List results)) - throw new SerializerException( - $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", - new ObjectValidationException(results) + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() ); - return res; - }); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + } /// /// Read any object @@ -330,52 +352,51 @@ await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != p /// Serializer version /// Cancellation token /// Object - public static Task ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => + public static async Task ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) + { + // Handle serializable type + if (typeof(IStreamSerializer).IsAssignableFrom(type)) + return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); + // Find the stream serializer attribute + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); + // Get properties to read + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( + type, + await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ).ToArray(); + int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); + // Deserialize property values + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + PropertyInfoExt pi; + object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); + for (int i = 0; i < count; i++) { - // Handle serializable type - if (typeof(IStreamSerializer).IsAssignableFrom(type)) - return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); - // Find the stream serializer attribute - StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); - if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); - // Get properties to read - PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( - type, - await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ).ToArray(); - int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); - if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); - // Deserialize property values - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - PropertyInfoExt pi; - object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); - for (int i = 0; i < count; i++) - { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ); - } - // Validate the resulting object - if (!res.TryValidateObject(out List results)) - throw new SerializerException( - $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", - new ObjectValidationException(results) + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + pi.Setter!( + res, + pi.Property.PropertyType.IsNullable() + ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() ); - return res; - }); + } + // Validate the resulting object + if (!res.TryValidateObject(out List results)) + throw new SerializerException( + $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", + new ObjectValidationException(results) + ); + return res; + } /// /// Read any object @@ -385,6 +406,9 @@ await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != p /// Serializer version /// Object [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T? ReadAnyObjectNullable(this Stream stream, int? version = null) where T : class, new() => ReadBool(stream, version) ? ReadAnyObject(stream, version) : null; @@ -396,6 +420,9 @@ await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != p /// Serializer version /// Object [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static object? ReadAnyObjectNullable(this Stream stream, Type type, int? version = null) => ReadBool(stream, version) ? ReadAnyObject(stream, type, version) : null; @@ -408,6 +435,9 @@ await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != p /// Cancellation token /// Object [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadAnyObjectNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, new() => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() @@ -423,6 +453,9 @@ await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != p /// Cancellation token /// Object [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadAnyObjectNullableAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() ? await ReadAnyObjectAsync(stream, type, version, cancellationToken).DynamicContext() diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs index efde2df..cb79b9c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs @@ -1,6 +1,7 @@ using System.ComponentModel.DataAnnotations; using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; using wan24.ObjectValidation; @@ -54,7 +55,6 @@ where c.IsPublic && /// Object type /// Serializer version /// Object - [TargetedPatchingOptOut("Just a method adapter")] public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, int? version = null) => SerializerException.Wrap(() => { @@ -134,7 +134,6 @@ where c.IsPublic && /// Serializer version /// Cancellation token /// Object - [TargetedPatchingOptOut("Just a method adapter")] public static Task ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { @@ -175,6 +174,9 @@ where c.IsPublic && /// Serializer version /// Object [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T? ReadSerializedNullable(this Stream stream, int? version = null) where T : class, IStreamSerializer #pragma warning disable IDE0034 // default expression can be simplified => ReadBool(stream, version) ? ReadSerialized(stream, version) : default(T?); @@ -189,6 +191,9 @@ where c.IsPublic && /// Cancellation token /// Object [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadSerializedNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, IStreamSerializer => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() ? await ReadSerializedAsync(stream, version, cancellationToken).DynamicContext() @@ -281,6 +286,9 @@ where c.IsPublic && /// Serializer version /// Structure [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T? ReadSerializedStructNullable(this Stream stream, int? version = null) where T : struct, IStreamSerializer => ReadBool(stream, version) ? ReadSerializedStruct(stream, version) : default(T?); @@ -293,6 +301,9 @@ where c.IsPublic && /// Cancellation token /// Structure [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadSerializedStructNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs index 126108a..0dd0bd5 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs @@ -1,5 +1,6 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -41,6 +42,9 @@ public static Stream ReadStream( /// Maximum stream length in bytes /// Stream/chunk length in bytes (chunk length is negative) /// Target stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Stream ReadStreamInt( this Stream stream, Stream target, @@ -112,6 +116,9 @@ private static Stream ReadStreamInt( /// Maximum stream length in bytes /// Target stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream? ReadStreamNullable( this Stream stream, Stream target, @@ -123,23 +130,27 @@ private static Stream ReadStreamInt( ) => SerializerException.Wrap(() => { - switch (version ??= StreamSerializer.VERSION) + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: - if (!ReadBool(stream, version, pool)) { - target.Dispose(); - return null; + if (!ReadBool(stream, version, pool)) + { + target.Dispose(); + return null; + } + return ReadStream(stream, target, version, pool, maxBufferSize, minLen, maxLen); } - return ReadStream(stream, target, version, pool, maxBufferSize, minLen, maxLen); default: - long len = ReadNumber(stream, version, pool); - if (len == long.MinValue) { - target.Dispose(); - return null; + long len = ReadNumber(stream, version, pool); + if (len == long.MinValue) + { + target.Dispose(); + return null; + } + return ReadStreamInt(stream, target, version, pool, maxBufferSize, minLen, maxLen, len); } - return ReadStreamInt(stream, target, version, pool, maxBufferSize, minLen, maxLen, len); } }); @@ -155,6 +166,10 @@ private static Stream ReadStreamInt( /// Maximum stream length in bytes /// Cancellation token /// Target stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadStreamAsync( this Stream stream, Stream target, @@ -180,6 +195,9 @@ public static Task ReadStreamAsync( /// Stream/chunk length in bytes (chunk length is negative) /// Cancellation token /// Target stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Task ReadStreamIntAsync( Stream stream, Stream target, @@ -253,6 +271,9 @@ CancellationToken cancellationToken /// Cancellation token /// Target stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadStreamNullableAsync( this Stream stream, Stream target, @@ -265,23 +286,27 @@ CancellationToken cancellationToken ) => SerializerException.WrapAsync(async () => { - switch (version ??= StreamSerializer.VERSION) + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: - if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) { - await target.DisposeAsync().DynamicContext(); - return null; + if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) + { + await target.DisposeAsync().DynamicContext(); + return null; + } + return await ReadStreamAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, cancellationToken).DynamicContext(); } - return await ReadStreamAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, cancellationToken).DynamicContext(); default: - long len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == long.MinValue) { - await target.DisposeAsync().DynamicContext(); - return null; + long len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == long.MinValue) + { + await target.DisposeAsync().DynamicContext(); + return null; + } + return await ReadStreamIntAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, len, cancellationToken).DynamicContext(); } - return await ReadStreamIntAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, len, cancellationToken).DynamicContext(); } }); } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs index 94e93b3..ae82341 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs @@ -1,5 +1,6 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -16,20 +17,8 @@ public static partial class StreamExtensions /// Minimum length in bytes /// Maximum length in bytes /// Value - [TargetedPatchingOptOut("Tiny method")] public static string ReadString(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => SerializerException.Wrap(() => - { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try - { - return data.AsSpan(0, len).ToUtf8String(); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - }); + => ReadString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String()); /// /// Read @@ -41,7 +30,6 @@ public static string ReadString(this Stream stream, int? version = null, ArrayPo /// Maximum length in bytes /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadStringAsync( this Stream stream, int? version = null, @@ -50,22 +38,7 @@ public static Task ReadStringAsync( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); - try - { - return data.AsSpan(0, len).ToUtf8String(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - }); + => ReadStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String(), cancellationToken); /// /// Read @@ -76,9 +49,8 @@ public static Task ReadStringAsync( /// Minimum length in bytes /// Maximum length in bytes /// Value - [TargetedPatchingOptOut("Tiny method")] public static string? ReadStringNullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadBool(stream, version, pool) ? ReadString(stream, version, pool, minLen, maxLen) : null; + => ReadNullableString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String()); /// /// Read @@ -90,8 +62,7 @@ public static Task ReadStringAsync( /// Maximum length in bytes /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStringNullableAsync( + public static Task ReadStringNullableAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -99,9 +70,7 @@ public static Task ReadStringAsync( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadStringAsync(stream, version, pool, minLen, maxLen, cancellationToken).DynamicContext() - : null; + => ReadNullableStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String(), cancellationToken); /// /// Read UTF-16 (little endian) string @@ -112,20 +81,8 @@ public static Task ReadStringAsync( /// Minimum length in bytes /// Maximum length in bytes /// Value - [TargetedPatchingOptOut("Tiny method")] public static string ReadString16(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => SerializerException.Wrap(() => - { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try - { - return data.AsSpan(0, len).ToUtf16String(); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - }); + => ReadString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String()); /// /// Read UTF-16 (little endian) string @@ -137,7 +94,6 @@ public static string ReadString16(this Stream stream, int? version = null, Array /// Maximum length in bytes /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadString16Async( this Stream stream, int? version = null, @@ -146,18 +102,7 @@ public static Task ReadString16Async( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); - try - { - return data.AsSpan(0, len).ToUtf16String(); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - }); + => ReadStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String(), cancellationToken); /// /// Read UTF-16 (little endian) string @@ -168,9 +113,8 @@ public static Task ReadString16Async( /// Minimum length in bytes /// Maximum length in bytes /// Value - [TargetedPatchingOptOut("Tiny method")] public static string? ReadString16Nullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadBool(stream, version, pool) ? ReadString16(stream, version, pool, minLen, maxLen) : null; + => ReadNullableString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String()); /// /// Read UTF-16 (little endian) string @@ -182,8 +126,7 @@ public static Task ReadString16Async( /// Maximum length in bytes /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString16NullableAsync( + public static Task ReadString16NullableAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -191,9 +134,7 @@ public static Task ReadString16Async( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadString16Async(stream, version, pool, minLen, maxLen, cancellationToken).DynamicContext() - : null; + => ReadNullableStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String(), cancellationToken); /// /// Read UTF-32 (little endian) string @@ -204,20 +145,8 @@ public static Task ReadString16Async( /// Minimum length in bytes /// Maximum length in bytes /// Value - [TargetedPatchingOptOut("Tiny method")] public static string ReadString32(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => SerializerException.Wrap(() => - { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try - { - return data.AsSpan(0, len).ToUtf32String(); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - }); + => ReadString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String()); /// /// Read UTF-32 (little endian) string @@ -229,7 +158,6 @@ public static string ReadString32(this Stream stream, int? version = null, Array /// Maximum length in bytes /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] public static Task ReadString32Async( this Stream stream, int? version = null, @@ -238,18 +166,7 @@ public static Task ReadString32Async( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - => SerializerException.WrapAsync(async () => - { - (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); - try - { - return data.AsSpan(0, len).ToUtf32String(); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - }); + => ReadStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String(), cancellationToken); /// /// Read UTF-32 (little endian) string @@ -260,9 +177,8 @@ public static Task ReadString32Async( /// Minimum length in bytes /// Maximum length in bytes /// Value - [TargetedPatchingOptOut("Tiny method")] public static string? ReadString32Nullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadBool(stream, version, pool) ? ReadString32(stream, version, pool, minLen, maxLen) : null; + => ReadNullableString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String()); /// /// Read UTF-32 (little endian) string @@ -274,8 +190,7 @@ public static Task ReadString32Async( /// Maximum length in bytes /// Cancellation token /// Value - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString32NullableAsync( + public static Task ReadString32NullableAsync( this Stream stream, int? version = null, ArrayPool? pool = null, @@ -283,8 +198,178 @@ public static Task ReadString32Async( int maxLen = int.MaxValue, CancellationToken cancellationToken = default ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadString32Async(stream, version, pool, minLen, maxLen, cancellationToken).DynamicContext() - : null; + => ReadNullableStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String(), cancellationToken); + + /// + /// Read a string + /// + /// Stream + /// Serializer version + /// Minimum length in bytes + /// Maximum length in bytes + /// Array pool + /// Action to execute for decoding the resulting string + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static string ReadString(Stream stream, int? version, int minLen, int maxLen, ArrayPool? pool, Func action) + { + version ??= StreamSerializer.VERSION; + pool ??= StreamSerializer.BufferPool; + int len = ReadNumber(stream, version, pool); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + byte[] buffer = ReadSerializedData(stream, len, pool); + try + { + return action(buffer, len); + } + finally + { + pool.Return(buffer); + } + } + + /// + /// Read a string + /// + /// Stream + /// Serializer version + /// Minimum length in bytes + /// Maximum length in bytes + /// Array pool + /// Action to execute for decoding the resulting string + /// Cancellation token + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task ReadStringAsync( + Stream stream, + int? version, + int minLen, + int maxLen, + ArrayPool? pool, + Func action, + CancellationToken cancellationToken + ) + { + version ??= StreamSerializer.VERSION; + pool ??= StreamSerializer.BufferPool; + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + byte[] buffer = await ReadSerializedDataAsync(stream, len, pool, cancellationToken).DynamicContext(); + try + { + return action(buffer, len); + } + finally + { + pool.Return(buffer); + } + } + + /// + /// Read a string + /// + /// Stream + /// Serializer version + /// Minimum length in bytes + /// Maximum length in bytes + /// Array pool + /// Action to execute for decoding the resulting string + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static string? ReadNullableString(Stream stream, int? version, int minLen, int maxLen, ArrayPool? pool, Func action) + { + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + if (!ReadBool(stream, version, pool)) return null; + } + break; + } + int len = ReadNumber(stream, version, pool); + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + break; + default: + if (len == -1) return null; + break; + } + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + byte[] buffer = ReadSerializedData(stream, len, pool); + try + { + return action(buffer, len); + } + finally + { + pool.Return(buffer); + } + } + + /// + /// Read a string + /// + /// Stream + /// Serializer version + /// Minimum length in bytes + /// Maximum length in bytes + /// Array pool + /// Action to execute for decoding the resulting string + /// Cancellation token + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task ReadNullableStringAsync( + Stream stream, + int? version, + int minLen, + int maxLen, + ArrayPool? pool, + Func action, + CancellationToken cancellationToken + ) + { + pool ??= StreamSerializer.BufferPool; + switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) return null; + } + break; + } + int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + break; + default: + if (len == -1) return null; + break; + } + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + byte[] buffer = await ReadSerializedDataAsync(stream, len, pool, cancellationToken).DynamicContext(); + try + { + return action(buffer, len); + } + finally + { + pool.Return(buffer); + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs index 1e651d2..44e6c96 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs @@ -1,5 +1,6 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using wan24.Core; @@ -18,6 +19,9 @@ public static partial class StreamExtensions /// Buffer pool /// Struct [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T ReadStruct( this Stream stream, int? version = null, @@ -28,6 +32,7 @@ public static T ReadStruct( => SerializerException.Wrap(() => { int len = Marshal.SizeOf(typeof(T)); + pool ??= StreamSerializer.BufferPool; byte[] data = stream.ReadBytes(version, buffer, pool, len, len).Value; try { @@ -43,7 +48,7 @@ public static T ReadStruct( } finally { - if (buffer == null && pool != null) pool.Return(data); + if (buffer == null) pool.Return(data); } }); @@ -58,6 +63,9 @@ public static T ReadStruct( /// Cancellation token /// Struct [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task ReadStructAsync( this Stream stream, int? version = null, @@ -69,6 +77,7 @@ public static Task ReadStructAsync( => SerializerException.WrapAsync(async () => { int len = Marshal.SizeOf(typeof(T)); + pool ??= StreamSerializer.BufferPool; byte[] data = (await stream.ReadBytesAsync(version, buffer, pool, len, len, cancellationToken).DynamicContext()).Value; try { @@ -84,7 +93,7 @@ public static Task ReadStructAsync( } finally { - if (buffer == null && pool != null) pool.Return(data); + if (buffer == null) pool.Return(data); } }); @@ -98,6 +107,9 @@ public static Task ReadStructAsync( /// Buffer pool /// Struct [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static T? ReadStructNullable( this Stream stream, int? version = null, @@ -118,6 +130,9 @@ public static Task ReadStructAsync( /// Cancellation token /// Struct [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadStructNullableAsync( this Stream stream, int? version = null, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs index 35f5acd..119c437 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs @@ -1,6 +1,7 @@ using System.Buffers; using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -32,13 +33,16 @@ public static partial class StreamExtensions /// Steam /// Serializer version [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static int ReadSerializerVersion(this Stream stream) - => SerializerException.Wrap(() => - { - int res = ReadNumber(stream, version: 1); - if (res < 1 || res > StreamSerializer.VERSION) throw new InvalidDataException($"Invalid or unsupported stream serializer version #{res}"); - return res; - }); + { + int res = ReadNumber(stream, version: 1); + if (res < 1 || (res & byte.MaxValue) > StreamSerializer.VERSION) + throw new SerializerException($"Invalid or unsupported stream serializer version #{res}", new InvalidDataException()); + return res; + } /// /// Read the serializer version @@ -47,13 +51,16 @@ public static int ReadSerializerVersion(this Stream stream) /// Cancellation token /// Serializer version [TargetedPatchingOptOut("Tiny method")] - public static Task ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - int res = await ReadNumberAsync(stream, version: 1, cancellationToken: cancellationToken).DynamicContext(); - if (res < 1 || res > StreamSerializer.VERSION) throw new InvalidDataException($"Invalid or unsupported stream serializer version #{res}"); - return res; - }); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) + { + int res = await ReadNumberAsync(stream, version: 1, cancellationToken: cancellationToken).DynamicContext(); + if (res < 1 || (res & byte.MaxValue) > StreamSerializer.VERSION) + throw new SerializerException($"Invalid or unsupported stream serializer version #{res}", new InvalidDataException()); + return res; + } /// /// Read serialized data @@ -61,22 +68,28 @@ public static Task ReadSerializerVersionAsync(this Stream stream, Cancellat /// Stream /// Length in bytes /// Array pool - /// Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!) + /// Serialized data (a pool array which needs to be returned to the pool ( will be used per default) after use and might + /// be larger than the given length!) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool? pool = null) { - byte[] res = (pool ?? StreamSerializer.BufferPool).Rent(len); + pool ??= StreamSerializer.BufferPool; + byte[] res = pool.Rent(len); try { return SerializerException.Wrap(() => { int red = stream.Read(res.AsSpan(0, len)); - if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + if (red != len) throw new IOException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); return res; }); } catch { - (pool ?? StreamSerializer.BufferPool).Return(res); + pool.Return(res, clearArray: false); throw; } } @@ -88,22 +101,28 @@ public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPoolLength in bytes /// Array pool /// Cancellation token - /// Serialized data (a pool array which needs to be returned to the pool after use and might be larger than the given length!) + /// Serialized data (a pool array which needs to be returned to the pool ( will be used per default) after use and might + /// be larger than the given length!) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task ReadSerializedDataAsync(this Stream stream, int len, ArrayPool? pool = null, CancellationToken cancellationToken = default) { - byte[] res = (pool ?? StreamSerializer.BufferPool).Rent(len); + pool ??= StreamSerializer.BufferPool; + byte[] res = pool.Rent(len); try { return await SerializerException.WrapAsync(async () => { int red = await stream.ReadAsync(res.AsMemory(0, len), cancellationToken).DynamicContext(); - if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + if (red != len) throw new IOException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); return res; }).DynamicContext(); } catch { - (pool ?? StreamSerializer.BufferPool).Return(res); + pool.Return(res, clearArray: false); throw; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index 32e345e..f83288e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -12,27 +13,26 @@ public static partial class StreamExtensions /// Stream /// Object /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteAny(this Stream stream, object obj) - => SerializerException.Wrap(() => - { - (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); - using (RentedArray poolData = new(1)) + { + (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); + Write(stream, (byte)objType); + if (writeType) WriteString(stream, type.ToString()); + if (writeObject) + if (objType.IsNumber()) + { + WriteNumber(stream, obj); + } + else { - poolData[0] = (byte)objType; - stream.Write(poolData.Span); + WriteObject(stream, obj); } - if (writeType) WriteString(stream, type.ToString()); - if (writeObject) - if (objType.IsNumber()) - { - WriteNumber(stream, obj); - } - else - { - WriteObject(stream, obj); - } - return stream; - }); + return stream; + } /// /// Write any object @@ -40,26 +40,25 @@ public static Stream WriteAny(this Stream stream, object obj) /// Stream /// Object /// Cancellation token - public static Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); - using (RentedArray poolData = new(1)) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + { + (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + if (writeType) await WriteStringAsync(stream, type.ToString(), cancellationToken).DynamicContext(); + if (writeObject) + if (objType.IsNumber()) { - poolData[0] = (byte)objType; - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext(); } - if (writeType) await WriteStringAsync(stream, type.ToString(), cancellationToken).DynamicContext(); - if (writeObject) - if (objType.IsNumber()) - { - await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext(); - } - else - { - await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); - } - }); + else + { + await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); + } + } /// /// Write any object @@ -68,21 +67,21 @@ public static Task WriteAnyAsync(this Stream stream, object obj, CancellationTok /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteAnyNullable(this Stream stream, object? obj) - => SerializerException.Wrap(() => + { + if (obj == null) { - if (obj == null) - { - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)ObjectTypes.Null; - stream.Write(poolData.Span); - } - else - { - WriteAny(stream, obj); - } - return stream; - }); + Write(stream, (byte)ObjectTypes.Null); + } + else + { + WriteAny(stream, obj); + } + return stream; + } /// /// Write any object @@ -91,19 +90,19 @@ public static Stream WriteAnyNullable(this Stream stream, object? obj) /// Object /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + { + if (obj == null) { - if (obj == null) - { - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)ObjectTypes.Null; - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); - } - }); + await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs index 1adcf97..d4dc4f7 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -13,12 +14,14 @@ public static partial class StreamExtensions /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteArray(this Stream stream, Array value) => SerializerException.Wrap(() => { - if (value.GetType().GetElementType() == typeof(byte)) return WriteBytes(stream, (value as byte[])!); WriteNumber(stream, value.Length); - if (value.Length == 0) return stream; + if (value.LongLength == 0) return stream; foreach (object element in value) WriteObject(stream, element); return stream; }); @@ -30,14 +33,12 @@ public static Stream WriteArray(this Stream stream, Array value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { - if (value.GetType().GetElementType() == typeof(byte)) - { - await WriteBytesAsync(stream, (value as byte[])!, cancellationToken).DynamicContext(); - return; - } await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); if (value.Length == 0) return; foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); @@ -50,8 +51,11 @@ public static Task WriteArrayAsync(this Stream stream, Array value, Cancellation /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteArrayNullable(this Stream stream, Array? value) - => WriteIfNull(stream, value, () => WriteArray(stream, value!)); + => WriteNullableCount(stream, value?.Length, () => WriteFixedArray(stream, value!)); /// /// Write @@ -60,8 +64,22 @@ public static Stream WriteArrayNullable(this Stream stream, Array? value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, value, () => WriteArrayAsync(stream, value!, cancellationToken), cancellationToken); + => WriteNullableCountAsync(stream, value?.Length, () => WriteFixedArrayAsync(stream, value!, cancellationToken), cancellationToken); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteFixedArray(this Stream stream, Span value) => WriteFixedArray(stream, (ReadOnlySpan)value); /// /// Write @@ -71,7 +89,10 @@ public static Task WriteArrayNullableAsync(this Stream stream, Array? value, Can /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] - public static Stream WriteFixedArray(this Stream stream, Span value) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteFixedArray(this Stream stream, ReadOnlySpan value) { try { @@ -85,10 +106,28 @@ public static Stream WriteFixedArray(this Stream stream, Span value) } catch (Exception ex) { - throw new SerializerException(message: null, ex); + throw SerializerException.From(ex); } } + /// + /// Write + /// + /// Stream + /// Value to write + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteFixedArray(this Stream stream, Array value) + => SerializerException.Wrap(() => + { + foreach (object element in value) + WriteObject(stream, element!); + return stream; + }); + /// /// Write /// @@ -96,11 +135,43 @@ public static Stream WriteFixedArray(this Stream stream, Span value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteFixedArrayAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) + => WriteFixedArrayAsync(stream, (ReadOnlyMemory)value, cancellationToken); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { for (int i = 0; i < value.Length; i++) await WriteObjectAsync(stream, value.Span[i]!, cancellationToken).DynamicContext(); }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => + { + foreach (object element in value) + await WriteObjectAsync(stream, element!, cancellationToken).DynamicContext(); + }); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index bf7c117..34e96cd 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; @@ -14,6 +15,9 @@ public static partial class StreamExtensions /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, bool value) { byte[] buffer = StreamSerializer.BufferPool.Rent(minimumLength: 1); @@ -28,6 +32,9 @@ public static Stream Write(this Stream stream, bool value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = default) { byte[] buffer = StreamSerializer.BufferPool.Rent(minimumLength: 1); @@ -42,6 +49,9 @@ public static async Task WriteAsync(this Stream stream, bool value, Cancellation /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteNullable(this Stream stream, bool? value) { ObjectTypes type; @@ -67,6 +77,9 @@ public static Stream WriteNullable(this Stream stream, bool? value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = default) { ObjectTypes type; @@ -92,6 +105,7 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, Cancellat /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Stream Write(this Stream stream, sbyte value) => Write(stream, (byte)value); /// @@ -101,6 +115,7 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, Cancellat /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = default) => WriteAsync(stream, (byte)value, cancellationToken); @@ -110,7 +125,6 @@ public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, sbyte? value) => WriteNullableNumeric(stream, value, sbyte.MinValue, sbyte.MaxValue, () => Write(stream, value!.Value)); @@ -120,7 +134,6 @@ public static Stream WriteNullable(this Stream stream, sbyte? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, sbyte.MinValue, sbyte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -131,6 +144,9 @@ public static Task WriteNullableAsync(this Stream stream, sbyte? value, Cancella /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, byte value) => SerializerException.Wrap(() => { @@ -146,6 +162,9 @@ public static Stream Write(this Stream stream, byte value) /// Cancellation token #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = default) #pragma warning restore IDE0060 { @@ -159,7 +178,6 @@ public static async Task WriteAsync(this Stream stream, byte value, Cancellation /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, byte? value) => WriteNullableNumeric(stream, value, byte.MinValue, byte.MaxValue, () => Write(stream, value!.Value)); @@ -169,7 +187,6 @@ public static Stream WriteNullable(this Stream stream, byte? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, byte.MinValue, byte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -180,6 +197,9 @@ public static Task WriteNullableAsync(this Stream stream, byte? value, Cancellat /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, short value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short)); @@ -190,6 +210,9 @@ public static Stream Write(this Stream stream, short value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short), cancellationToken: cancellationToken); @@ -199,7 +222,6 @@ public static Task WriteAsync(this Stream stream, short value, CancellationToken /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, short? value) => WriteNullableNumeric(stream, value, short.MinValue, short.MaxValue, () => Write(stream, value!.Value)); @@ -209,7 +231,6 @@ public static Stream WriteNullable(this Stream stream, short? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, short.MinValue, short.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -220,6 +241,9 @@ public static Task WriteNullableAsync(this Stream stream, short? value, Cancella /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, ushort value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort)); @@ -230,6 +254,9 @@ public static Stream Write(this Stream stream, ushort value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort), cancellationToken: cancellationToken); @@ -239,7 +266,6 @@ public static Task WriteAsync(this Stream stream, ushort value, CancellationToke /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, ushort? value) => WriteNullableNumeric(stream, value, ushort.MinValue, ushort.MaxValue, () => Write(stream, value!.Value)); @@ -249,7 +275,6 @@ public static Stream WriteNullable(this Stream stream, ushort? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, ushort.MinValue, ushort.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -260,6 +285,9 @@ public static Task WriteNullableAsync(this Stream stream, ushort? value, Cancell /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, int value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int)); @@ -270,6 +298,9 @@ public static Stream Write(this Stream stream, int value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int), cancellationToken: cancellationToken); @@ -279,7 +310,6 @@ public static Task WriteAsync(this Stream stream, int value, CancellationToken c /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, int? value) => WriteNullableNumeric(stream, value, int.MinValue, int.MaxValue, () => Write(stream, value!.Value)); @@ -289,7 +319,6 @@ public static Stream WriteNullable(this Stream stream, int? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, int.MinValue, int.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -300,6 +329,9 @@ public static Task WriteNullableAsync(this Stream stream, int? value, Cancellati /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, uint value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint)); @@ -310,6 +342,9 @@ public static Stream Write(this Stream stream, uint value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint), cancellationToken: cancellationToken); @@ -319,7 +354,6 @@ public static Task WriteAsync(this Stream stream, uint value, CancellationToken /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, uint? value) => WriteNullableNumeric(stream, value, uint.MinValue, uint.MaxValue, () => Write(stream, value!.Value)); @@ -329,7 +363,6 @@ public static Stream WriteNullable(this Stream stream, uint? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, uint.MinValue, uint.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -340,6 +373,9 @@ public static Task WriteNullableAsync(this Stream stream, uint? value, Cancellat /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, long value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long)); @@ -350,6 +386,9 @@ public static Stream Write(this Stream stream, long value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long), cancellationToken: cancellationToken); @@ -359,7 +398,6 @@ public static Task WriteAsync(this Stream stream, long value, CancellationToken /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, long? value) => WriteNullableNumeric(stream, value, long.MinValue, long.MaxValue, () => Write(stream, value!.Value)); @@ -369,7 +407,6 @@ public static Stream WriteNullable(this Stream stream, long? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, long.MinValue, long.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -380,6 +417,9 @@ public static Task WriteNullableAsync(this Stream stream, long? value, Cancellat /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, ulong value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong)); @@ -390,6 +430,9 @@ public static Stream Write(this Stream stream, ulong value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong), cancellationToken: cancellationToken); @@ -399,7 +442,6 @@ public static Task WriteAsync(this Stream stream, ulong value, CancellationToken /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, ulong? value) => WriteNullableNumeric(stream, value, ulong.MinValue, ulong.MaxValue, () => Write(stream, value!.Value)); @@ -409,7 +451,6 @@ public static Stream WriteNullable(this Stream stream, ulong? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, ulong.MinValue, ulong.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -420,6 +461,9 @@ public static Task WriteNullableAsync(this Stream stream, ulong? value, Cancella /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, float value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float)); @@ -430,6 +474,9 @@ public static Stream Write(this Stream stream, float value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float), cancellationToken: cancellationToken); @@ -439,7 +486,6 @@ public static Task WriteAsync(this Stream stream, float value, CancellationToken /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, float? value) => WriteNullableNumeric(stream, value, float.MinValue, float.MaxValue, () => Write(stream, value!.Value)); @@ -449,7 +495,6 @@ public static Stream WriteNullable(this Stream stream, float? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, float.MinValue, float.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -460,6 +505,9 @@ public static Task WriteNullableAsync(this Stream stream, float? value, Cancella /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, double value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double)); @@ -470,6 +518,9 @@ public static Stream Write(this Stream stream, double value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double), cancellationToken: cancellationToken); @@ -479,7 +530,6 @@ public static Task WriteAsync(this Stream stream, double value, CancellationToke /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, double? value) => WriteNullableNumeric(stream, value, double.MinValue, double.MaxValue, () => Write(stream, value!.Value)); @@ -489,7 +539,6 @@ public static Stream WriteNullable(this Stream stream, double? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, double.MinValue, double.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -500,6 +549,9 @@ public static Task WriteNullableAsync(this Stream stream, double? value, Cancell /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream Write(this Stream stream, decimal value) => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal)); @@ -510,6 +562,9 @@ public static Stream Write(this Stream stream, decimal value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal), cancellationToken: cancellationToken); @@ -519,7 +574,6 @@ public static Task WriteAsync(this Stream stream, decimal value, CancellationTok /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteNullable(this Stream stream, decimal? value) => WriteNullableNumeric(stream, value, decimal.MinValue, decimal.MaxValue, () => Write(stream, value!.Value)); @@ -529,7 +583,6 @@ public static Stream WriteNullable(this Stream stream, decimal? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, decimal.MinValue, decimal.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -543,6 +596,9 @@ public static Task WriteNullableAsync(this Stream stream, decimal? value, Cancel /// Maximum /// Action to execute if the value can't be handled using a default handler /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Stream WriteNullableNumeric(Stream stream, T? value, T min, T max, Action action) where T:struct, IConvertible { NumberTypes type; @@ -566,6 +622,9 @@ private static Stream WriteNullableNumeric(Stream stream, T? value, T min, T /// Maximum /// Action to execute if the value can't be handled using a default handler /// Cancellation token +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static async Task WriteNullableNumericAsync(Stream stream, T? value, T min, T max, Func action, CancellationToken cancellationToken) where T : struct, IConvertible { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs index 88c3f6d..e764120 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -13,6 +14,7 @@ public static partial class StreamExtensions /// Value to write /// Stream [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Stream WriteBytes(this Stream stream, Span value) => WriteBytes(stream, (ReadOnlySpan)value); /// @@ -22,6 +24,9 @@ public static partial class StreamExtensions /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) { try @@ -30,9 +35,13 @@ public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) if (value.Length > 0) stream.Write(value); return stream; } + catch (SerializerException) + { + throw; + } catch (Exception ex) { - throw new SerializerException(message: null, ex); + throw SerializerException.From(ex); } } @@ -43,6 +52,7 @@ public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteBytesAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) => WriteBytesAsync(stream, (ReadOnlyMemory)value, cancellationToken); @@ -53,6 +63,9 @@ public static Task WriteBytesAsync(this Stream stream, Memory value, Cance /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { @@ -67,8 +80,11 @@ public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory valu /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteBytesNullable(this Stream stream, byte[]? value) - => WriteIfNull(stream, value, () => WriteBytes(stream, value!)); + => WriteNullableCount(stream, value?.Length, () => SerializerException.Wrap(() => stream.Write(value))); /// /// Write @@ -77,7 +93,15 @@ public static Stream WriteBytesNullable(this Stream stream, byte[]? value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteBytesNullableAsync(this Stream stream, byte[]? value, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, value, () => WriteBytesAsync(stream, value!, cancellationToken), cancellationToken); + => WriteNullableCountAsync( + stream, + value?.Length, + () => SerializerException.WrapAsync(() => stream.WriteAsync(value, cancellationToken).AsTask()), + cancellationToken + ); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index edaad5c..1d48fcd 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -14,18 +15,20 @@ public static partial class StreamExtensions /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteDict(this Stream stream, IDictionary value) - => SerializerException.Wrap(() => + { + WriteNumber(stream, value.Count); + if (value.Count == 0) return stream; + foreach (object key in value.Keys) { - WriteNumber(stream, value.Count); - if (value.Count == 0) return stream; - foreach (object key in value.Keys) - { - WriteObject(stream, key); - WriteObject(stream, value[key]!); - } - return stream; - }); + WriteObject(stream, key); + WriteObject(stream, value[key]!); + } + return stream; + } /// /// Write @@ -34,17 +37,19 @@ public static Stream WriteDict(this Stream stream, IDictionary value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = default) + { + await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); + if (value.Count == 0) return; + foreach (object key in value.Keys) { - await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); - if (value.Count == 0) return; - foreach (object key in value.Keys) - { - await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); - await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); - } - }); + await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); + await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); + } + } /// /// Write @@ -53,8 +58,20 @@ public static Task WriteDictAsync(this Stream stream, IDictionary value, Cancell /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteDictNullable(this Stream stream, IDictionary? value) - => WriteIfNull(stream, value, () => WriteDict(stream, value!)); + => WriteNullableCount(stream, value?.Count, () => + { + WriteNumber(stream, value!.Count); + if (value.Count == 0) return; + foreach (object key in value.Keys) + { + WriteObject(stream, key); + WriteObject(stream, value[key]!); + } + }); /// /// Write @@ -63,7 +80,19 @@ public static Stream WriteDictNullable(this Stream stream, IDictionary? value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, value, () => WriteDictAsync(stream, value!, cancellationToken), cancellationToken); + => WriteNullableCountAsync(stream, value?.Count, async () => + { + await WriteNumberAsync(stream, value!.Count, cancellationToken).DynamicContext(); + if (value.Count == 0) return; + foreach (object key in value.Keys) + { + await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); + await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); + } + }, cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index 86528c3..b22b460 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -14,12 +15,14 @@ public static partial class StreamExtensions /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteEnum(this Stream stream, T value) where T : struct, Enum - => SerializerException.Wrap(() => - { - if (ObjectHelper.AreEqual(value, default(T))) return Write(stream, (byte)NumberTypes.Default); - return WriteNumber(stream, Convert.ChangeType(value, typeof(T).GetEnumUnderlyingType())); - }); + { + if (ObjectHelper.AreEqual(value, default(T))) return Write(stream, (byte)NumberTypes.Default); + return WriteNumber(stream, Convert.ChangeType(value, typeof(T).GetEnumUnderlyingType())); + } /// /// Write @@ -28,14 +31,16 @@ public static Stream WriteEnum(this Stream stream, T value) where T : struct, /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteEnum(this Stream stream, object value) - => SerializerException.Wrap(() => - { - Type enumType = value.GetType(); - ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value"); - if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) return Write(stream, (byte)NumberTypes.Default); - return WriteNumber(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType())); - }); + { + Type enumType = value.GetType(); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value")); + if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) return Write(stream, (byte)NumberTypes.Default); + return WriteNumber(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType())); + } /// /// Write @@ -45,16 +50,18 @@ public static Stream WriteEnum(this Stream stream, object value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum - => SerializerException.WrapAsync(async () => +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum + { + if (ObjectHelper.AreEqual(value, default(T))) { - if (ObjectHelper.AreEqual(value, default(T))) - { - await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); - return; - } - await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), cancellationToken).DynamicContext(); - }); + await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); + return; + } + await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + } /// /// Write @@ -63,20 +70,22 @@ public static Task WriteEnumAsync(this Stream stream, T value, CancellationTo /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = default) + { + Type enumType = value.GetType(); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value")); + if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) + { + await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); + } + else { - Type enumType = value.GetType(); - ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value"); - if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) - { - await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); - } - else - { - await WriteNumberAsync(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), cancellationToken).DynamicContext(); - } - }); + await WriteNumberAsync(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + } + } /// /// Write @@ -86,6 +95,9 @@ public static Task WriteEnumAsync(this Stream stream, object value, Cancellation /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteEnumNullable(this Stream stream, T? value) where T : struct, Enum => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteEnum(stream, value.Value); @@ -96,6 +108,9 @@ public static Stream WriteEnumNullable(this Stream stream, T? value) where T /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteEnumNullable(this Stream stream, object? value) => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteEnum(stream, value); @@ -107,6 +122,9 @@ public static Stream WriteEnumNullable(this Stream stream, object? value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteEnumNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum => value == null ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) @@ -119,6 +137,9 @@ public static Task WriteEnumNullableAsync(this Stream stream, T? value, Cance /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteEnumNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) => value == null ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index a5eeb83..1aba3c8 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -14,15 +15,16 @@ public static partial class StreamExtensions /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteList(this Stream stream, IList value) - => SerializerException.Wrap(() => - { - if (value.GetType().GetGenericArgumentsCached()[0] == typeof(byte)) return WriteBytes(stream, (value as byte[])!); - WriteNumber(stream, value.Count); - if (value.Count == 0) return stream; - foreach (object element in value) WriteObject(stream, element); - return stream; - }); + { + WriteNumber(stream, value.Count); + if (value.Count == 0) return stream; + foreach (object element in value) WriteObject(stream, element); + return stream; + } /// /// Write @@ -31,18 +33,15 @@ public static Stream WriteList(this Stream stream, IList value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - if (value.GetType().GetGenericArgumentsCached()[0] == typeof(byte)) - { - await WriteBytesAsync(stream, (value as byte[])!, cancellationToken).DynamicContext(); - return; - } - await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); - if (value.Count == 0) return; - foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); - }); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = default) + { + await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); + if (value.Count == 0) return; + foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + } /// /// Write @@ -51,8 +50,15 @@ public static Task WriteListAsync(this Stream stream, IList value, CancellationT /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteListNullable(this Stream stream, IList? value) - => WriteIfNull(stream, value, () => WriteList(stream, value!)); + => WriteNullableCount(stream, value?.Count, () => + { + if (value!.Count == 0) return; + foreach (object element in value) WriteObject(stream, element); + }); /// /// Write @@ -61,7 +67,14 @@ public static Stream WriteListNullable(this Stream stream, IList? value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteListNullableAsync(this Stream stream, IList? value, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, value, () => WriteListAsync(stream, value!, cancellationToken), cancellationToken); + => WriteNullableCountAsync(stream, value?.Count, async () => + { + if (value!.Count == 0) return; + foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + }, cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs index 8429a58..e73b59c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -31,7 +32,10 @@ public static Stream WriteNumber(this Stream stream, T value) where T : struc /// Value to write /// Number type /// Stream - public static Stream WriteNumberInt(Stream stream, object value, NumberTypes? type) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static Stream WriteNumberInt(Stream stream, object value, NumberTypes? type) => SerializerException.Wrap(() => { if (type == null) (_, type) = value.GetNumberAndType(); @@ -103,6 +107,9 @@ public static Task WriteNumberAsync(this Stream stream, object value, Cancellati /// Value to write /// Number type /// Cancellation token +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes? type, CancellationToken cancellationToken) => SerializerException.WrapAsync(async () => { @@ -156,6 +163,9 @@ private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteNumberNullable(this Stream stream, T? value) where T : struct, IConvertible => value == null ? WriteEnum(stream, NumberTypes.Null) : WriteNumber(stream, value.Value); @@ -166,6 +176,9 @@ public static Stream WriteNumberNullable(this Stream stream, T? value) where /// Value to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteNumberNullable(this Stream stream, object? value) => value == null ? WriteEnum(stream, NumberTypes.Null) : WriteNumber(stream, value); @@ -177,6 +190,9 @@ public static Stream WriteNumberNullable(this Stream stream, object? value) /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, IConvertible => value == null @@ -190,6 +206,9 @@ public static Task WriteNumberNullableAsync(this Stream stream, T? value, Can /// Value to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteNumberNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) => value == null ? WriteEnumAsync(stream, NumberTypes.Null, cancellationToken) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index 9a4774f..5438130 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -1,5 +1,6 @@ using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; @@ -15,18 +16,20 @@ public static partial class StreamExtensions /// Object to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteObject(this Stream stream, object obj) - => SerializerException.Wrap(() => - { - ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj); - if (obj is IStreamSerializer streamSerializer) - return WriteSerialized(stream, streamSerializer); - else if (StreamSerializer.FindSerializer(obj.GetType()) is not StreamSerializer.Serialize_Delegate serializer) - return WriteAnyObject(stream, obj); - else - SerializerException.Wrap(() => serializer(stream, obj)); - return stream; - }); + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj)); + if (obj is IStreamSerializer streamSerializer) + return WriteSerialized(stream, streamSerializer); + else if (StreamSerializer.FindSerializer(obj.GetType()) is not StreamSerializer.Serialize_Delegate serializer) + return WriteAnyObject(stream, obj); + else + SerializerException.Wrap(() => serializer(stream, obj)); + return stream; + } /// /// Write @@ -35,17 +38,19 @@ public static Stream WriteObject(this Stream stream, object obj) /// Object to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj); - if (obj is IStreamSerializer streamSerializer) - await WriteSerializedAsync(stream, streamSerializer, cancellationToken).DynamicContext(); - else if (StreamSerializer.FindAsyncSerializer(obj.GetType()) is not StreamSerializer.AsyncSerialize_Delegate serializer) - await WriteAnyObjectAsync(stream, obj, cancellationToken).DynamicContext(); - else - await SerializerException.WrapAsync(async () => await serializer(stream, obj, cancellationToken).DynamicContext()).DynamicContext(); - }); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj)); + if (obj is IStreamSerializer streamSerializer) + await WriteSerializedAsync(stream, streamSerializer, cancellationToken).DynamicContext(); + else if (StreamSerializer.FindAsyncSerializer(obj.GetType()) is not StreamSerializer.AsyncSerialize_Delegate serializer) + await WriteAnyObjectAsync(stream, obj, cancellationToken).DynamicContext(); + else + await SerializerException.WrapAsync(async () => await serializer(stream, obj, cancellationToken).DynamicContext()).DynamicContext(); + } /// /// Write @@ -54,8 +59,11 @@ public static Task WriteObjectAsync(this Stream stream, object obj, Cancellation /// Object to write /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteObjectNullable(this Stream stream, object? obj) - => WriteIfNull(stream, obj, () => WriteObject(stream, obj!)); + => WriteIfNotNull(stream, obj, () => WriteObject(stream, obj!)); /// /// Write @@ -64,8 +72,11 @@ public static Stream WriteObjectNullable(this Stream stream, object? obj) /// Object to write /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); + => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); /// /// Write any object @@ -74,30 +85,29 @@ public static Task WriteObjectNullableAsync(this Stream stream, object? obj, Can /// Object /// Stream public static Stream WriteAnyObject(this Stream stream, object obj) - => SerializerException.Wrap(() => + { + if (obj is IStreamSerializer serializable) return WriteSerialized(stream, serializable); + Type type = obj.GetType(); + PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + WriteNumberNullable(stream, attr?.Version); + WriteNumber(stream, pis.Length); + foreach (PropertyInfoExt pi in pis) { - if (obj is IStreamSerializer serializable) return WriteSerialized(stream, serializable); - Type type = obj.GetType(); - PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); - StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - WriteNumberNullable(stream, attr?.Version); - WriteNumber(stream, pis.Length); - foreach (PropertyInfoExt pi in pis) + if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) + Write(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b))); + if (pi.Property.PropertyType.IsNullable()) { - if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) - Write(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b))); - if (pi.Property.PropertyType.IsNullable()) - { - WriteAnyNullable(stream, pi.Getter!(obj)!); - } - else - { - WriteAny(stream, pi.Getter!(obj)!); - } + WriteAnyNullable(stream, pi.Getter!(obj)!); } - return stream; - }); + else + { + WriteAny(stream, pi.Getter!(obj)!); + } + } + return stream; + } /// /// Write any object @@ -105,34 +115,33 @@ public static Stream WriteAnyObject(this Stream stream, object obj) /// Stream /// Object /// Cancellation token - public static Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => + public static async Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + { + if (obj is IStreamSerializer serializable) { - if (obj is IStreamSerializer serializable) + await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); + return; + } + Type type = obj.GetType(); + PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); + bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); + await WriteNumberNullableAsync(stream, attr?.Version, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, pis.Length, cancellationToken).DynamicContext(); + foreach (PropertyInfoExt pi in pis) + { + if (useChecksum && !(pi.Property.GetCustomAttribute()?.SkipPropertyNameChecksum ?? false)) + await WriteAsync(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), cancellationToken).DynamicContext(); + if (pi.Property.PropertyType.IsNullable()) { - await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); - return; + await WriteAnyNullableAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); } - Type type = obj.GetType(); - PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); - StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); - bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - await WriteNumberNullableAsync(stream, attr?.Version, cancellationToken).DynamicContext(); - await WriteNumberAsync(stream, pis.Length, cancellationToken).DynamicContext(); - foreach (PropertyInfoExt pi in pis) + else { - if (useChecksum && !(pi.Property.GetCustomAttribute()?.SkipPropertyNameChecksum ?? false)) - await WriteAsync(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), cancellationToken).DynamicContext(); - if (pi.Property.PropertyType.IsNullable()) - { - await WriteAnyNullableAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); - } + await WriteAnyAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); } - }); + } + } /// /// Write any object @@ -141,8 +150,11 @@ public static Task WriteAnyObjectAsync(this Stream stream, object obj, Cancellat /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteAnyObjectNullable(this Stream stream, object? obj) - => WriteIfNull(stream, obj, () => WriteAnyObject(stream, obj!)); + => WriteIfNotNull(stream, obj, () => WriteAnyObject(stream, obj!)); /// /// Write any object @@ -151,7 +163,10 @@ public static Stream WriteAnyObjectNullable(this Stream stream, object? obj) /// Object /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteAnyObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); + => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index 0edfae3..073bf12 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; namespace wan24.StreamSerializerExtensions { @@ -12,6 +13,9 @@ public static partial class StreamExtensions /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj) => SerializerException.Wrap(() => { @@ -19,6 +23,42 @@ public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj) return stream; }); + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerialized(this Stream stream, T obj) where T : class, IStreamSerializer + => SerializerException.Wrap(() => + { + obj.Serialize(stream); + return stream; + }); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerializedStruct(this Stream stream, T obj) where T : struct, IStreamSerializer + => SerializerException.Wrap(() => + { + obj.Serialize(stream); + return stream; + }); + /// /// Write /// @@ -26,9 +66,40 @@ public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj) /// Object /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = default) => SerializerException.Wrap(() => obj.SerializeAsync(stream, cancellationToken)); + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer + => SerializerException.Wrap(() => obj.SerializeAsync(stream, cancellationToken)); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedStructAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + => SerializerException.Wrap(() => obj.SerializeAsync(stream, cancellationToken)); + /// /// Write /// @@ -36,8 +107,39 @@ public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer ob /// Object /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer? obj) - => WriteIfNull(stream, obj, () => WriteSerialized(stream, obj!)); + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!)); + + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerializedNullable(this Stream stream, T? obj) where T : class, IStreamSerializer + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!)); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerializedNullableStruct(this Stream stream, T? obj) where T : struct, IStreamSerializer + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!.Value)); /// /// Write @@ -46,7 +148,38 @@ public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializ /// Object /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); + + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!.Value, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs index 6baa1ae..add6341 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -1,5 +1,6 @@ using System.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -52,6 +53,9 @@ public static Stream WriteStream(this Stream stream, Stream source, ArrayPoolChunk length in bytes /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool? pool = null, int? chunkLength = null) => source == null ? WriteNumber(stream, long.MinValue) : WriteStream(stream, source, pool, chunkLength); @@ -106,6 +110,9 @@ public static Task WriteStreamAsync( /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteStreamNullableAsync( this Stream stream, Stream? source, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index 1e6b0ea..b8bdfcb 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -1,4 +1,5 @@ using System.Runtime; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; @@ -13,14 +14,8 @@ public static partial class StreamExtensions /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteString(this Stream stream, string value) - => SerializerException.Wrap(() => - { - using RentedArray buffer = new(value.Length << 2, clean: false); - WriteBytes(stream, buffer.Span[..value.GetBytes(buffer)]); - return stream; - }); + => WriteString(stream, value, lenShift: 2, (buffer) => value.GetBytes(buffer)); /// /// Write @@ -28,13 +23,8 @@ public static Stream WriteString(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - using RentedArray buffer = new(value.Length << 2, clean: false); - await WriteBytesAsync(stream, buffer.Memory[..value.GetBytes(buffer)], cancellationToken).DynamicContext(); - }); + => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes(buffer), cancellationToken); /// /// Write @@ -42,9 +32,8 @@ public static Task WriteStringAsync(this Stream stream, string value, Cancellati /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteStringNullable(this Stream stream, string? value) - => WriteIfNull(stream, value, () => WriteString(stream, value!)); + => WriteNullableString(stream, value, lenShift: 2, (buffer) => value!.GetBytes(buffer)); /// /// Write @@ -52,9 +41,8 @@ public static Stream WriteStringNullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteStringNullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, value, async () => await WriteStringAsync(stream, value!, cancellationToken).DynamicContext(), cancellationToken); + => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes(buffer), cancellationToken); /// /// Write UTF-16 (little endian) string @@ -62,14 +50,8 @@ public static Task WriteStringNullableAsync(this Stream stream, string? value, C /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteString16(this Stream stream, string value) - => SerializerException.Wrap(() => - { - using RentedArray buffer = new(value.Length << 2, clean: false); - WriteBytes(stream, buffer.Span[..value.GetBytes16(buffer)]); - return stream; - }); + => WriteString(stream, value, lenShift: 1, (buffer) => value.GetBytes16(buffer)); /// /// Write UTF-16 (little endian) string @@ -77,13 +59,8 @@ public static Stream WriteString16(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - using RentedArray buffer = new(value.Length << 2, clean: false); - await WriteBytesAsync(stream, buffer.Memory[..value.GetBytes16(buffer)], cancellationToken).DynamicContext(); - }); + => WriteStringAsync(stream, value, lenShift: 1, (buffer) => value.GetBytes16(buffer), cancellationToken); /// /// Write UTF-16 (little endian) string @@ -91,9 +68,8 @@ public static Task WriteString16Async(this Stream stream, string value, Cancella /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteString16Nullable(this Stream stream, string? value) - => WriteIfNull(stream, value, () => WriteString16(stream, value!)); + => WriteNullableString(stream, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer)); /// /// Write UTF-16 (little endian) string @@ -101,9 +77,8 @@ public static Stream WriteString16Nullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteString16NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, value, async () => await WriteString16Async(stream, value!, cancellationToken).DynamicContext(), cancellationToken); + => WriteNullableStringAsync(stream, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer), cancellationToken); /// /// Write UTF-32 (little endian) string @@ -111,14 +86,8 @@ public static Task WriteString16NullableAsync(this Stream stream, string? value, /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteString32(this Stream stream, string value) - => SerializerException.Wrap(() => - { - using RentedArray buffer = new(value.Length << 2, clean: false); - WriteBytes(stream, buffer.Span[..value.GetBytes32(buffer)]); - return stream; - }); + => WriteString(stream, value, lenShift: 2, (buffer) => value.GetBytes32(buffer)); /// /// Write UTF-32 (little endian) string @@ -126,13 +95,8 @@ public static Stream WriteString32(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - using RentedArray buffer = new(value.Length << 2, clean: false); - await WriteBytesAsync(stream, buffer.Memory[..value.GetBytes32(buffer)], cancellationToken).DynamicContext(); - }); + => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes32(buffer), cancellationToken); /// /// Write UTF-32 (little endian) string @@ -140,9 +104,8 @@ public static Task WriteString32Async(this Stream stream, string value, Cancella /// Stream /// Value to write /// Stream - [TargetedPatchingOptOut("Tiny method")] public static Stream WriteString32Nullable(this Stream stream, string? value) - => WriteIfNull(stream, value, () => WriteString32(stream, value!)); + => WriteNullableString(stream, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer)); /// /// Write UTF-32 (little endian) string @@ -150,8 +113,83 @@ public static Stream WriteString32Nullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] public static Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - => WriteIfNullAsync(stream, value, async () => await WriteString32Async(stream, value!, cancellationToken).DynamicContext(), cancellationToken); + => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer), cancellationToken); + + /// + /// Write a string + /// + /// Stream + /// Value + /// Buffer length bit-shifting value + /// Writing action to execute + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static Stream WriteString(Stream stream, string value, int lenShift, Func action) + { + WriteNumber(stream, value); + if (value.Length == 0) return stream; + byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); + return WriteSerializedData(stream, data, action(data)); + } + + /// + /// Write a string + /// + /// Stream + /// Value + /// Buffer length bit-shifting value + /// Writing action to execut + /// Cancellation token +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task WriteStringAsync(Stream stream, string value, int lenShift, Func action, CancellationToken cancellationToken) + { + await WriteNumberAsync(stream, value, cancellationToken).DynamicContext(); + if (value.Length == 0) return; + byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); + await WriteSerializedDataAsync(stream, data, action(data), cancellationToken: cancellationToken).DynamicContext(); + } + + /// + /// Write a nullable string + /// + /// Stream + /// Value + /// Buffer length bit-shifting value + /// Writing action to execute if the string isn't + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static Stream WriteNullableString(Stream stream, string? value, int lenShift, Func action) + { + WriteNumberNullable(stream, value); + if (value == null || value.Length == 0) return stream; + byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); + return WriteSerializedData(stream, data, action(data), StreamSerializer.BufferPool); + } + + /// + /// Write a nullable string + /// + /// Stream + /// Value + /// Buffer length bit-shifting value + /// Writing action to execute if the string isn't + /// Cancellation token +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task WriteNullableStringAsync(Stream stream, string? value, int lenShift, Func action, CancellationToken cancellationToken) + { + await WriteNumberNullableAsync(stream, value, cancellationToken).DynamicContext(); + if (value == null || value.Length == 0) return; + byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); + await WriteSerializedDataAsync(stream, data, action(data), StreamSerializer.BufferPool, cancellationToken).DynamicContext(); + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs index e828284..177ad4c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs @@ -1,5 +1,6 @@ using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using wan24.Core; @@ -16,6 +17,9 @@ public static partial class StreamExtensions /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true) => SerializerException.Wrap(() => { @@ -39,13 +43,63 @@ public static Stream WriteStruct(this Stream stream, object value, bool forceLit /// /// Write a struct /// + /// Structure type /// Stream /// Struct /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteStruct(this Stream stream, T value, bool forceLittleEndian = true) where T : struct + => SerializerException.Wrap(() => + { + Type structType = typeof(T); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); + try + { + Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); + } + finally + { + gch.Free(); + } + if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) + ConvertStructureEndianess(structType, buffer.Memory, attr); + return WriteBytes(stream, buffer.Span); + }); + + /// + /// Write a struct + /// + /// Stream + /// Struct + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteStructNullable(this Stream stream, object? value, bool forceLittleEndian = true) - => WriteIfNull(stream, value, () => WriteStruct(stream, value!, forceLittleEndian)); + => WriteIfNotNull(stream, value, () => WriteStruct(stream, value!, forceLittleEndian)); + + /// + /// Write a struct + /// + /// Structure type + /// Stream + /// Struct + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteStructNullable(this Stream stream, T? value, bool forceLittleEndian = true) where T : struct + => WriteIfNotNull(stream, value, () => WriteStruct(stream, value!.Value, forceLittleEndian)); /// /// Write a struct @@ -55,6 +109,9 @@ public static Stream WriteStructNullable(this Stream stream, object? value, bool /// Force little endian encoding? /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(() => { @@ -70,7 +127,7 @@ public static Task WriteStructAsync(this Stream stream, object value, bool force { gch.Free(); } - if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttribute() is StreamSerializerAttribute attr) + if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) ConvertStructureEndianess(structType, buffer.Memory, attr); return WriteBytesAsync(stream, buffer.Memory, cancellationToken); }); @@ -78,18 +135,74 @@ public static Task WriteStructAsync(this Stream stream, object value, bool force /// /// Write a struct /// + /// Structure type /// Stream /// Struct /// Force little endian encoding? /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteStructAsync(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) where T : struct + => SerializerException.WrapAsync(() => + { + Type structType = typeof(T); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); + try + { + Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); + } + finally + { + gch.Free(); + } + if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) + ConvertStructureEndianess(structType, buffer.Memory, attr); + return WriteBytesAsync(stream, buffer.Memory, cancellationToken); + }); + + /// + /// Write a struct + /// + /// Stream + /// Struct + /// Force little endian encoding? + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Task WriteStructNullableAsync( this Stream stream, object? value, bool forceLittleEndian = true, CancellationToken cancellationToken = default ) - => WriteIfNullAsync(stream, value, () => WriteStructAsync(stream, value!, forceLittleEndian, cancellationToken), cancellationToken); + => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!, forceLittleEndian, cancellationToken), cancellationToken); + + /// + /// Write a struct + /// + /// Structure type + /// Stream + /// Struct + /// Force little endian encoding? + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteStructNullableAsync( + this Stream stream, + T? value, + bool forceLittleEndian = true, + CancellationToken cancellationToken = default + ) + where T : struct + => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!.Value, forceLittleEndian, cancellationToken), cancellationToken); /// /// Convert the endianess of structure fields @@ -106,7 +219,7 @@ public static void ConvertStructureEndianess(Type type, Memory data, Strea queue.Enqueue((type, data, attr)); Type t; while (queue.TryDequeue(out var item)) - foreach (FieldInfo fi in item.Attribute.GetStructureFields(item.Type)) + foreach (FieldInfo fi in item.Attribute.GetNumericStructureFields(item.Type)) { t = fi.FieldType; if (t.IsEnum) t = t.GetEnumUnderlyingType(); @@ -116,7 +229,7 @@ public static void ConvertStructureEndianess(Type type, Memory data, Strea } else { - if (item.Type.GetCustomAttribute() is not StreamSerializerAttribute a) + if (item.Type.GetCustomAttributeCached() is not StreamSerializerAttribute a) throw new InvalidProgramException($"{item.Type}.{fi.Name} has a {nameof(StreamSerializerAttribute)}, but {t} has none"); queue.Enqueue((t, item.Data[Marshal.SizeOf(t)..], a)); } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index bf48b2c..e46ca27 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -30,7 +31,8 @@ static StreamExtensions() /// Stream /// Stream [TargetedPatchingOptOut("Tiny method")] - public static Stream WriteSerializerVersion(this Stream stream) => WriteNumber(stream, StreamSerializer.VERSION); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteSerializerVersion(this Stream stream) => WriteNumber(stream, StreamSerializer.Version); /// /// Write the serializer version @@ -38,8 +40,9 @@ static StreamExtensions() /// Stream /// Cancellation token [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) - => WriteNumberAsync(stream, StreamSerializer.VERSION, cancellationToken); + => WriteNumberAsync(stream, StreamSerializer.Version, cancellationToken); /// /// Write a boolean flag if an object is not @@ -49,7 +52,10 @@ public static Task WriteSerializerVersionAsync(this Stream stream, CancellationT /// Object /// Is not ? [TargetedPatchingOptOut("Tiny method")] - public static bool WriteIfNull(this Stream stream, [NotNullWhen(true)] T? obj) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool WriteIfNotNull(this Stream stream, [NotNullWhen(true)] T? obj) { bool isNotNull = obj != null; Write(stream, isNotNull); @@ -65,14 +71,51 @@ public static bool WriteIfNull(this Stream stream, [NotNullWhen(true)] T? obj /// Cancellation token /// Is not ? [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteIfNullAsync(this Stream stream, [NotNullWhen(true)] T? obj, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteIfNotNullAsync(this Stream stream, [NotNullWhen(true)] T? obj, CancellationToken cancellationToken = default) { - //TODO NotNullWhen seems not to work with a task result + //TODO NotNullWhen seems not to work with a task result https://github.com/dotnet/roslyn/issues/45228 bool isNotNull = obj != null; await WriteAsync(stream, isNotNull, cancellationToken).DynamicContext(); return isNotNull; } + /// + /// Write a nullable count + /// + /// Stream + /// Count + /// Is not ? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool WriteNullableCount(this Stream stream, [NotNullWhen(true)] long? count) + { + WriteNumberNullable(stream, count); + return count != null; + } + + /// + /// Write a nullable count + /// + /// Stream + /// Count + /// Cancellation token + /// Is not ? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteNullableCountAsync(this Stream stream, [NotNullWhen(true)] long? count, CancellationToken cancellationToken = default) + { + //TODO NotNullWhen seems not to work with a task result https://github.com/dotnet/roslyn/issues/45228 + await WriteNumberNullableAsync(stream, count, cancellationToken).DynamicContext(); + return count != null; + } + /// /// Write a boolean flag if an object is not /// @@ -82,9 +125,12 @@ public static async Task WriteIfNullAsync(this Stream stream, [NotNullW /// Write action to execute, if the object isn't /// Stream [TargetedPatchingOptOut("Tiny method")] - public static Stream WriteIfNull(this Stream stream, T? obj, Action action) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteIfNotNull(this Stream stream, T? obj, Action action) { - if (WriteIfNull(stream, obj)) action(); + if (WriteIfNotNull(stream, obj)) action(); return stream; } @@ -97,9 +143,46 @@ public static Stream WriteIfNull(this Stream stream, T? obj, Action action) /// Write action to execute, if the object isn't /// Cancellation token [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteIfNullAsync(this Stream stream, T? obj, Func action, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteIfNotNullAsync(this Stream stream, T? obj, Func action, CancellationToken cancellationToken = default) + { + if (await WriteIfNotNullAsync(stream, obj, cancellationToken).DynamicContext()) + await action().DynamicContext(); + } + + /// + /// Write a nullable count + /// + /// Stream + /// Count + /// Write action to execute, if the count isn't + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteNullableCount(this Stream stream, long? count, Action action) + { + if (WriteNullableCount(stream, count)) action(); + return stream; + } + + /// + /// Write a nullable count + /// + /// Stream + /// Count + /// Write action to execute, if the count isn't + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteNullableCountAsync(this Stream stream, long? count, Func action, CancellationToken cancellationToken = default) { - if (await WriteIfNullAsync(stream, obj, cancellationToken).DynamicContext()) + if (await WriteNullableCountAsync(stream, count, cancellationToken).DynamicContext()) await action().DynamicContext(); } @@ -107,11 +190,14 @@ public static async Task WriteIfNullAsync(this Stream stream, T? obj, Func /// Stream - /// Serialized data + /// Serialized data (will be returned to pool) /// Data length in bytes /// Array pool (data will returned to that pool) /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool? pool = null) => SerializerException.Wrap(() => { @@ -130,11 +216,14 @@ public static Stream WriteSerializedData(this Stream stream, byte[] data, int le /// Write serialized Data /// /// Stream - /// Serialized data + /// Serialized data (will be returned to pool) /// Data length in bytes /// Array pool (data will returned to that pool) /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool? pool = null, CancellationToken cancellationToken = default) => await SerializerException.WrapAsync(async () => { diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index d729d43..4b22d89 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -3,6 +3,8 @@ using System.Collections.Concurrent; using wan24.Core; +//TODO char (de)serializer + namespace wan24.StreamSerializerExtensions { /// @@ -263,12 +265,15 @@ static StreamSerializer() typeof(double), typeof(decimal), typeof(string), - typeof(char) + typeof(char), + typeof(IDictionary), + typeof(IList), + typeof(Stream) }); } /// - /// Version number + /// Version number (the first 8 bits are used internal, while other bits can be used for customization) /// public static int Version { get; set; } = VERSION; @@ -379,24 +384,14 @@ static StreamSerializer() /// Type name /// Type public static Type LoadType(string name) - { - try + => SerializerException.Wrap(() => { if ((Type.GetType(name, throwOnError: false) ?? TypeHelper.Instance.GetType(name)) is Type type && IsTypeAllowed(type)) return type; TypeLoadEventArgs e = new(name); OnLoadType?.Invoke(e); if (e.Type == null) throw new SerializerException($"Failed to load type \"{name}\""); return e.Type; - } - catch (SerializerException) - { - throw; - } - catch(Exception ex) - { - throw new SerializerException($"Failed to load type \"{name}\"", ex); - } - } + }, $"Failed to load type \"{name}\""); /// /// Determine if a type is allowed per default for deserializing @@ -405,34 +400,17 @@ public static Type LoadType(string name) /// Is allowed? public static bool IsTypeAllowed(Type type) { - // Allow all enum types + // Allow all enumeration types if (type.IsEnum) return true; // Get the final element type of an array type Type finalType = type; - Type? elementType; - while (finalType.IsArray) - { - elementType = finalType.GetElementType(); - if (elementType == null) break; - finalType = elementType; - } - // Allow registered allowed types + while (finalType.IsArray) finalType = finalType.GetElementType()!; + // Allow registered allowed types or serializable types if (AllowedTypes.Contains(finalType) || typeof(IStreamSerializer).IsAssignableFrom(finalType)) return true; - // Allow supported generic types - if (finalType.IsGenericType) - if (typeof(Dictionary<,>).IsAssignableFrom(finalType.GetGenericTypeDefinition())) - { - Type[] gp = finalType.GetGenericArguments(); - return IsTypeAllowed(gp[0]) && IsTypeAllowed(gp[1]); - } - else if (typeof(List<>).IsAssignableFrom(finalType.GetGenericTypeDefinition())) - { - return IsTypeAllowed(finalType.GetGenericArguments()[0]); - } - else if (AllowedTypes.Contains(finalType.GetGenericTypeDefinition())) - { - return true; - } + // Validate generic type arguments also (btw. no risk for an endless recursion here) + if (finalType.IsGenericType) foreach (Type gta in finalType.GetGenericArguments()) if (IsTypeAllowed(gta)) return false; + // Allow inheriting types + if (AllowedTypes.Any(t => t.IsAssignableFrom(finalType))) return true; // Deny return false; } diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs index aeace9b..759557e 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -12,7 +12,7 @@ public class StreamSerializerAttribute : Attribute /// /// Structure fields which require endianess conversion /// - protected List? StructureFields = null; + protected List? NumericStructureFields = null; /// /// Constructor (used for a type) @@ -213,7 +213,7 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position /// Serializer version /// Cancellation token /// Serializer options - public virtual ISerializerOptions GetSerializerOptions(PropertyInfo? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = default) { try { @@ -259,7 +259,7 @@ public virtual ISerializerOptions GetSerializerOptions(PropertyInfo? property, S /// Serializer version /// Cancellation token /// Serializer options - public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfo? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = default) { if (KeySerializerOptions != null) return KeySerializerOptions; if (KeySerializerOptionsFactoryType == null) return KeySerializerOptions ??= CreateSerializerOptions(KeyOptionsType, property); @@ -297,7 +297,7 @@ public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfo? property /// Serializer version /// Cancellation token /// Serializer options - public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfo? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = default) { if (ValueSerializerOptions != null) return ValueSerializerOptions; if (ValueSerializerOptionsFactoryType == null) return ValueSerializerOptions ??= CreateSerializerOptions(ValueOptionsType, property); @@ -355,10 +355,10 @@ public virtual bool IsIncluded(StreamSerializerModes mode, int version) /// /// Structure type /// Fields - public virtual List GetStructureFields(Type type) + public virtual List GetNumericStructureFields(Type type) { if (!type.IsValueType) throw new ArgumentException("Structure type required", nameof(type)); - return StructureFields ??= new(from fi in type.GetFieldsCached(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + return NumericStructureFields ??= new(from fi in type.GetFieldsCached(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) where !fi.IsStatic && fi.GetCustomAttributeCached() is not null select fi); @@ -370,7 +370,7 @@ public virtual List GetStructureFields(Type type) /// Custom serializer options type /// Property /// Serializer options - protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfo? property) + protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfoExt? property) => type == null ? new DefaultSerializerOptions(property, this) : type.ConstructAuto(usePrivate: true, property, this) as ISerializerOptions ?? throw new SerializerException($"Invalid serializer options type {type} (must implement {typeof(ISerializerOptions)})", new InvalidProgramException()); From ac60e1f394e113775502cee0f2143ddeca8b8161 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 12:44:13 +0200 Subject: [PATCH 03/17] Update + Added `StreamSerializer.CreateInstance` and `StreamSerializer.InstanceFactories` + Added `ConstructorInfo.IsSerializerConstructor` extension method - Fixed a bug when determining the optimal serialized type for a numeric value --- docs/api/toc.html | 3 + ...Extensions.AutoStreamSerializerBase-1.html | 4 +- ...tensions.AutoStreamSerializerConfig-1.html | 4 +- ...alizerInfo.AsyncDeserializer_Delegate.html | 4 +- ...rializerInfo.AsyncSerializer_Delegate.html | 4 +- ...mSerializerInfo.Deserializer_Delegate.html | 4 +- ...eamSerializerInfo.Serializer_Delegate.html | 4 +- ...erExtensions.AutoStreamSerializerInfo.html | 4 +- ...erExtensions.DefaultSerializerOptions.html | 4 +- ....DisposableAutoStreamSerializerBase-1.html | 4 +- ...nsions.DisposableStreamSerializerBase.html | 4 +- ...numerator.StreamAsyncEnumeratorBase-1.html | 4 +- ...ons.Enumerator.StreamEnumeratorBase-1.html | 4 +- ...merator.StreamNumberAsyncEnumerator-1.html | 4 +- ...s.Enumerator.StreamNumberEnumerator-1.html | 4 +- ...tor.StreamSerializerAsyncEnumerator-1.html | 4 +- ...umerator.StreamSerializerEnumerator-1.html | 4 +- ...numerator.StreamStringAsyncEnumerator.html | 4 +- ...ons.Enumerator.StreamStringEnumerator.html | 4 +- ...lizerExtensions.IAutoStreamSerializer.html | 4 +- ...xtensions.IAutoStreamSerializerConfig.html | 4 +- ...rializerExtensions.ISerializerOptions.html | 4 +- ...erializerExtensions.IStreamSerializer.html | 4 +- ...erExtensions.IStreamSerializerVersion.html | 4 +- ...treamSerializerExtensions.NumberTypes.html | 4 +- ...treamSerializerExtensions.ObjectTypes.html | 4 +- ...lizerExtensions.SerializerEventArgs-1.html | 4 +- ...ializerExtensions.SerializerException.html | 4 +- ...SerializerExtensions.SerializerHelper.html | 179 +++++++++--- ...lizerExtensions.SerializerOptionsBase.html | 4 +- ...SerializerExtensions.StreamExtensions.html | 242 ++++++++-------- ...mSerializer.AsyncDeserialize_Delegate.html | 6 +- ...eamSerializer.AsyncSerialize_Delegate.html | 6 +- ...StreamSerializer.Deserialize_Delegate.html | 6 +- ...alizer.FindAsyncDeserializer_Delegate.html | 6 +- ...rializer.FindAsyncSerializer_Delegate.html | 6 +- ...ializer.FindSyncDeserializer_Delegate.html | 6 +- ...erializer.FindSyncSerializer_Delegate.html | 6 +- ...nsions.StreamSerializer.Init_Delegate.html | 6 +- ...amSerializer.InstanceFactory_Delegate.html | 192 +++++++++++++ ...ns.StreamSerializer.LoadType_Delegate.html | 6 +- ...s.StreamSerializer.Serialize_Delegate.html | 6 +- ...SerializerExtensions.StreamSerializer.html | 235 +++++++++++++-- ...ute.SerializerOptionsFactory_Delegate.html | 4 +- ...lizerAttribute.StreamFactory_Delegate.html | 4 +- ...rExtensions.StreamSerializerAttribute.html | 4 +- ...alizerExtensions.StreamSerializerBase.html | 4 +- ...lizerExtensions.StreamSerializerModes.html | 4 +- ...erializerExtensions.TypeLoadEventArgs.html | 4 +- .../api/wan24.StreamSerializerExtensions.html | 3 + docs/manifest.json | 112 ++++---- docs/xrefmap.yml | 120 ++++++-- src/Stream-Serializer-Extensions Docs/log.txt | 2 + .../SerializerHelper_Tests.cs | 272 ++++++++++++++++++ .../StreamExtensions_Tests.Array.cs | 67 +++++ ...asic.cs => StreamExtensions_Tests.Bool.cs} | 0 .../StreamExtensions_Tests.Byte.cs | 167 +++++++++++ .../StreamExtensions_Tests.Bytes.cs | 65 +++++ .../StreamExtensions_Tests.Decimal.cs | 87 ++++++ .../StreamExtensions_Tests.Dict.cs | 80 ++++++ .../StreamExtensions_Tests.Double.cs | 87 ++++++ .../StreamExtensions_Tests.Enum.cs | 39 +++ .../StreamExtensions_Tests.Float.cs | 87 ++++++ .../StreamExtensions_Tests.Int.cs | 167 +++++++++++ .../StreamExtensions_Tests.List.cs | 76 +++++ .../StreamExtensions_Tests.Long.cs | 167 +++++++++++ .../StreamExtensions_Tests.Number.cs | 83 ++++++ .../StreamExtensions_Tests.Serialized.cs | 55 ++++ .../StreamExtensions_Tests.Short.cs | 167 +++++++++++ .../StreamExtensions_Tests.String.cs | 115 ++++++++ .../StreamExtensions_Tests.Struct.cs | 55 ++++ .../TestObject2.cs | 10 +- .../DisposableStreamSerializerBase.cs | 2 +- .../SerializerHelper.cs | 69 +++-- .../Stream-Serializer-Extensions.csproj | 1 + .../StreamExtensions.Read.Array.cs | 32 ++- .../StreamExtensions.Read.Bytes.cs | 38 ++- .../StreamExtensions.Read.Dictionary.cs | 12 +- .../StreamExtensions.Read.Enum.cs | 32 +-- .../StreamExtensions.Read.List.cs | 12 +- .../StreamExtensions.Read.Number.cs | 54 +++- .../StreamExtensions.Read.Serialized.cs | 122 +------- .../StreamExtensions.Read.String.cs | 45 ++- .../StreamExtensions.Write.Dictionary.cs | 6 +- .../StreamExtensions.Write.Enum.cs | 6 +- .../StreamExtensions.Write.Number.cs | 10 +- .../StreamExtensions.Write.Serialized.cs | 4 +- .../StreamExtensions.Write.String.cs | 89 +++++- .../StreamExtensions.Write.cs | 36 ++- .../StreamSerializer.cs | 70 +++++ .../StreamSerializerAttribute.cs | 2 +- .../StreamSerializerBase.cs | 2 +- 92 files changed, 3140 insertions(+), 634 deletions(-) create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html create mode 100644 src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs rename src/Stream-Serializer-Extensions Tests/{StreamExtensions_Tests.Basic.cs => StreamExtensions_Tests.Bool.cs} (100%) create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs diff --git a/docs/api/toc.html b/docs/api/toc.html index cb8a58e..746835c 100644 --- a/docs/api/toc.html +++ b/docs/api/toc.html @@ -110,6 +110,9 @@
  • StreamSerializer.Init_Delegate
  • +
  • + StreamSerializer.InstanceFactory_Delegate +
  • StreamSerializer.LoadType_Delegate
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html index e9e34e8..976baa0 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html @@ -433,10 +433,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html index dbefc8f..d9c6b27 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html @@ -531,10 +531,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html index 51118d9..5586adb 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html @@ -148,10 +148,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html index de35c3d..6a8a489 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html @@ -147,10 +147,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html index 3652d30..330d957 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html @@ -142,10 +142,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html index 263de63..e552536 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html @@ -126,10 +126,10 @@
    Parameters

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html index 50155f4..b5ed7c5 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html @@ -676,10 +676,10 @@
    Type Parameters

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html index 0392d53..f169486 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html @@ -182,10 +182,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html index 15d1e95..272540d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html @@ -436,10 +436,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html index 031cd4c..29ddd75 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html @@ -697,10 +697,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html index 7073c29..86635d9 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html @@ -493,10 +493,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html index 05510f5..aeca1d7 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html @@ -528,10 +528,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html index 87068f0..697b54f 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html @@ -309,10 +309,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html index cfc7ae7..46e5ef2 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html @@ -303,10 +303,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html index 643280b..b478949 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html @@ -225,10 +225,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html index bb284d9..1570f13 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html @@ -256,10 +256,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html index def5506..e2a501d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html @@ -365,10 +365,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html index c5a14aa..5dedae0 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html @@ -359,10 +359,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html index 0301e56..23aa3ab 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html @@ -141,10 +141,10 @@
    Property Value

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html index 5f2e68d..a55d782 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html +++ b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html @@ -210,10 +210,10 @@
    Property Value

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html index f94eb3b..8bcfdf2 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html @@ -350,10 +350,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html index 80e580b..2713e6a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html @@ -276,10 +276,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html index 2cd006a..81c62bb 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html +++ b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html @@ -194,10 +194,10 @@
    Property Value

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html b/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html index 281f492..8b4d6c4 100644 --- a/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html +++ b/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html @@ -197,10 +197,10 @@

    Extension Methods

    SerializerHelper.HasValueFlags()
    SerializerHelper.GetObjectSerializerInfo() diff --git a/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html b/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html index 06a03dd..c3a67f7 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html +++ b/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html @@ -213,10 +213,10 @@

    Extension Methods

    SerializerHelper.IsNumber()
    SerializerHelper.GetObjectSerializerInfo() diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html b/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html index 382bb07..5fa17ec 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html @@ -205,10 +205,10 @@
    Property Value

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html index 13e7971..24cd670 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html @@ -481,10 +481,10 @@
    Type Parameters

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html index 73b7ff6..fe9aa7e 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -115,20 +115,20 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnsureNotNull(Object)

    +

    EnsureNotNull<T>(T)

    Ensure a non-null value

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object EnsureNotNull(object value)
    +public static T EnsureNotNull<T>(T value)
    Parameters
    @@ -141,7 +141,7 @@
    Parameters
    - + @@ -158,8 +158,24 @@
    Returns
    - + + + +
    System.ObjectT value

    Value

    System.ObjectT

    Non-null value

    +
    +
    Type Parameters
    + + + + + + + + + + + @@ -169,7 +185,7 @@
    Returns
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int32, Int32, Int32)

    @@ -232,7 +248,7 @@
    Returns
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int64, Int64, Int64)

    @@ -295,7 +311,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -361,19 +377,19 @@
    Returns
    NameDescription
    T

    Value type

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetNumberAndType(Object)

    +

    GetNumberAndType<T>(T)

    Get the best matching number type

    Declaration
    -
    public static (object Number, NumberTypes Type) GetNumberAndType(this object number)
    +
    public static (object Number, NumberTypes Type) GetNumberAndType<T>(this T number)
    Parameters
    @@ -386,7 +402,7 @@
    Parameters
    - + @@ -405,25 +421,41 @@
    Returns
    + + +
    System.ObjectT number

    Number

    System.ValueTuple<System.Object, NumberTypes>

    Number and type

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Number type

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetNumberType(Object, Boolean)

    +

    GetNumberType<T>(T, Boolean)

    Get the type of a number

    Declaration
    -
    public static NumberTypes GetNumberType(this object number, bool useFlags = true)
    +
    public static NumberTypes GetNumberType<T>(this T number, bool useFlags = true)
    Parameters
    @@ -436,7 +468,7 @@
    Parameters
    - + @@ -461,6 +493,22 @@
    Returns
    + + +
    System.ObjectT number

    Number

    NumberTypes

    Number type

    +
    +
    Type Parameters
    + + + + + + + + + + + @@ -470,7 +518,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetObjectSerializerInfo(Object)

    @@ -520,7 +568,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -589,7 +637,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -658,7 +706,7 @@
    Returns
    Improve this Doc - View Source + View Source

    HasValueFlags(NumberTypes)

    @@ -709,7 +757,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsEmpty(ObjectTypes)

    @@ -760,7 +808,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsMaxValue(NumberTypes)

    @@ -811,7 +859,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsMinValue(NumberTypes)

    @@ -862,7 +910,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsNumber(ObjectTypes)

    @@ -904,6 +952,63 @@
    Returns
    + + +
    NameDescription
    T

    Number type

    System.Boolean

    A number?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsSerializerConstructor(ConstructorInfo, Boolean)

    +

    Determine if the constructor is the serializer constructor

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsSerializerConstructor(this ConstructorInfo ci, bool requireAttribute = false)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.Reflection.ConstructorInfoci

    Constructor

    +
    System.BooleanrequireAttribute

    Require the StreamSerializerAttribute?

    +
    +
    Returns
    + + + + + + + + + + + @@ -913,7 +1018,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsUnsigned(NumberTypes)

    @@ -964,7 +1069,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsUnsigned(ObjectTypes)

    @@ -1015,7 +1120,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsZero(NumberTypes)

    @@ -1066,7 +1171,7 @@
    Returns
    Improve this Doc - View Source + View Source

    RemoveFlags(NumberTypes)

    @@ -1117,7 +1222,7 @@
    Returns
    Improve this Doc - View Source + View Source

    RemoveFlags(ObjectTypes)

    @@ -1168,7 +1273,7 @@
    Returns
    Improve this Doc - View Source + View Source

    RemoveValueFlags(NumberTypes)

    @@ -1219,7 +1324,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToBytes(IStreamSerializer, Boolean)

    @@ -1276,7 +1381,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToObject<T>(Byte[], Boolean)

    @@ -1350,7 +1455,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ValidateDeserializedObject<T>(T)

    @@ -1439,7 +1544,7 @@
    Exceptions
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html index 7c35acf..7c3e491 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html @@ -430,10 +430,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index d700d91..e9c0631 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -986,7 +986,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -1055,7 +1055,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyNullable(Stream, Nullable<Int32>, ISerializerOptions)

    @@ -1118,7 +1118,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyNullableAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -2319,7 +2319,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadArrayNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -2412,7 +2412,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadArrayNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -2943,7 +2943,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBytesNullable(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

    @@ -2986,7 +2986,8 @@
    Parameters
    - @@ -3024,7 +3025,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBytesNullableAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -3067,7 +3068,8 @@
    Parameters
    - @@ -3785,7 +3787,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadDictNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    @@ -3986,7 +3988,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadDictNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    @@ -4085,7 +4087,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDictNullableAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    @@ -4606,7 +4608,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadEnumAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4680,7 +4682,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnumAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4765,7 +4767,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadEnumNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4834,7 +4836,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnumNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4914,7 +4916,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadEnumNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4989,7 +4991,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadEnumNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -5075,7 +5077,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadFixedArray(Stream, Array, Nullable<Int32>, ISerializerOptions)

    @@ -5144,7 +5146,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadFixedArray<T>(Stream, T[], Nullable<Int32>, ISerializerOptions)

    @@ -5229,7 +5231,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadFixedArray<T>(Stream, Span<T>, Nullable<Int32>, ISerializerOptions)

    @@ -5314,7 +5316,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadFixedArrayAsync(Stream, Array, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -5389,7 +5391,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadFixedArrayAsync<T>(Stream, T[], Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -5480,7 +5482,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadFixedArrayAsync<T>(Stream, Memory<T>, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -6471,7 +6473,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadListNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    @@ -6655,7 +6657,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadListNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -6748,7 +6750,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadListNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    @@ -7415,7 +7417,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadNumberNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    @@ -7563,7 +7565,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadNumberNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -7638,7 +7640,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadNumberNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -8816,7 +8818,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerialized<T>(Stream, Nullable<Int32>)

    @@ -8889,7 +8891,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9102,7 +9104,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedNullable<T>(Stream, Nullable<Int32>)

    @@ -9176,7 +9178,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9256,7 +9258,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedObject(Stream, Type, Nullable<Int32>)

    @@ -9318,7 +9320,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    @@ -9386,7 +9388,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedStruct<T>(Stream, Nullable<Int32>)

    @@ -9459,7 +9461,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9538,7 +9540,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructNullable<T>(Stream, Nullable<Int32>)

    @@ -9612,7 +9614,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -10434,7 +10436,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10508,7 +10510,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10582,7 +10584,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10662,7 +10664,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10736,7 +10738,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString16NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10816,7 +10818,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -10890,7 +10892,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -10970,7 +10972,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -11044,7 +11046,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadString32NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -11124,7 +11126,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -11204,7 +11206,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStringNullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    @@ -11278,7 +11280,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadStringNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    @@ -13178,7 +13180,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAny(Stream, Object)

    @@ -13187,7 +13189,8 @@

    Declaration
    -
    public static Stream WriteAny(this Stream stream, object obj)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteAny(this Stream stream, object obj)
    Parameters
    TypeDescription
    System.Boolean

    Is the serializer constructor?

    System.Buffers.ArrayPool<System.Byte> pool

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

    +

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the +pool after use!)

    System.Buffers.ArrayPool<System.Byte> pool

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

    +

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the +pool after use!)

    @@ -13243,7 +13246,8 @@

    Declaration
    -
    public static Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13295,7 +13299,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyNullable(Stream, Object)

    @@ -13352,7 +13356,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyNullableAsync(Stream, Object, CancellationToken)

    @@ -13362,7 +13366,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAnyNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static async Task WriteAnyNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -15165,7 +15169,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteDictNullableAsync(Stream, IDictionary, CancellationToken)

    @@ -15358,7 +15362,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumAsync(Stream, Object, CancellationToken)

    @@ -15499,7 +15503,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumNullable(Stream, Object)

    @@ -15556,7 +15560,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnumNullable<T>(Stream, Nullable<T>)

    @@ -15630,7 +15634,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync(Stream, Object, CancellationToken)

    @@ -15692,7 +15696,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    @@ -16192,7 +16196,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteIfNotNull<T>(Stream, T)

    @@ -16265,7 +16269,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteIfNotNull<T>(Stream, T, Action)

    @@ -16344,7 +16348,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteIfNotNullAsync<T>(Stream, T, CancellationToken)

    @@ -16423,7 +16427,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteIfNotNullAsync<T>(Stream, T, Func<Task>, CancellationToken)

    @@ -18151,7 +18155,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableCount(Stream, Nullable<Int64>)

    @@ -18208,7 +18212,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableCount(Stream, Nullable<Int64>, Action)

    @@ -18271,7 +18275,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableCountAsync(Stream, Nullable<Int64>, CancellationToken)

    @@ -18334,7 +18338,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableCountAsync(Stream, Nullable<Int64>, Func<Task>, CancellationToken)

    @@ -19180,7 +19184,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerialized(Stream, IStreamSerializer)

    @@ -19237,7 +19241,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerialized<T>(Stream, T)

    @@ -19311,7 +19315,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

    @@ -19373,7 +19377,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedAsync<T>(Stream, T, CancellationToken)

    @@ -19452,7 +19456,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedData(Stream, Byte[], Int32, ArrayPool<Byte>)

    @@ -19521,7 +19525,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool<Byte>, CancellationToken)

    @@ -19595,7 +19599,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullable(Stream, IStreamSerializer)

    @@ -19652,7 +19656,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullable<T>(Stream, T)

    @@ -19726,7 +19730,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    @@ -19788,7 +19792,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync<T>(Stream, T, CancellationToken)

    @@ -19864,20 +19868,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    + +

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedNullableAsync<T>(this Stream stream, T? obj, CancellationToken cancellationToken = null)
    +public static Stream WriteSerializedNullableStruct<T>(this Stream stream, T? obj)
         where T : struct, IStreamSerializer
    Parameters
    @@ -19900,12 +19904,6 @@
    Parameters
    System.Nullable<T> obj

    Object

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    @@ -19920,8 +19918,9 @@
    Returns
    - Task - + Stream +

    Stream

    + @@ -19943,20 +19942,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>)

    + +

    WriteSerializedNullableStructAsync<T>(Stream, Nullable<T>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullableStruct<T>(this Stream stream, T? obj)
    +public static Task WriteSerializedNullableStructAsync<T>(this Stream stream, T? obj, CancellationToken cancellationToken = null)
         where T : struct, IStreamSerializer
    Parameters
    @@ -19979,6 +19978,12 @@
    Parameters
    System.Nullable<T> obj

    Object

    + + + + CancellationToken + cancellationToken +

    Cancellation token

    @@ -19993,9 +19998,8 @@
    Returns
    - Stream -

    Stream

    - + Task + @@ -20020,7 +20024,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedStruct<T>(Stream, T)

    @@ -20094,7 +20098,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedStructAsync<T>(Stream, T, CancellationToken)

    @@ -20224,7 +20228,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializerVersionAsync(Stream, CancellationToken)

    @@ -20234,7 +20238,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    +public static async Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    Parameters
    @@ -20565,7 +20569,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString(Stream, String)

    @@ -20621,7 +20625,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16(Stream, String)

    @@ -20677,7 +20681,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Async(Stream, String, CancellationToken)

    @@ -20738,7 +20742,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Nullable<T>(Stream, String)

    @@ -20809,7 +20813,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteString16NullableAsync(Stream, String, CancellationToken)

    @@ -20870,7 +20874,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32(Stream, String)

    @@ -20926,7 +20930,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Async(Stream, String, CancellationToken)

    @@ -20987,7 +20991,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Nullable(Stream, String)

    @@ -21043,7 +21047,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32NullableAsync(Stream, String, CancellationToken)

    @@ -21104,7 +21108,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringAsync(Stream, String, CancellationToken)

    @@ -21165,7 +21169,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullable(Stream, String)

    @@ -21221,7 +21225,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullableAsync(Stream, String, CancellationToken)

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html index c7ed7cc..28962a6 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html @@ -142,10 +142,10 @@
    Returns

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html index 1c91d7c..785a199 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html @@ -129,10 +129,10 @@
    Returns

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html index 2955e76..16fda57 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html @@ -136,10 +136,10 @@
    Returns

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html index fef1466..9e7ed2d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html @@ -102,10 +102,10 @@
    Parameters

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html index 3f83040..84a5ea1 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html @@ -102,10 +102,10 @@
    Parameters

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html index 2b41942..473fe89 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html @@ -102,10 +102,10 @@
    Parameters

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html index 7508835..b8b9b60 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html @@ -102,10 +102,10 @@
    Parameters

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html index 768e696..93c6a88 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html @@ -102,10 +102,10 @@
    Parameters

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html new file mode 100644 index 0000000..cc6f0d5 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html @@ -0,0 +1,192 @@ + + + + + + + + Delegate StreamSerializer.InstanceFactory_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html index 5738d49..ac894bc 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html @@ -102,10 +102,10 @@
    Parameters

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html index a91ce67..ede0473 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html @@ -108,10 +108,10 @@
    Parameters

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html index aad1fe9..7f287b4 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -118,7 +118,7 @@

    Fields Improve this Doc - View Source + View Source

    AllowedTypes

    Allowed (non-array) types

    @@ -148,7 +148,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncDeserializer

    Deserializer

    @@ -178,7 +178,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncSerializer

    Serializer

    @@ -203,12 +203,42 @@
    Field Value
    + + | + Improve this Doc + + + View Source + +

    InstanceFactories

    +

    Type instance factories

    +
    +
    +
    Declaration
    +
    +
    public static readonly ConcurrentDictionary<Type, StreamSerializer.InstanceFactory_Delegate> InstanceFactories
    +
    +
    Field Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.InstanceFactory_Delegate>
    | Improve this Doc - View Source + View Source

    SyncDeserializer

    Deserializer

    @@ -238,7 +268,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncObject

    An object for thread locking

    @@ -268,7 +298,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncSerializer

    Serializer

    @@ -298,7 +328,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    VERSION

    Version number

    @@ -330,7 +360,7 @@

    Properties Improve this Doc - View Source + View Source

    BufferPool

    @@ -361,7 +391,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Version

    @@ -389,12 +419,171 @@
    Property Value

    Methods

    + + | + Improve this Doc + + + View Source + + +

    CreateInstance(out ConstructorInfo, Type, Stream, Nullable<Int32>, ISerializerOptions)

    +

    Create an instance

    +
    +
    +
    Declaration
    +
    +
    public static object CreateInstance(out ConstructorInfo usedConstructor, Type type, Stream stream, int? version = null, ISerializerOptions options = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.Reflection.ConstructorInfousedConstructor

    Used constructor

    +
    Typetype

    Requested type

    +
    Streamstream

    Stream

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    ISerializerOptionsoptions

    Serializer options

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Object

    Instance

    +
    + + | + Improve this Doc + + + View Source + + +

    CreateInstance<T>(out ConstructorInfo, Stream, Nullable<Int32>, ISerializerOptions)

    +

    Create an instance

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static T CreateInstance<T>(out ConstructorInfo usedConstructor, Stream stream, int? version = null, ISerializerOptions options = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.Reflection.ConstructorInfousedConstructor

    Used constructor

    +
    Streamstream

    Stream

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    ISerializerOptionsoptions

    Serializer options

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    T

    Instance

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Requested type

    +
    | Improve this Doc - View Source + View Source

    FindAsyncDeserializer(Type)

    @@ -444,7 +633,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindAsyncSerializer(Type)

    @@ -494,7 +683,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDelegateType(Type, IEnumerable<Type>)

    @@ -550,7 +739,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDeserializer(Type)

    @@ -600,7 +789,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindSerializer(Type)

    @@ -650,7 +839,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsTypeAllowed(Type)

    @@ -700,7 +889,7 @@
    Returns
    Improve this Doc - View Source + View Source

    LoadType(String)

    @@ -752,7 +941,7 @@

    Events Improve this Doc - View Source + View Source

    OnFindAsyncDeserializer

    Raised when finding a deserializer

    @@ -782,7 +971,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindAsyncSerializer

    Raised when finding a serializer

    @@ -812,7 +1001,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncDeserializer

    Raised when finding a deserializer

    @@ -842,7 +1031,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncSerializer

    Raised when finding a serializer

    @@ -872,7 +1061,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnInit

    Raised on initialization

    @@ -902,7 +1091,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnLoadType

    Raised on loading a type

    @@ -938,7 +1127,7 @@
    Event Type
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html index 299a7b9..b761170 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html @@ -148,10 +148,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html index a445e01..1e4850c 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html @@ -148,10 +148,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html index 04cb6df..e665399 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html @@ -1626,10 +1626,10 @@
    Returns

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html index 55027be..b412260 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html @@ -693,10 +693,10 @@

    Implements

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html index cef98dd..536cc03 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html @@ -111,10 +111,10 @@

    Fields

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo() diff --git a/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html b/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html index f0c8b66..9df7f10 100644 --- a/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html +++ b/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html @@ -188,10 +188,10 @@
    Property Value

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) diff --git a/docs/api/wan24.StreamSerializerExtensions.html b/docs/api/wan24.StreamSerializerExtensions.html index 5d2a506..035986d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.html @@ -190,6 +190,9 @@

    StreamSerializer.Init_Delegate

    Delegate for the OnInit event

    +
    +

    StreamSerializer.InstanceFactory_Delegate

    +

    Delegate for an instance factory

    StreamSerializer.LoadType_Delegate

    Delegate for the OnLoadType event

    diff --git a/docs/manifest.json b/docs/manifest.json index 886baec..4fab925 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -21,7 +21,7 @@ "output": { ".html": { "relative_path": "api/toc.html", - "hash": "31xEXtlTOylVjAwoClUnE3apTrHUGXslSx13lGZiGcw=" + "hash": "wpRBFsXPBUohplXVE+G5c9FXFo6PHSHR1kPFsfoKtJs=" } }, "is_incremental": false, @@ -33,7 +33,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html", - "hash": "TOCbuzMz9EW5xMASqOaxHjVW96ailgxZtLNwCr26zjo=" + "hash": "ftSUCO9iHO5QbPabthTJMWEWfJpnAJMRVDYzUxuDEss=" } }, "is_incremental": false, @@ -45,7 +45,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html", - "hash": "hHcVw3zMjdnZpd2Hoolh+dstQgRxVqIS4TQRnlKMOuY=" + "hash": "ZseFcf9PEmJ2YNJvfiCnXTrtgB8jIpDGWOr66cvIF0s=" } }, "is_incremental": false, @@ -57,7 +57,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html", - "hash": "iqb2GPbwDkIxhrGlQRXekbkSbIaIrJTmhuFCEsCTH2k=" + "hash": "9tb/lVyFo8Yy1VPf8S5psdnmY1o1883UaKokXao2nXs=" } }, "is_incremental": false, @@ -69,7 +69,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html", - "hash": "V07afv/pWlD1kFGRIJfwbQUeIiMYeea0wgcGhsWsWyg=" + "hash": "DidvaEZMN6tGdBlralJmu30viTjDZ+FMVYvoX1afL7U=" } }, "is_incremental": false, @@ -81,7 +81,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html", - "hash": "lKrEeEHgymfhIs/hQ2Myeoy6NP/83AO2yjNicGkUHck=" + "hash": "z6sg7EJsavtNSY7NVWGBqAOYoq0r0gSKVAJhFN/4ABg=" } }, "is_incremental": false, @@ -93,7 +93,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html", - "hash": "46/RM2odGXLa9VXFdWZZO+GuvmThcvUmSKNBvAdZ4CM=" + "hash": "VCU7ZZYjm5cE/IblC1eMT+S3G7hvCbXb91RG1bLFkUg=" } }, "is_incremental": false, @@ -105,7 +105,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html", - "hash": "gNRzPisPhHeQitoshItJNv0oVHvrGEwO5GR2znxL1WE=" + "hash": "2ia8UHV4TUekW6Gnponk6U2Odwveh+exkl/aZjv4uUg=" } }, "is_incremental": false, @@ -117,7 +117,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html", - "hash": "ZU7aICTQ7vxXd4JiH9UAl/dAyUrKQP00valeraygoN4=" + "hash": "YG3P7zzDXhBzY+UXmFvCpi/tVrFTsBCNv/wC+1b1rro=" } }, "is_incremental": false, @@ -129,7 +129,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html", - "hash": "WMv9nrO8OaPB4s9F6Rj6jHTQvawwxZQrSduJJS2NRyo=" + "hash": "z/l9ZUOMevhDeJGO1Q3CAeKk47/SzQjPB9RRHgk8eHw=" } }, "is_incremental": false, @@ -141,7 +141,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html", - "hash": "MtAVJyeuzh4vDZ7aoyaXQEHbjEDeyguwOpud6FqdZhI=" + "hash": "kJd0jtJud/64A3UlxhHitpaejeeHC7d+Xg7/9aBm1vg=" } }, "is_incremental": false, @@ -153,7 +153,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html", - "hash": "qUnhJFPMHJ3kFYwPM8/EytmnD2QkNMrIX4vIoBV5GN4=" + "hash": "tF7RVBibixrrqgyT6uCg0C3vM0KOmwaxRFaNLF35z+0=" } }, "is_incremental": false, @@ -165,7 +165,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html", - "hash": "IlkdQWIpd2yadiZemDeW7Z2EGCZFVb2Oh3HcWK6ZWfQ=" + "hash": "M89eGonTKnEpwPTfKjAMkJa3WMbXCA/+/HRdWmeE4PA=" } }, "is_incremental": false, @@ -177,7 +177,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html", - "hash": "Cmgk0O+OhzvZZsF1Dsz01IgYkhn8TXeQ3V7lG0rC8UQ=" + "hash": "SrC5YWfKXtZdubLkvr6keewq47CiAe8Ew/F8eRgl1Js=" } }, "is_incremental": false, @@ -189,7 +189,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html", - "hash": "s6dKlDqeYNENuQim65WMktog0sZ0qCqrEu/jwvTA1Zc=" + "hash": "g3zwKwAlypqwygZsFfjbwAeRiY42+RhvSeMgoRdNvQY=" } }, "is_incremental": false, @@ -201,7 +201,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html", - "hash": "UJ34GERJXBfnsakejmgjzFlh3htLOdl0Xd8keZ9hM34=" + "hash": "oMsywutPug5X2r1dFT4LGbah+KOi2fFTP5pqCCD3v2Q=" } }, "is_incremental": false, @@ -213,7 +213,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html", - "hash": "F2kP43fUKNiA84013W8rcjzzUBnIW1Cs/3DYChAy59s=" + "hash": "I1qVCsduwYmE9r+bKRq3sDx/iqimIatE27mlLJQ1E8g=" } }, "is_incremental": false, @@ -225,7 +225,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html", - "hash": "Sdq6tTsrhUmBphC/Q7EUMg0pZNhTyuBesDyimEp99D4=" + "hash": "RE8FteBfXrxQ6L/KA0y7Ukv7F67bl6+87jJ6Tpd+fH8=" } }, "is_incremental": false, @@ -237,7 +237,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html", - "hash": "dw1J5uFihxr2kn+SnrS96W1IsJvM7isO7QL2tIeQ8ro=" + "hash": "nU9xeo5eG0oxjWFmGySrmnBGQrfxfDHn0i7pcXn3xYY=" } }, "is_incremental": false, @@ -261,7 +261,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html", - "hash": "MxQRcnXnqOCrP3wQt6H2CbNx+IhN4JdvE5wsHigiJ5o=" + "hash": "TjeOA+SVNx5ndDhqFRkelywINGPVN5Rs6VfxY+dQ7Lk=" } }, "is_incremental": false, @@ -273,7 +273,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html", - "hash": "UjHV4OYl0w2uNkuVNh/0WLGPbozYXVD6UWVnGKxIGBg=" + "hash": "anexlR2VqaIdMNfELvHgbDrX+LeeA5GKNls+JcyHktM=" } }, "is_incremental": false, @@ -285,7 +285,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ISerializerOptions.html", - "hash": "iPspk1MQHhraB7VRlNZlVGi5SmryUIcpg16c704S+bs=" + "hash": "jvUfIrC8hMLVFBRd7jRw3JlKMdi++qfD0BmwHPlvhPE=" } }, "is_incremental": false, @@ -297,7 +297,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializer.html", - "hash": "eI6lGM1plhXldVK4rC8ytM99rJb8TgTlHXwe35bUi3s=" + "hash": "CgFdpt1m5K53PZEf85rV/Bh+g9lukffpeWx5XSPATdQ=" } }, "is_incremental": false, @@ -309,7 +309,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html", - "hash": "mEtLSm8XGlmS1PdxRQPkjmawRtkn/1unk5+U3eSMLiU=" + "hash": "ykBM4GcgrlL/EUuOMXOb3zGHt6LpnMBz4TaXha+5ZLM=" } }, "is_incremental": false, @@ -321,7 +321,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.NumberTypes.html", - "hash": "FvSX++vhTkrL+GsGx+dcU14ec3Je3fK9kPlkzXHdA3c=" + "hash": "ojybFav1LhAMsS+k3nExCUnNlfvbf2y3XaFJDdflclU=" } }, "is_incremental": false, @@ -333,7 +333,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ObjectTypes.html", - "hash": "pt+zGBD8aJ0jvXQo2LET4Nn5LMqqalKoA9J9z8e5ENc=" + "hash": "uDencMrjaOkRsytRfYfzQiZU9yzdjhdZmH2WNSH+/2w=" } }, "is_incremental": false, @@ -345,7 +345,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html", - "hash": "AiwT9llb75KRGJR4vPO98tsBPMBmx6+pyR3P5nt7fmc=" + "hash": "Kz9CJqwgUw/qrfCzQzp+53jh3YLftyKrY++if9cBQ6E=" } }, "is_incremental": false, @@ -357,7 +357,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerException.html", - "hash": "wx2/t2umrTTQBUNt9QwZtm9YvVer7FtPuiYGpKrZaNM=" + "hash": "Ir3m+pF4R95akt//bN1/emEa+TmtqMC4cZ8NjHGxJOQ=" } }, "is_incremental": false, @@ -369,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "qvpjeHU2MH1u5D4XKPEPnoSj9l25YGSZBvfW+J/sx+4=" + "hash": "QbSTYjO7Z6HVugDIGudmS9HkpVbqnsDshVPhv2h18BM=" } }, "is_incremental": false, @@ -381,7 +381,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html", - "hash": "b4arXOWMp6EnF5VcKU903H+QEBP5rGvmFFadvoee2As=" + "hash": "dodbqIduzfXVlaoksmwEBCyrWOh4sr7LTn54RQVHBco=" } }, "is_incremental": false, @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "8pbBzxVVsTV2gqL0SG6B4E1q//gnqq9hvsJpQRBqokY=" + "hash": "b5m8woBFj4XvcqP5E/0qFWP/J9zex/IVeIXZLh5asQU=" } }, "is_incremental": false, @@ -405,7 +405,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html", - "hash": "ghxSX6wJwGT4ZEdzKsuoZiLF8Zd2Ftc9ChaSUKxFkKk=" + "hash": "zO9lY/KRno3Nh4TpBrgvqd5WweZN3h8KpESJ4bNxhmg=" } }, "is_incremental": false, @@ -417,7 +417,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html", - "hash": "aw4qpFELAOFdAzWvtmDbSaIlgyxH73Qh7JEZbpfRZOo=" + "hash": "GYKAMZCQ9Vhehwwz6kJGC+PV26D7WljWn9VEQ9X2J9U=" } }, "is_incremental": false, @@ -429,7 +429,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html", - "hash": "hnHiRb5Ygxna6QLy/Ch8e2UwmQIK1LR3ubWvE0uFYKg=" + "hash": "3ZvkMA731sGaikL4RUUM6bKG0vtP9NqjDRknomg2Aww=" } }, "is_incremental": false, @@ -441,7 +441,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html", - "hash": "Yv9Ym4TKoDkxCiLsRi3POWtRQ9h02eRwCZI+8I8NX2Y=" + "hash": "66sEAXLLAldHDPu8IyVEc8tx/aczxvCYilmpsD+7IU8=" } }, "is_incremental": false, @@ -453,7 +453,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html", - "hash": "Y+1WN+22TaAwl7ZCqmeHx6EG2OvUlKNw/ks6nzXXMng=" + "hash": "5LHGIxnKMHzA2x7Zt3huL9EqLZ7kq5szBLQDKSH1xkM=" } }, "is_incremental": false, @@ -465,7 +465,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html", - "hash": "5+q5/DOzq3OuxeKbLqRA2/s1BkfqXiyKlbm0P3HBTNc=" + "hash": "LzZhrQ+T7xDuPeChLzK1tLtYwzfs5ipSegKnDHID4FE=" } }, "is_incremental": false, @@ -477,7 +477,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html", - "hash": "orzzLi6ZcVE3mbj6/NU8vA4wrwhTgaH6higm/lXYDd0=" + "hash": "wHBwftCLQnDOXelEabdiWLVBgP0gTDmxHCTADlWT2O0=" } }, "is_incremental": false, @@ -489,7 +489,19 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html", - "hash": "Sq/Ifqpp2PU3EMM3n/daPOZk0OC9X1s324U17VrqTyQ=" + "hash": "R/np5q+A/k4GvOIgzMkmzQ1pQBc2g6jvpymvCUjBSMs=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html", + "hash": "cfAlpwTTWiPePl+7HHJX6Zd+EVDBtRDOWhVIkoWfXnI=" } }, "is_incremental": false, @@ -501,7 +513,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html", - "hash": "zmm4UL5bTLgsBC63uXqUqZPN2cnjG8GEkmbe3mHlW9Y=" + "hash": "DCPKZCxwDhDmYJ/Ur2QaMxmbdKsUwAxfTf+afSqpFXY=" } }, "is_incremental": false, @@ -513,7 +525,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html", - "hash": "wJvfdIZxVrkWwvXE2EDvGUoFxfqFm4HPg/24qpA+cnU=" + "hash": "l9ZnWLUNsCGv3yKm0owT3R1F3yu8eAu8QVF13AsxTII=" } }, "is_incremental": false, @@ -525,7 +537,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "ASuFpeqoa/RPfWFR1yFNrM8GCYZRtB+Ua5SqL37mkXI=" + "hash": "9kOZFwDra/gEyg/TMDxU8nU5Z8hpk3LSo230zchvmtI=" } }, "is_incremental": false, @@ -549,7 +561,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html", - "hash": "FylKxfWvU4V6lNqNOxLSS90hE/sG1o6FO9ydDvGyqkM=" + "hash": "whx0LKbQaF2aC2XcIypZXRYbNZ+YljJe5kNmYwZDnpI=" } }, "is_incremental": false, @@ -561,7 +573,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html", - "hash": "KjMFow82U9ejIVT5i1ypiEF0HREQPYlBU6hNXdxZWbo=" + "hash": "DIToYuV2ovfutZbpVCVwFZRROdbBybF0vQmU39ub8ww=" } }, "is_incremental": false, @@ -573,7 +585,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html", - "hash": "bRVZbbW7ch4z7GwFIkBR8f6CF7Ewf9KeAXhGxMpCDRY=" + "hash": "TorZnMb+npT1sju+s1iog40mq+QmI6fI/AzzWr1gfnk=" } }, "is_incremental": false, @@ -585,7 +597,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerBase.html", - "hash": "hPdmbjSGW0e/o1FwFfrVsC6LjnqIsz/7znXF4BjX3dY=" + "hash": "DMsrqzvJdcSCAJUC/e8+c4Zxdfmott0wBccKzeXM1Cg=" } }, "is_incremental": false, @@ -597,7 +609,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerModes.html", - "hash": "D2WEUdyNgLVnf9UC5S90hHeHHiB/GPzXsIsgX3Dp000=" + "hash": "4i9d0pmJraM76N3McQl7wHBxaqfuz55cLO01+pkSUGM=" } }, "is_incremental": false, @@ -609,7 +621,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html", - "hash": "+c9HJJ9/eZtzoa9MxxSwpn5csRwENatqKHOFtWR1FYc=" + "hash": "vzexxRJwAaEJ4/Qaf9Szu8eoQZ/sM1LgNi/iF61lv6Q=" } }, "is_incremental": false, @@ -621,7 +633,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.html", - "hash": "U4AOXd9VNbkUlYgP9+6vhtg9jsfUlZ/LxcgokdjE2og=" + "hash": "8a39+Avjooz8fF2g14yVXFuzb6ghi8T98Q+lgbPLmsM=" } }, "is_incremental": false, @@ -696,7 +708,7 @@ "ManagedReferenceDocumentProcessor": { "can_incremental": false, "incrementalPhase": "build", - "total_file_count": 50, + "total_file_count": 51, "skipped_file_count": 0 }, "TocDocumentProcessor": { diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index 1704606..a9c2c79 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -2189,12 +2189,6 @@ references: commentId: T:wan24.StreamSerializerExtensions.SerializerHelper fullName: wan24.StreamSerializerExtensions.SerializerHelper nameWithType: SerializerHelper -- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(System.Object) - name: EnsureNotNull(Object) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureNotNull_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(System.Object) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(System.Object) - nameWithType: SerializerHelper.EnsureNotNull(Object) - uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull* name: EnsureNotNull href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureNotNull_ @@ -2202,6 +2196,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull nameWithType: SerializerHelper.EnsureNotNull +- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull``1(``0) + name: EnsureNotNull(T) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureNotNull__1___0_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull``1(``0) + name.vb: EnsureNotNull(Of T)(T) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(T) + fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(Of T)(T) + nameWithType: SerializerHelper.EnsureNotNull(T) + nameWithType.vb: SerializerHelper.EnsureNotNull(Of T)(T) - uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureValidLength(System.Int32,System.Int32,System.Int32) name: EnsureValidLength(Int32, Int32, Int32) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureValidLength_System_Int32_System_Int32_System_Int32_ @@ -2234,12 +2237,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions nameWithType: SerializerHelper.GetKeySerializerOptions -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType(System.Object) - name: GetNumberAndType(Object) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetNumberAndType_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType(System.Object) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType(System.Object) - nameWithType: SerializerHelper.GetNumberAndType(Object) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType* name: GetNumberAndType href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetNumberAndType_ @@ -2247,12 +2244,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType nameWithType: SerializerHelper.GetNumberAndType -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType(System.Object,System.Boolean) - name: GetNumberType(Object, Boolean) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetNumberType_System_Object_System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType(System.Object,System.Boolean) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType(System.Object, System.Boolean) - nameWithType: SerializerHelper.GetNumberType(Object, Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType``1(``0) + name: GetNumberAndType(T) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetNumberAndType__1___0_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType``1(``0) + name.vb: GetNumberAndType(Of T)(T) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType(T) + fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberAndType(Of T)(T) + nameWithType: SerializerHelper.GetNumberAndType(T) + nameWithType.vb: SerializerHelper.GetNumberAndType(Of T)(T) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType* name: GetNumberType href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetNumberType_ @@ -2260,6 +2260,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType nameWithType: SerializerHelper.GetNumberType +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType``1(``0,System.Boolean) + name: GetNumberType(T, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetNumberType__1___0_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType``1(``0,System.Boolean) + name.vb: GetNumberType(Of T)(T, Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType(T, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.GetNumberType(Of T)(T, System.Boolean) + nameWithType: SerializerHelper.GetNumberType(T, Boolean) + nameWithType.vb: SerializerHelper.GetNumberType(Of T)(T, Boolean) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectSerializerInfo(System.Object) name: GetObjectSerializerInfo(Object) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetObjectSerializerInfo_System_Object_ @@ -2364,6 +2373,19 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsNumber nameWithType: SerializerHelper.IsNumber +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsSerializerConstructor(System.Reflection.ConstructorInfo,System.Boolean) + name: IsSerializerConstructor(ConstructorInfo, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsSerializerConstructor_System_Reflection_ConstructorInfo_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsSerializerConstructor(System.Reflection.ConstructorInfo,System.Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsSerializerConstructor(System.Reflection.ConstructorInfo, System.Boolean) + nameWithType: SerializerHelper.IsSerializerConstructor(ConstructorInfo, Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsSerializerConstructor* + name: IsSerializerConstructor + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsSerializerConstructor_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsSerializerConstructor + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsSerializerConstructor + nameWithType: SerializerHelper.IsSerializerConstructor - uid: wan24.StreamSerializerExtensions.SerializerHelper.IsUnsigned(wan24.StreamSerializerExtensions.NumberTypes) name: IsUnsigned(NumberTypes) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsUnsigned_wan24_StreamSerializerExtensions_NumberTypes_ @@ -6188,15 +6210,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) - name: WriteSerializedNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Stream_System_Nullable___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) - name.vb: WriteSerializedNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct* name: WriteSerializedNullableStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStruct_ @@ -6213,6 +6226,22 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, System.Nullable(Of T)) nameWithType: StreamExtensions.WriteSerializedNullableStruct(Stream, Nullable) nameWithType.vb: StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, Nullable(Of T)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync* + name: WriteSerializedNullableStructAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync + nameWithType: StreamExtensions.WriteSerializedNullableStructAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Stream,System.Nullable{``0},CancellationToken) + name: WriteSerializedNullableStructAsync(Stream, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync__1_Stream_System_Nullable___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Stream,System.Nullable{``0},CancellationToken) + name.vb: WriteSerializedNullableStructAsync(Of T)(Stream, Nullable(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Stream, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteSerializedNullableStructAsync(Stream, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, Nullable(Of T), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct* name: WriteSerializedStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStruct_ @@ -6631,6 +6660,31 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializer.BufferPool nameWithType: StreamSerializer.BufferPool +- uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(System.Reflection.ConstructorInfo@,Type,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name: CreateInstance(out ConstructorInfo, Type, Stream, Nullable, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance_System_Reflection_ConstructorInfo__Type_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(System.Reflection.ConstructorInfo@,Type,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: CreateInstance(ByRef ConstructorInfo, Type, Stream, Nullable(Of Int32), ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(out System.Reflection.ConstructorInfo, Type, Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(ByRef System.Reflection.ConstructorInfo, Type, Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamSerializer.CreateInstance(out ConstructorInfo, Type, Stream, Nullable, ISerializerOptions) + nameWithType.vb: StreamSerializer.CreateInstance(ByRef ConstructorInfo, Type, Stream, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance* + name: CreateInstance + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance + nameWithType: StreamSerializer.CreateInstance +- uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance``1(System.Reflection.ConstructorInfo@,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name: CreateInstance(out ConstructorInfo, Stream, Nullable, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance__1_System_Reflection_ConstructorInfo__Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance``1(System.Reflection.ConstructorInfo@,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: CreateInstance(Of T)(ByRef ConstructorInfo, Stream, Nullable(Of Int32), ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(out System.Reflection.ConstructorInfo, Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(Of T)(ByRef System.Reflection.ConstructorInfo, Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: StreamSerializer.CreateInstance(out ConstructorInfo, Stream, Nullable, ISerializerOptions) + nameWithType.vb: StreamSerializer.CreateInstance(Of T)(ByRef ConstructorInfo, Stream, Nullable(Of Int32), ISerializerOptions) - uid: wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate name: StreamSerializer.Deserialize_Delegate href: api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html @@ -6735,6 +6789,18 @@ references: commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate fullName: wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate nameWithType: StreamSerializer.Init_Delegate +- uid: wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactories + name: InstanceFactories + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_InstanceFactories + commentId: F:wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactories + fullName: wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactories + nameWithType: StreamSerializer.InstanceFactories +- uid: wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate + name: StreamSerializer.InstanceFactory_Delegate + href: api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate + fullName: wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate + nameWithType: StreamSerializer.InstanceFactory_Delegate - uid: wan24.StreamSerializerExtensions.StreamSerializer.IsTypeAllowed(Type) name: IsTypeAllowed(Type) href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_IsTypeAllowed_Type_ diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index 36c3793..6ea843e 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -53,3 +53,5 @@ {"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs","line":"84","date_time":"2023-06-11T11:44:51.1975713Z","message_severity":"warning","correlation_id":"44B1E5E9-6F25-4256-AF54-C99B8636032D.1.1.17"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-24T09:12:24.730424Z","message_severity":"warning","correlation_id":"AB2A3ED5-0256-4B54-A82D-22AE5DAFAB60.1.1.12"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-24T09:12:24.7414575Z","message_severity":"warning","correlation_id":"AB2A3ED5-0256-4B54-A82D-22AE5DAFAB60.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T10:43:06.3853697Z","message_severity":"warning","correlation_id":"86C6A747-1EEC-4F8D-8019-EE0C5147C43E.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T10:43:06.3893699Z","message_severity":"warning","correlation_id":"86C6A747-1EEC-4F8D-8019-EE0C5147C43E.1.1.13"} diff --git a/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs b/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs new file mode 100644 index 0000000..bb97fa8 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs @@ -0,0 +1,272 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using wan24.Core; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + [TestClass] + public class SerializerHelper_Tests + { + [TestMethod] + public void NumberType_RemoveFlags_Tests() + { + NumberTypes nt = NumberTypes.FLAGS; + Assert.AreEqual(NumberTypes.None, nt.RemoveFlags()); + nt = NumberTypes.Int | NumberTypes.FLAGS; + Assert.AreEqual(NumberTypes.Int, nt.RemoveFlags()); + nt = NumberTypes.Int | NumberTypes.MinValue | NumberTypes.FLAGS; + Assert.AreEqual(NumberTypes.Int | NumberTypes.MinValue, nt.RemoveFlags()); + } + + [TestMethod] + public void NumberType_RemoveValueFlags_Tests() + { + NumberTypes nt = NumberTypes.VALUE_FLAGS; + Assert.AreEqual(NumberTypes.None, nt.RemoveValueFlags()); + nt = NumberTypes.Int | NumberTypes.VALUE_FLAGS; + Assert.AreEqual(NumberTypes.Int, nt.RemoveValueFlags()); + nt = NumberTypes.Int | NumberTypes.MinValue | NumberTypes.FLAGS; + Assert.AreEqual(NumberTypes.Int | NumberTypes.FLAGS, nt.RemoveValueFlags()); + } + + [TestMethod] + public void NumberType_IsUnsigned_Tests() + { + NumberTypes nt = NumberTypes.Int; + Assert.IsFalse(nt.IsUnsigned()); + nt |= NumberTypes.Unsigned; + Assert.IsTrue(nt.IsUnsigned()); + } + + [TestMethod] + public void NumberType_IsMinValue_Tests() + { + NumberTypes nt = NumberTypes.Int | NumberTypes.MinValue; + Assert.IsTrue(nt.IsMinValue()); + nt &= ~NumberTypes.MinValue; + Assert.IsFalse(nt.IsMinValue()); + } + + [TestMethod] + public void NumberType_IsMaxValue_Tests() + { + NumberTypes nt = NumberTypes.Int | NumberTypes.MaxValue; + Assert.IsTrue(nt.IsMaxValue()); + nt &= ~NumberTypes.MaxValue; + Assert.IsFalse(nt.IsMaxValue()); + } + + [TestMethod] + public void NumberType_IsZero_Tests() + { + NumberTypes nt = NumberTypes.Zero; + Assert.IsTrue(nt.IsZero()); + nt |= NumberTypes.Int; + Assert.IsFalse(nt.IsZero()); + nt &= ~NumberTypes.Zero; + Assert.IsFalse(nt.IsZero()); + } + + [TestMethod] + public void NumberType_HasValueFlags_Tests() + { + NumberTypes nt = NumberTypes.Int | NumberTypes.MinValue; + Assert.IsTrue(nt.HasValueFlags()); + nt &= ~NumberTypes.MinValue; + Assert.IsFalse(nt.HasValueFlags()); + } + + [TestMethod] + public void ObjectType_RemoveFlags_Tests() + { + ObjectTypes ot = ObjectTypes.FLAGS; + Assert.AreEqual(ObjectTypes.Null, ot.RemoveFlags()); + ot = ObjectTypes.Object | ObjectTypes.FLAGS; + Assert.AreEqual(ObjectTypes.Object, ot.RemoveFlags()); + } + + [TestMethod] + public void ObjectType_IsEmpty() + { + ObjectTypes ot = ObjectTypes.Array | ObjectTypes.Empty; + Assert.IsTrue(ot.IsEmpty()); + ot &= ~ObjectTypes.Empty; + Assert.IsFalse(ot.IsEmpty()); + } + + [TestMethod] + public void ObjectType_IsUnsigned() + { + ObjectTypes ot = ObjectTypes.Int | ObjectTypes.Unsigned; + Assert.IsTrue(ot.IsUnsigned()); + ot &= ~ObjectTypes.Unsigned; + Assert.IsFalse(ot.IsUnsigned()); + } + + [TestMethod] + public void ObjectType_IsNumber() + { + ObjectTypes ot = ObjectTypes.Int | ObjectTypes.Unsigned; + Assert.IsTrue(ot.IsNumber()); + Assert.IsFalse(ObjectTypes.Object.IsNumber()); + } + + [TestMethod] + public void GetNumberType_Tests() + { + Assert.AreEqual(NumberTypes.None, string.Empty.GetNumberType()); + Assert.AreEqual(NumberTypes.None, SerializerHelper.GetNumberType((string?)null)); + Assert.AreEqual(NumberTypes.None, SerializerHelper.GetNumberType((int?)null)); + + Assert.AreEqual(NumberTypes.Byte, ((sbyte)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((sbyte)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Byte | NumberTypes.MinValue, sbyte.MinValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Byte | NumberTypes.MaxValue, sbyte.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Byte, sbyte.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Byte | NumberTypes.Unsigned, ((byte)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((byte)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned, byte.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Byte | NumberTypes.Unsigned, byte.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Short, ((short)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((short)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Short | NumberTypes.MinValue, short.MinValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Short | NumberTypes.MaxValue, short.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Short, short.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Short | NumberTypes.Unsigned, ((ushort)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((ushort)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned, ushort.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Short | NumberTypes.Unsigned, ushort.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Int, ((int)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((int)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Int | NumberTypes.MinValue, int.MinValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Int | NumberTypes.MaxValue, int.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Int, int.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Int | NumberTypes.Unsigned, ((uint)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((uint)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned, uint.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Int | NumberTypes.Unsigned, uint.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Long, ((long)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((long)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Long | NumberTypes.MinValue, long.MinValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Long | NumberTypes.MaxValue, long.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Long, long.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Long | NumberTypes.Unsigned, ((ulong)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((ulong)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned, ulong.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Long | NumberTypes.Unsigned, ulong.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Float, ((float)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((float)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Float | NumberTypes.MinValue, float.MinValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Float | NumberTypes.MaxValue, float.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Float, float.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Double, ((double)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((double)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Double | NumberTypes.MinValue, double.MinValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Double | NumberTypes.MaxValue, double.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Double, double.MaxValue.GetNumberType(false)); + + Assert.AreEqual(NumberTypes.Decimal, ((decimal)123).GetNumberType()); + Assert.AreEqual(NumberTypes.Zero, ((decimal)0).GetNumberType()); + Assert.AreEqual(NumberTypes.Decimal | NumberTypes.MinValue, decimal.MinValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Decimal | NumberTypes.MaxValue, decimal.MaxValue.GetNumberType()); + Assert.AreEqual(NumberTypes.Decimal, decimal.MaxValue.GetNumberType(false)); + } + + [TestMethod] + public void GetNumberAndType_Tests() + { + Assert.ThrowsException(() => string.Empty.GetNumberAndType()); + object number; + NumberTypes nt; + + (number, nt) = 0.GetNumberAndType(); + Assert.AreEqual(0, number); + Assert.AreEqual(NumberTypes.Zero, nt); + + (number, nt) = float.MinValue.GetNumberAndType(); + Assert.AreEqual(0, number); + Assert.AreEqual(NumberTypes.Float | NumberTypes.MinValue, nt); + + (number, nt) = float.MaxValue.GetNumberAndType(); + Assert.AreEqual(0, number); + Assert.AreEqual(NumberTypes.Float | NumberTypes.MaxValue, nt); + + (number, nt) = 123f.GetNumberAndType(); + Assert.AreEqual(123f, number); + Assert.AreEqual(NumberTypes.Float, nt); + + (number, nt) = 123d.GetNumberAndType(); + Assert.AreEqual(123f, number); + Assert.AreEqual(NumberTypes.Float, nt); + + (number, nt) = 1234567890123456789012345678901234567890d.GetNumberAndType(); + Assert.AreEqual(1234567890123456789012345678901234567890d, number); + Assert.AreEqual(NumberTypes.Double, nt); + + (number, nt) = 123m.GetNumberAndType(); + Assert.AreEqual(123m, number); + Assert.AreEqual(NumberTypes.Decimal, nt); + + (object Number, object Expected, NumberTypes NumberType)[] numbers = new (object Number, object Expected, NumberTypes NumberType)[] + { + (-1,(sbyte)-1,NumberTypes.Byte), + (1,(byte)1,NumberTypes.Byte|NumberTypes.Unsigned), + (sbyte.MinValue-1,(short)(sbyte.MinValue-1),NumberTypes.Short), + (byte.MaxValue+1,(short)(byte.MaxValue+1),NumberTypes.Short), + (short.MaxValue+1,(ushort)(short.MaxValue+1),NumberTypes.Short|NumberTypes.Unsigned), + (ushort.MaxValue+1,ushort.MaxValue+1,NumberTypes.Int), + ((long)int.MaxValue+1,(uint)int.MaxValue+1,NumberTypes.Int|NumberTypes.Unsigned), + ((long)uint.MaxValue+1,(long)uint.MaxValue+1,NumberTypes.Long), + ((ulong)long.MaxValue+1,(ulong)long.MaxValue+1,NumberTypes.Long|NumberTypes.Unsigned), + (sbyte.MinValue-1,(short)(sbyte.MinValue-1),NumberTypes.Short), + (short.MinValue-1,short.MinValue-1,NumberTypes.Int), + ((long)int.MinValue-1,(long)int.MinValue-1,NumberTypes.Long) + }; + for (int i = 0; i < numbers.Length; i++) + { + var (Number, Expected, NumberType) = numbers[i]; + (number, nt) = Number.GetNumberAndType(); + Assert.AreEqual(Expected, number, $"Expected number and type mismatch for {Number} at test #{i}"); + Assert.AreEqual(NumberType, nt, $"Expected number type mismatch for {Number} at test #{i}"); + } + } + + [TestMethod] + public void EnsureNotNull_Tests() + { + Assert.ThrowsException(() => SerializerHelper.EnsureNotNull((string?)null)); + Assert.AreEqual(string.Empty, SerializerHelper.EnsureNotNull(string.Empty)); + } + + [TestMethod] + public void EnsureValidLength_Tests() + { + Assert.ThrowsException(() => SerializerHelper.EnsureValidLength(2, 0, 1)); + Assert.AreEqual(1, SerializerHelper.EnsureValidLength(1, 0, 1)); + Assert.ThrowsException(() => SerializerHelper.EnsureValidLength(2L, 0L, 1L)); + Assert.AreEqual(1L, SerializerHelper.EnsureValidLength(1L, 0L, 1L)); + } + + [TestMethod] + public void IsSerializerCOnstructor_Tests() + { + ConstructorInfo[] cis = typeof(TestObject2).GetConstructorsCached().OrderBy(ci => ci.GetParametersCached().Length).ToArray(); + Assert.AreEqual(2, cis.Length); + Assert.AreEqual(0, cis[0].GetParametersCached().Length); + Assert.AreEqual(2, cis[1].GetParametersCached().Length); + Assert.IsFalse(cis[0].IsSerializerConstructor()); + Assert.IsTrue(cis[1].IsSerializerConstructor()); + Assert.IsFalse(cis[1].IsSerializerConstructor(true)); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs new file mode 100644 index 0000000..426d4df --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs @@ -0,0 +1,67 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Array_Tests() + { + using MemoryStream ms = new(); + bool[] arr = new bool[] { true, false }; + ms.WriteArray(arr); + ms.Position = 0; + CompareArray(arr, ms.ReadArray()); + arr = Array.Empty(); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArray(arr); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArrayNullable(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadArrayNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArrayNullable(arr); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(ms.ReadArrayNullable()); + } + + [TestMethod] + public async Task ArrayAsync_Tests() + { + using MemoryStream ms = new(); + bool[] arr = new bool[] { true, false }; + await ms.WriteArrayAsync(arr); + ms.Position = 0; + CompareArray(arr, await ms.ReadArrayAsync()); + arr = Array.Empty(); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteArrayAsync(arr); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteArrayNullableAsync(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadArrayNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteArrayNullableAsync(arr); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(await ms.ReadArrayNullableAsync()); + } + + private static void CompareArray(Array a, Array b) + { + Assert.AreEqual(a.Length, b.Length); + for (int i = 0; i < a.Length; i++) Assert.AreEqual(a.GetValue(i), b.GetValue(i)); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Basic.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs similarity index 100% rename from src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Basic.cs rename to src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs new file mode 100644 index 0000000..1388fb7 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs @@ -0,0 +1,167 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void SByte_Tests() + { + using MemoryStream ms = new(); + ms.Write((sbyte)-123); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)-123, ms.ReadOneSByte()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((sbyte)-123); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)-123, ms.ReadOneSByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((sbyte?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadOneByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(sbyte.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MinValue, ms.ReadOneSByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(sbyte.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MaxValue, ms.ReadOneSByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((sbyte)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)0, ms.ReadOneSByteNullable()); + } + + [TestMethod] + public async Task SByteAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((sbyte)-123); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)-123, await ms.ReadOneSByteAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((sbyte)-123); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)-123, await ms.ReadOneSByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((sbyte?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadOneByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(sbyte.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MinValue, await ms.ReadOneSByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(sbyte.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MaxValue, await ms.ReadOneSByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((sbyte)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)0, await ms.ReadOneSByteNullableAsync()); + } + + [TestMethod] + public void Byte_Tests() + { + using MemoryStream ms = new(); + ms.Write((byte)123); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)123, ms.ReadOneByte()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((byte)123); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)123, ms.ReadOneByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((byte?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadOneByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(byte.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MinValue, ms.ReadOneByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(byte.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MaxValue, ms.ReadOneByteNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((byte)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)0, ms.ReadOneByteNullable()); + } + + [TestMethod] + public async Task ByteAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((byte)123); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)123, await ms.ReadOneByteAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((byte)123); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)123, await ms.ReadOneByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((byte?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadOneByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(byte.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MinValue, await ms.ReadOneByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(byte.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MaxValue, await ms.ReadOneByteNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((byte)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)0, await ms.ReadOneByteNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs new file mode 100644 index 0000000..83f7394 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs @@ -0,0 +1,65 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Bytes_Tests() + { + byte[] data = new byte[20]; + Random.Shared.NextBytes(data); + using MemoryStream ms = new(); + ms.WriteBytes(data); + Assert.AreEqual(22L, ms.Length); + ms.Position = 0; + (byte[] temp, int len) = ms.ReadBytes(); + Assert.AreEqual((int)data.Length, len); + Assert.IsTrue(data.SequenceEqual(temp)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteBytesNullable(data); + Assert.AreEqual(22L, ms.Length); + ms.Position = 0; + var info = ms.ReadBytesNullable(); + Assert.IsNotNull(info); + Assert.AreEqual((int)data.Length, info.Value.Length); + Assert.IsTrue(data.SequenceEqual(info.Value.Value)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteBytesNullable(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadBytesNullable()); + } + + [TestMethod] + public async Task BytesAsync_Tests() + { + byte[] data = new byte[20]; + Random.Shared.NextBytes(data); + using MemoryStream ms = new(); + await ms.WriteBytesAsync(data); + Assert.AreEqual(22L, ms.Length); + ms.Position = 0; + (byte[] temp, int len) = await ms.ReadBytesAsync(); + Assert.AreEqual((int)data.Length, len); + Assert.IsTrue(data.SequenceEqual(temp)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteBytesNullableAsync(data); + Assert.AreEqual(22L, ms.Length); + ms.Position = 0; + var info = await ms.ReadBytesNullableAsync(); + Assert.IsNotNull(info); + Assert.AreEqual((int)data.Length, info.Value.Length); + Assert.IsTrue(data.SequenceEqual(info.Value.Value)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteBytesNullableAsync(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadBytesNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs new file mode 100644 index 0000000..a92b78f --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs @@ -0,0 +1,87 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Decimal_Tests() + { + using MemoryStream ms = new(); + ms.Write((decimal)-1234567890123456789); + Assert.AreEqual(16L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)-1234567890123456789, ms.ReadDecimal()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((decimal)-1234567890123456789); + Assert.AreEqual(17L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)-1234567890123456789, ms.ReadDecimalNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((decimal?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadDecimalNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(decimal.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MinValue, ms.ReadDecimalNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(decimal.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MaxValue, ms.ReadDecimalNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((decimal)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)0, ms.ReadDecimalNullable()); + } + + [TestMethod] + public async Task DecimalAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((decimal)-1234567890123456789); + Assert.AreEqual(16L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)-1234567890123456789, await ms.ReadDecimalAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((decimal)-1234567890123456789); + Assert.AreEqual(17L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)-1234567890123456789, await ms.ReadDecimalNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((decimal?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadDecimalNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(decimal.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MinValue, await ms.ReadDecimalNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(decimal.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MaxValue, await ms.ReadDecimalNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((decimal)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)0, await ms.ReadDecimalNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs new file mode 100644 index 0000000..09d7b1d --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs @@ -0,0 +1,80 @@ +using System.Collections; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Dict_Tests() + { + using MemoryStream ms = new(); + Dictionary dict = new() + { + {0, true }, + {1, false } + }; + ms.WriteDict(dict); + ms.Position = 0; + CompareDict(dict, ms.ReadDict()); + dict.Clear(); + ms.SetLength(0); + ms.Position = 0; + ms.WriteDict(dict); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + ms.WriteDictNullable(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadDictNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteDictNullable(dict); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(ms.ReadDictNullable()); + } + + [TestMethod] + public async Task DictAsync_Tests() + { + using MemoryStream ms = new(); + Dictionary dict = new() + { + {0, true }, + {1, false } + }; + await ms.WriteDictAsync(dict); + ms.Position = 0; + CompareDict(dict, await ms.ReadDictAsync()); + dict.Clear(); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteDictAsync(dict); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteDictNullableAsync(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadDictNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteDictNullableAsync(dict); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(await ms.ReadDictNullableAsync()); + } + + private static void CompareDict(IDictionary a, IDictionary b) + { + Assert.AreEqual(a.Count, b.Count); + foreach (object key in a.Keys) + { + Assert.IsTrue(b.Contains(key)); + Assert.AreEqual(a[key], b[key]); + } + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs new file mode 100644 index 0000000..e3e7743 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs @@ -0,0 +1,87 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Double_Tests() + { + using MemoryStream ms = new(); + ms.Write((double)-12345678901); + Assert.AreEqual(8L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)-12345678901, ms.ReadDouble()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((double)-12345678901); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)-12345678901, ms.ReadDoubleNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((double?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadDoubleNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(double.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MinValue, ms.ReadDoubleNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(double.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MaxValue, ms.ReadDoubleNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((double)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)0, ms.ReadDoubleNullable()); + } + + [TestMethod] + public async Task DoubleAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((double)-12345678901); + Assert.AreEqual(8L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)-12345678901, await ms.ReadDoubleAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((double)-12345678901); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)-12345678901, await ms.ReadDoubleNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((double?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadDoubleNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(double.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MinValue, await ms.ReadDoubleNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(double.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MaxValue, await ms.ReadDoubleNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((double)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)0, await ms.ReadDoubleNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs new file mode 100644 index 0000000..3fff697 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs @@ -0,0 +1,39 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Enum_Tests() + { + using MemoryStream ms = new(); + ms.WriteEnum(TestEnum.One); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual(TestEnum.One, ms.ReadEnum()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteEnum(TestEnum.Zero); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(TestEnum.Zero, ms.ReadEnum()); + } + + [TestMethod] + public async Task EnumAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteEnumAsync(TestEnum.One); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual(TestEnum.One, await ms.ReadEnumAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteEnumAsync(TestEnum.Zero); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(TestEnum.Zero, await ms.ReadEnumAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs new file mode 100644 index 0000000..fa52410 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs @@ -0,0 +1,87 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Float_Tests() + { + using MemoryStream ms = new(); + ms.Write((float)-123456); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)-123456, ms.ReadFloat()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((float)-123456); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)-123456, ms.ReadFloatNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((float?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadFloatNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(float.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MinValue, ms.ReadFloatNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(float.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MaxValue, ms.ReadFloatNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((float)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)0, ms.ReadFloatNullable()); + } + + [TestMethod] + public async Task FloatAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((float)-123456); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)-123456, await ms.ReadFloatAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((float)-123456); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)-123456, await ms.ReadFloatNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((float?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadFloatNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(float.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MinValue, await ms.ReadFloatNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(float.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MaxValue, await ms.ReadFloatNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((float)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)0, await ms.ReadFloatNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs new file mode 100644 index 0000000..dfee802 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs @@ -0,0 +1,167 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Int_Tests() + { + using MemoryStream ms = new(); + ms.Write((int)-123456); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)-123456, ms.ReadInt()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((int)-123456); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)-123456, ms.ReadIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((int?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(int.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MinValue, ms.ReadIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(int.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MaxValue, ms.ReadIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((int)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)0, ms.ReadIntNullable()); + } + + [TestMethod] + public async Task IntAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((int)-123456); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)-123456, await ms.ReadIntAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((int)-123456); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)-123456, await ms.ReadIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((int?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(int.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MinValue, await ms.ReadIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(int.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MaxValue, await ms.ReadIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((int)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)0, await ms.ReadIntNullableAsync()); + } + + [TestMethod] + public void UInt_Tests() + { + using MemoryStream ms = new(); + ms.Write((uint)123456); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)123456, ms.ReadUInt()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((uint)123456); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)123456, ms.ReadUIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((uint?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadUIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(uint.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MinValue, ms.ReadUIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(uint.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MaxValue, ms.ReadUIntNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((uint)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)0, ms.ReadUIntNullable()); + } + + [TestMethod] + public async Task UIntAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((uint)123456); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)123456, await ms.ReadUIntAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((uint)123456); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)123456, await ms.ReadUIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((uint?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadUIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(uint.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MinValue, await ms.ReadUIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(uint.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MaxValue, await ms.ReadUIntNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((uint)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)0, await ms.ReadUIntNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs new file mode 100644 index 0000000..7a6c64d --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs @@ -0,0 +1,76 @@ +using System.Collections; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void List_Tests() + { + using MemoryStream ms = new(); + List list = new() + { + true, + false + }; + ms.WriteList(list); + ms.Position = 0; + CompareList(list, ms.ReadList()); + list.Clear(); + ms.SetLength(0); + ms.Position = 0; + ms.WriteList(list); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + ms.WriteListNullable(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadListNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteListNullable(list); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(ms.ReadListNullable()); + } + + [TestMethod] + public async Task ListAsync_Tests() + { + using MemoryStream ms = new(); + List list = new() + { + true, + false + }; + await ms.WriteListAsync(list); + ms.Position = 0; + CompareList(list, await ms.ReadListAsync()); + list.Clear(); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteListAsync(list); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteListNullableAsync(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadListNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteListNullableAsync(list); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(await ms.ReadListNullableAsync()); + } + + private static void CompareList(IList a, IList b) + { + Assert.AreEqual(a.Count, b.Count); + for (int i = 0; i < a.Count; i++) Assert.AreEqual(a[i], b[i]); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs new file mode 100644 index 0000000..92a76e9 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs @@ -0,0 +1,167 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Long_Tests() + { + using MemoryStream ms = new(); + ms.Write((long)-12345678901); + Assert.AreEqual(8L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)-12345678901, ms.ReadLong()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((long)-12345678901); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)-12345678901, ms.ReadLongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((long?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadLongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(long.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MinValue, ms.ReadLongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(long.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MaxValue, ms.ReadLongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((long)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)0, ms.ReadLongNullable()); + } + + [TestMethod] + public async Task LongAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((long)-12345678901); + Assert.AreEqual(8L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)-12345678901, await ms.ReadLongAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((long)-12345678901); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)-12345678901, await ms.ReadLongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((long?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadLongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(long.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MinValue, await ms.ReadLongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(long.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MaxValue, await ms.ReadLongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((long)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)0, await ms.ReadLongNullableAsync()); + } + + [TestMethod] + public void ULong_Tests() + { + using MemoryStream ms = new(); + ms.Write((ulong)12345678901); + Assert.AreEqual(8L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)12345678901, ms.ReadULong()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ulong)12345678901); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)12345678901, ms.ReadULongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ulong?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadULongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ulong.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MinValue, ms.ReadULongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ulong.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MaxValue, ms.ReadULongNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ulong)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)0, ms.ReadULongNullable()); + } + + [TestMethod] + public async Task ULongAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((ulong)12345678901); + Assert.AreEqual(8L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)12345678901, await ms.ReadULongAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ulong)12345678901); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)12345678901, await ms.ReadULongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ulong?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadULongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ulong.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MinValue, await ms.ReadULongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ulong.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MaxValue, await ms.ReadULongNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ulong)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)0, await ms.ReadULongNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs new file mode 100644 index 0000000..ea6661e --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs @@ -0,0 +1,83 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Number_Tests() + { + using MemoryStream ms = new(); + (object Number, long Length, Type Type, NumberTypes NumberType)[] data = new (object Number, long Length, Type Type, NumberTypes NumberType)[] + { + (0, 1, typeof(int), NumberTypes.Zero), + (123, 2, typeof(int), NumberTypes.Byte|NumberTypes.Unsigned), + (1234, 3, typeof(int), NumberTypes.Short), + (123456, 5, typeof(int), NumberTypes.Int), + (12345678901, 9, typeof(long), NumberTypes.Long), + (1f, 5, typeof(float), NumberTypes.Float), + (1d, 5, typeof(float), NumberTypes.Float), + (1234567890123456789012345678901234567890d, 9, typeof(double), NumberTypes.Double), + (1m, 17, typeof(decimal), NumberTypes.Decimal) + }; + foreach (var info in data) + { + Assert.AreEqual(info.NumberType, SerializerHelper.GetNumberAndType(info.Number).Type, info.Number.ToString()); + ms.WriteNumber(info.Number); + Assert.AreEqual(info.Length, ms.Length, info.Number.ToString()); + ms.Position = 0; + Assert.AreEqual(Convert.ChangeType(info.Number, info.Type), ms.ReadNumber(info.Type), $"{info.Number.GetType()} {info.Number}"); + ms.SetLength(0); + ms.Position = 0; + } + ms.WriteNumberNullable(123); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual(123, ms.ReadNumberNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNumberNullable((int?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadNumberNullable()); + } + + [TestMethod] + public async Task NumberAsync_Tests() + { + using MemoryStream ms = new(); + (object Number, long Length, Type Type, NumberTypes NumberType)[] data = new (object Number, long Length, Type Type, NumberTypes NumberType)[] + { + (0, 1, typeof(int), NumberTypes.Zero), + (123, 2, typeof(int), NumberTypes.Byte|NumberTypes.Unsigned), + (1234, 3, typeof(int), NumberTypes.Short), + (123456, 5, typeof(int), NumberTypes.Int), + (12345678901, 9, typeof(long), NumberTypes.Long), + (1f, 5, typeof(float), NumberTypes.Float), + (1d, 5, typeof(float), NumberTypes.Float), + (1234567890123456789012345678901234567890d, 9, typeof(double), NumberTypes.Double), + (1m, 17, typeof(decimal), NumberTypes.Decimal) + }; + foreach (var info in data) + { + Assert.AreEqual(info.NumberType, SerializerHelper.GetNumberAndType(info.Number).Type, info.Number.ToString()); + await ms.WriteNumberAsync(info.Number); + Assert.AreEqual(info.Length, ms.Length, info.Number.ToString()); + ms.Position = 0; + Assert.AreEqual(Convert.ChangeType(info.Number, info.Type), await ms.ReadNumberAsync(info.Type), $"{info.Number.GetType()} {info.Number}"); + ms.SetLength(0); + ms.Position = 0; + } + await ms.WriteNumberNullableAsync(123); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual(123, await ms.ReadNumberNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNumberNullableAsync((int?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadNumberNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs new file mode 100644 index 0000000..4d6d858 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs @@ -0,0 +1,55 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Serialized_Tests() + { + using MemoryStream ms = new(); + + TestObject2 obj = new() + { + Value = true + }; + ms.WriteSerialized(obj); + ms.Position = 0; + Assert.IsTrue(ms.ReadSerialized().Value); + ms.SetLength(0); + ms.Position = 0; + ms.WriteSerializedNullable(obj); + ms.Position = 0; + Assert.IsTrue(ms.ReadSerializedNullable()?.Value); + ms.SetLength(0); + ms.Position = 0; + ms.WriteSerializedNullable((TestObject2?)null); + ms.Position = 0; + Assert.IsNull(ms.ReadSerializedNullable()); + } + + [TestMethod] + public async Task SerializedAsync_Tests() + { + using MemoryStream ms = new(); + + TestObject2 obj = new() + { + Value = true + }; + await ms.WriteSerializedAsync(obj); + ms.Position = 0; + Assert.IsTrue((await ms.ReadSerializedAsync()).Value); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteSerializedNullableAsync(obj); + ms.Position = 0; + Assert.IsTrue((await ms.ReadSerializedNullableAsync())?.Value); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteSerializedNullableAsync((TestObject2?)null); + ms.Position = 0; + Assert.IsNull(await ms.ReadSerializedNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs new file mode 100644 index 0000000..ca6c9c9 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs @@ -0,0 +1,167 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Short_Tests() + { + using MemoryStream ms = new(); + ms.Write((short)-1234); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)-1234, ms.ReadShort()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((short)-1234); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)-1234, ms.ReadShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((short?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(short.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MinValue, ms.ReadShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(short.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MaxValue, ms.ReadShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((short)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)0, ms.ReadShortNullable()); + } + + [TestMethod] + public async Task ShortAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((short)-1234); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)-1234, await ms.ReadShortAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((short)-1234); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)-1234, await ms.ReadShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((short?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(short.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MinValue, await ms.ReadShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(short.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MaxValue, await ms.ReadShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((short)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)0, await ms.ReadShortNullableAsync()); + } + + [TestMethod] + public void UShort_Tests() + { + using MemoryStream ms = new(); + ms.Write((ushort)1234); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)1234, ms.ReadUShort()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ushort)1234); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)1234, ms.ReadUShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ushort?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadUShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ushort.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MinValue, ms.ReadUShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ushort.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MaxValue, ms.ReadUShortNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ushort)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)0, ms.ReadUShortNullable()); + } + + [TestMethod] + public async Task UShortAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAsync((ushort)1234); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)1234, await ms.ReadUShortAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ushort)1234); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)1234, await ms.ReadUShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ushort?)null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadUShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ushort.MinValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MinValue, await ms.ReadUShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ushort.MaxValue); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MaxValue, await ms.ReadUShortNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ushort)0); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)0, await ms.ReadUShortNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs new file mode 100644 index 0000000..c4587a7 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs @@ -0,0 +1,115 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void String_Tests() + { + using MemoryStream ms = new(); + + string str = "abcdef"; + ms.WriteString(str); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString()); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + ms.WriteString(str); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString()); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + ms.WriteString16(str); + Assert.AreEqual(((long)str.Length << 1) + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString16()); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüößﻼ";//TODO Correct sample? + ms.WriteString32(str); + Assert.AreEqual(((long)str.Length << 2) + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString32()); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdef"; + ms.WriteStringNullable(str); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadStringNullable()); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + ms.WriteStringNullable(null); + Assert.AreEqual(1, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadStringNullable()); + Assert.AreEqual(ms.Length, ms.Position); + } + + [TestMethod] + public async Task StringAsync_Tests() + { + using MemoryStream ms = new(); + + string str = "abcdef"; + await ms.WriteStringAsync(str); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadStringAsync()); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + await ms.WriteStringAsync(str); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadStringAsync()); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + await ms.WriteString16Async(str); + Assert.AreEqual(((long)str.Length << 1) + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadString16Async()); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüößﻼ";//TODO Correct sample? + await ms.WriteString32Async(str); + Assert.AreEqual(((long)str.Length << 2) + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadString32Async()); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdef"; + await ms.WriteStringNullableAsync(str); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadStringNullableAsync()); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + await ms.WriteStringNullableAsync(null); + Assert.AreEqual(1, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadStringNullableAsync()); + Assert.AreEqual(ms.Length, ms.Position); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs new file mode 100644 index 0000000..01b593d --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs @@ -0,0 +1,55 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Struct_Tests() + { + using MemoryStream ms = new(); + + TestStruct ts = new(true); + ms.WriteStruct(ts); + ms.Position = 0; + Assert.IsTrue(ms.ReadStruct().Value); + ms.SetLength(0); + ms.Position = 0; + + ms.WriteStructNullable(ts); + ms.Position = 0; + Assert.IsTrue(ms.ReadStructNullable()?.Value); + ms.SetLength(0); + ms.Position = 0; + + ms.WriteStructNullable((TestStruct?)null); + ms.Position = 0; + Assert.AreEqual(1L, ms.Length); + Assert.IsNull(ms.ReadStructNullable()); + } + + [TestMethod] + public async Task StructAsync_Tests() + { + using MemoryStream ms = new(); + + TestStruct ts = new(true); + await ms.WriteStructAsync(ts); + ms.Position = 0; + Assert.IsTrue((await ms.ReadStructAsync()).Value); + ms.SetLength(0); + ms.Position = 0; + + await ms.WriteStructNullableAsync(ts); + ms.Position = 0; + Assert.IsTrue((await ms.ReadStructNullableAsync())?.Value); + ms.SetLength(0); + ms.Position = 0; + + await ms.WriteStructNullableAsync((TestStruct?)null); + ms.Position = 0; + Assert.AreEqual(1L, ms.Length); + Assert.IsNull(await ms.ReadStructNullableAsync()); + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/TestObject2.cs b/src/Stream-Serializer-Extensions Tests/TestObject2.cs index 831eb51..8f62d3f 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject2.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject2.cs @@ -18,15 +18,9 @@ protected override async Task SerializeAsync(Stream stream, CancellationToken ca => await stream.WriteAsync(Value, cancellationToken).DynamicContext(); protected override void Deserialize(Stream stream, int version) - { - if (((IStreamSerializerVersion)this).SerializedObjectVersion != 1) throw new SerializerException("Invalid serialized object version"); - Value = stream.ReadBool(version); - } + => Value = stream.ReadBool(version); protected override async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) - { - if (((IStreamSerializerVersion)this).SerializedObjectVersion != 1) throw new SerializerException("Invalid serialized object version"); - Value = await stream.ReadBoolAsync(version, cancellationToken: cancellationToken).DynamicContext(); - } + => Value = await stream.ReadBoolAsync(version, cancellationToken: cancellationToken).DynamicContext(); } } diff --git a/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs b/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs index 9f55168..0036703 100644 --- a/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs @@ -43,7 +43,7 @@ protected DisposableStreamSerializerBase(int? objectVersion = null) : base() protected DisposableStreamSerializerBase(Stream stream, int version, int? objectVersion = null) : base() { _ObjectVersion = objectVersion; - Deserialize(stream, version); + DeserializeInt(stream, version); } /// diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index 81011b5..07f662d 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -1,5 +1,7 @@ using System.Collections; using System.ComponentModel.DataAnnotations; +using System.Diagnostics; +using System.Reflection; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -125,10 +127,11 @@ public static class SerializerHelper /// /// Get the type of a number /// + /// Number type /// Number /// Use the flags? /// Number type - public static NumberTypes GetNumberType(this object number, bool useFlags = true) + public static NumberTypes GetNumberType(this T number, bool useFlags = true) => number switch { sbyte sb => useFlags @@ -232,13 +235,18 @@ public static NumberTypes GetNumberType(this object number, bool useFlags = true /// /// Get the best matching number type /// + /// Number type /// Number /// Number and type - public static (object Number, NumberTypes Type) GetNumberAndType(this object number) + public static (object Number, NumberTypes Type) GetNumberAndType(this T number) { + ArgumentValidationHelper.EnsureValidArgument(nameof(number), number); +#if DEBUG + Debug.Assert(number != null); +#endif NumberTypes origin = GetNumberType(number), type; - if (origin == NumberTypes.None) throw new ArgumentException("Not a supported numeric type", nameof(number)); + ArgumentValidationHelper.EnsureValidArgument(nameof(number), origin != NumberTypes.None, "Not a supported numeric type"); if (origin.IsZero() || origin.IsMinValue() || origin.IsMaxValue()) return (0, origin); object num; switch (origin.RemoveFlags()) @@ -293,22 +301,17 @@ public static (object Number, NumberTypes Type) GetNumberAndType(this object num else if ((int)value > short.MaxValue) { num = (ushort)value; - type = NumberTypes.Int | NumberTypes.Unsigned; + type = NumberTypes.Short | NumberTypes.Unsigned; } else if (value > byte.MaxValue) { num = (short)value; - type = NumberTypes.Int; - } - else if ((short)value > sbyte.MaxValue) - { - num = (byte)value; - type = NumberTypes.Int | NumberTypes.Unsigned; + type = NumberTypes.Short; } else { - num = (sbyte)value; - type = NumberTypes.Int; + num = (byte)value; + type = NumberTypes.Byte | NumberTypes.Unsigned; } } else @@ -357,22 +360,17 @@ public static (object Number, NumberTypes Type) GetNumberAndType(this object num else if ((int)value > short.MaxValue) { num = (ushort)value; - type = NumberTypes.Int | NumberTypes.Unsigned; + type = NumberTypes.Short | NumberTypes.Unsigned; } else if (value > byte.MaxValue) { num = (short)value; - type = NumberTypes.Int; - } - else if ((short)value > sbyte.MaxValue) - { - num = (byte)value; - type = NumberTypes.Int | NumberTypes.Unsigned; + type = NumberTypes.Short; } else { - num = (sbyte)value; - type = NumberTypes.Int; + num = (byte)value; + type = NumberTypes.Byte | NumberTypes.Unsigned; } } } @@ -388,6 +386,10 @@ public static (object Number, NumberTypes Type) GetNumberAndType(this object num /// Informations public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObject) GetObjectSerializerInfo(this object obj) { + ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj); +#if DEBUG + Debug.Assert(obj != null); +#endif Type type = obj.GetType(); ObjectTypes objType = obj switch { @@ -414,11 +416,11 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje { objType = ObjectTypes.Array; } - else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) + else if (typeof(IList).IsAssignableFrom(type)) { objType = ObjectTypes.List; } - else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<,>)) + else if (typeof(IDictionary).IsAssignableFrom(type)) { objType = ObjectTypes.Dict; } @@ -520,11 +522,13 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje /// /// Ensure a non-null value /// + /// Value type /// Value /// Non-null value [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static object EnsureNotNull(object? value) => value ?? throw new SerializerException($"Argument {nameof(value)} is NULL", new ArgumentNullException(nameof(value))); + public static T EnsureNotNull(T? value) + => value ?? throw new SerializerException($"Argument {nameof(value)} is NULL", new ArgumentNullException(nameof(value))); /// /// Ensure a valid length @@ -652,5 +656,22 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ISerializerOptions? GetValueSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken) => pi.GetCustomAttributeCached()?.GetValueSerializerOptions(pi, stream, version, cancellationToken); + + /// + /// Determine if the constructor is the serializer constructor + /// + /// Constructor + /// Require the ? + /// Is the serializer constructor? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsSerializerConstructor(this ConstructorInfo ci, bool requireAttribute = false) + { + ParameterInfo[] pis = ci.GetParametersCached(); + return pis.Select(p => p.ParameterType).ContainsAll(typeof(Stream), typeof(int)) && + pis[0].ParameterType == typeof(Stream) && + pis[1].ParameterType == typeof(int) && + (!requireAttribute || ci.GetCustomAttributeCached() is not null); + } } } diff --git a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj index 0dc2a18..0c7623c 100644 --- a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj +++ b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj @@ -29,6 +29,7 @@ False + $(DefineConstants);DEBUG diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs index f4be7c3..eb34446 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs @@ -177,10 +177,10 @@ public static async Task ReadArrayAsync( } default: { - int? len = ReadNumberNullable(stream, version, pool); - if (len == null) return null; - if (len < 1) return Array.Empty(); - T[] res = new T[SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)]; + if (ReadNumberNullable(stream, version, pool) is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) return Array.Empty(); + T[] res = new T[len]; ReadFixedArray(stream, res.AsSpan(), version, valueOptions); return res; } @@ -221,13 +221,12 @@ public static async Task ReadArrayAsync( } default: { - int? len = ReadNumberNullable(stream, version, pool); - if (len == null) return null; + if (ReadNumberNullable(stream, version, pool) is not int len) return null; return len < 1 ? Array.CreateInstance(type.GetElementType()!, length: 0) : ReadFixedArray( stream, - Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)), + Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len, minLen, maxLen)), version, valueOptions ); @@ -272,10 +271,10 @@ public static async Task ReadArrayAsync( } default: { - int? len = await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == null) return null; - if (len < 1) return Array.Empty(); - T[] res = new T[SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)]; + if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) return Array.Empty(); + T[] res = new T[len]; await ReadFixedArrayAsync(stream, res.AsMemory(), version, valueOptions, cancellationToken).DynamicContext(); return res; } @@ -320,13 +319,12 @@ public static async Task ReadArrayAsync( } default: { - int? len = await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == null) return null; + if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; return len < 1 ? Array.CreateInstance(type.GetElementType()!, length: 0) : await ReadFixedArrayAsync( stream, - Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len!.Value, minLen, maxLen)), + Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len, minLen, maxLen)), version, valueOptions, cancellationToken @@ -478,7 +476,11 @@ public static async Task ReadFixedArrayAsync( ) { Type elementType = arr.GetType().GetElementType()!; - for (int i = 0, len = arr.Length; i < len; arr.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++) ; + for ( + int i = 0, len = arr.Length; + i < len; + arr.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++ + ) ; return arr; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs index ce9d4fa..d734922 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs @@ -112,7 +112,8 @@ public static (byte[] Value, int Length) ReadBytes( /// Stream /// Serializer version /// Result buffer to use - /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the pool after use!) + /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the + /// pool after use!) /// Minimum length in bytes /// Maximum length in bytes /// Value and length @@ -138,10 +139,9 @@ public static (byte[] Value, int Length)? ReadBytesNullable( bool rented = false; try { - int len = ReadNumber(stream, version, pool); - if (len == -1) return null; + if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null) buffer = Array.Empty(); + if (len == 0 && buffer == null && pool == null) buffer = Array.Empty(); rented = buffer == null && pool != null; buffer ??= rented ? pool!.Rent(len) : new byte[len]; if (buffer.Length < len) throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); @@ -172,7 +172,8 @@ public static (byte[] Value, int Length)? ReadBytesNullable( /// Stream /// Serializer version /// Result buffer to use - /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the pool after use!) + /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the + /// pool after use!) /// Minimum length in bytes /// Maximum length in bytes /// Cancellation token @@ -202,22 +203,19 @@ public static (byte[] Value, int Length)? ReadBytesNullable( bool rented = false; try { - return await SerializerException.WrapAsync(async () => + if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0 && buffer == null && pool == null) buffer = Array.Empty(); + rented = buffer == null && pool != null; + buffer ??= rented ? pool!.Rent(len) : new byte[len]; + if (buffer.Length < len) + throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); + if (len != 0) { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) - throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); - if (len != 0) - { - int red = await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext(); - if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); - } - return (buffer, len); - }).DynamicContext(); + int red = await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext(); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + } + return (buffer, len); } catch (SerializerException) { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs index 1d768b4..8c5468e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs @@ -207,8 +207,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok return ReadBool(stream, version, pool) ? ReadDict(stream, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; default: { - int len = ReadNumber(stream, version, pool); - if (len == -1) return null; + if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); for (int i = 0; i < len; i++) res[ReadObject(stream, version, keyOptions)] = ReadObject(stream, version, valueOptions); @@ -259,8 +258,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok } default: { - int len = ReadNumber(stream, version, pool); - if (len == -1) return null; + if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); @@ -312,8 +310,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok } default: { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == -1) return null; + if(await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); for (int i = 0; i < len; i++) @@ -370,8 +367,7 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). } default: { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == -1) return null; + if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs index 7af1bd5..00f9c3b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs @@ -52,16 +52,10 @@ private static Enum ReadEnumInt(Stream stream, Type type, int? version, NumberTy => SerializerException.Wrap(() => { IEnumInfo info = type.GetEnumInfo(); - if ((numberType ?? NumberTypes.None) == NumberTypes.Default) - return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); numberType ??= (NumberTypes)ReadOneByte(stream, version); - if ((version ?? StreamSerializer.VERSION) > 1 && numberType == NumberTypes.Default) - return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); - Enum res = (Enum)Enum.ToObject( - type, - ReadNumber(stream, type.GetEnumUnderlyingType()!, version, pool) - ); - if (!info.IsValidEnumerationValue()) throw new SerializerException($"Unknown enumeration value {res} for {type}"); + if (numberType == NumberTypes.Default) return info.DefaultValue; + Enum res = (Enum)Enum.ToObject(type, ReadNumberInt(stream, type.GetEnumUnderlyingType()!, version, numberType, pool)); + if (!info.IsValidValue(res)) throw new SerializerException($"Unknown enumeration value {res} for {type}"); return res; }); @@ -112,13 +106,11 @@ public static Task ReadEnumAsync(this Stream stream, Type type, int? versi private static Task ReadEnumIntAsync(Stream stream, Type type, int? version, NumberTypes? numberType, ArrayPool? pool, CancellationToken cancellationToken) => SerializerException.WrapAsync(async () => { - if ((numberType ?? NumberTypes.None) == NumberTypes.Default) - return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + IEnumInfo info = type.GetEnumInfo(); numberType ??= (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - if ((version ?? StreamSerializer.VERSION) > 1 && numberType == NumberTypes.Default) - return (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + if (numberType == NumberTypes.Default) return info.DefaultValue; Enum res = (Enum)Enum.ToObject(type, await ReadNumberIntAsync(stream, type.GetEnumUnderlyingType(), version, numberType, pool, cancellationToken).DynamicContext()); - if (!res.IsValidEnumerationValue()) throw new SerializerException($"Unknown enumeration value {res} for {type}"); + if (!info.IsValidValue(res)) throw new SerializerException($"Unknown enumeration value {res} for {type}"); return res; }); @@ -170,13 +162,13 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio { return ReadBool(stream, version, pool) ? ReadEnum(stream, type, version, pool) - : (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + : null; } default: { NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); return numberType == NumberTypes.Null - ? (Enum)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")) + ? null : ReadEnumInt(stream, type, version, numberType, pool); } } @@ -204,13 +196,13 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(T?); + : null; } default: { NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); return numberType == NumberTypes.Null - ? default(T?) + ? null : (T)await ReadEnumIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken).DynamicContext(); } } @@ -243,13 +235,13 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() ? await ReadEnumAsync(stream, type, version, pool, cancellationToken).DynamicContext() - : (Enum?)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")); + : null; } default: { NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); return numberType == NumberTypes.Null - ? (Enum?)(Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}")) + ? null : await ReadEnumIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs index 041dfa2..b24c587 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs @@ -184,8 +184,7 @@ public static async Task ReadListAsync( } default: { - int len = ReadNumber(stream, version, pool); - if (len == -1) return null; + if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); for (int i = 0; i < len; res.Add(ReadObject(stream, version, valueOptions)), i++) ; @@ -233,8 +232,7 @@ public static async Task ReadListAsync( } default: { - int len = ReadNumber(stream, version, pool); - if (len == -1) return null; + if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); @@ -281,8 +279,7 @@ public static async Task ReadListAsync( } default: { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == -1) return null; + if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext()), i++) ; @@ -334,8 +331,7 @@ public static async Task ReadListAsync( } default: { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - if (len == -1) return null; + if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs index 4d67e1b..d59f31b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs @@ -304,10 +304,16 @@ CancellationToken cancellationToken switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) { case 1: - return ReadBool(stream, version, pool) ? ReadNumber(stream, version, pool) : null; + { + return ReadBool(stream, version, pool) ? ReadNumber(stream, version, pool) : null; + } + case 2: + { + NumberTypes numberType = ReadEnum(stream, version, pool); + return numberType == NumberTypes.Null ? null : (T?)ReadNumberInt(stream, typeof(T), version, numberType, pool); + } default: { - using RentedArray buffer = new(len: 1, pool, clean: false); NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); return numberType == NumberTypes.Null ? null : (T?)ReadNumberInt(stream, typeof(T), version, numberType, pool); } @@ -332,10 +338,16 @@ CancellationToken cancellationToken switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) { case 1: - return ReadBool(stream, version, pool) ? ReadNumber(stream, type, version, pool) : null; + { + return ReadBool(stream, version, pool) ? ReadNumber(stream, type, version, pool) : null; + } + case 2: + { + NumberTypes numberType = ReadEnum(stream, version, pool); + return numberType == NumberTypes.Null ? null : ReadNumberInt(stream, type, version, numberType, pool); + } default: { - using RentedArray buffer = new(len: 1, pool, clean: false); NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); return numberType == NumberTypes.Null ? null : ReadNumberInt(stream, type, version, numberType, pool); } @@ -362,15 +374,22 @@ CancellationToken cancellationToken switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) { case 1: - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext() - : null; + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext() + : null; + } + case 2: + { + NumberTypes numberType = await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext(); + return numberType == NumberTypes.Null ? null : (T?)await ReadNumberIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken) + .DynamicContext(); + } default: { - using RentedArray buffer = new(len: 1, pool, clean: false); NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); return numberType == NumberTypes.Null ? null : (T?)await ReadNumberIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken) - .DynamicContext(); ; + .DynamicContext(); } } }); @@ -400,14 +419,21 @@ CancellationToken cancellationToken switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) { case 1: - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadNumberAsync(stream, type, version, pool, cancellationToken).DynamicContext() - : null; + { + return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + ? await ReadNumberAsync(stream, type, version, pool, cancellationToken).DynamicContext() + : null; + } + case 2: + { + NumberTypes numberType = await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext(); + return numberType == NumberTypes.Null ? null : await ReadNumberIntAsync(stream, type, version, numberType, pool, cancellationToken) + .DynamicContext(); + } default: { - using RentedArray buffer = new(len: 1, pool, clean: false); NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null ? null : await ReadNumberIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); ; + return numberType == NumberTypes.Null ? null : await ReadNumberIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); } } }); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs index cb79b9c..86c6d0c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs @@ -5,6 +5,8 @@ using wan24.Core; using wan24.ObjectValidation; +//TODO Check use of StreamSerializer.VERSION/Version + namespace wan24.StreamSerializerExtensions { // Serialized @@ -21,25 +23,8 @@ public static T ReadSerialized(this Stream stream, int? version = null) where => SerializerException.Wrap(() => { Type type = typeof(T); - if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) - throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - ( - c.GetParameters().Length == 2 && - c.GetParameters()[0].ParameterType == typeof(Stream) && - c.GetParameters()[1].ParameterType == typeof(int) - ) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); + if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(stream, version ?? StreamSerializer.Version); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -60,25 +45,8 @@ public static IStreamSerializer ReadSerializedObject(this Stream stream, Type ty { if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - ( - c.GetParameters().Length == 2 && - c.GetParameters()[0].ParameterType == typeof(Stream) && - c.GetParameters()[1].ParameterType == typeof(int) - ) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - IStreamSerializer res = (IStreamSerializer)(serializerConstructor - ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) - : ci.Invoke(Array.Empty())); - if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); + IStreamSerializer res = (IStreamSerializer)StreamSerializer.CreateInstance(out ConstructorInfo? ci, type, stream, version); + if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(stream, version ?? StreamSerializer.Version); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -101,23 +69,8 @@ public static Task ReadSerializedAsync(this Stream stream, int? version = Type type = typeof(T); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - ( - c.GetParameters().Length == 2 && - c.GetParameters()[0].ParameterType == typeof(Stream) && - c.GetParameters()[1].ParameterType == typeof(int) - ) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); + if ((ci?.GetParametersCached().Length ?? 0) == 0) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -139,25 +92,8 @@ public static Task ReadSerializedObjectAsync(this Stream stre { if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - ( - c.GetParameters().Length == 2 && - c.GetParameters()[0].ParameterType == typeof(Stream) && - c.GetParameters()[1].ParameterType == typeof(int) - ) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - IStreamSerializer res = (IStreamSerializer)(serializerConstructor - ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) - : ci.Invoke(Array.Empty())); - if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + IStreamSerializer res = (IStreamSerializer)StreamSerializer.CreateInstance(out ConstructorInfo? ci, type, stream, version); + if (!(ci?.IsSerializerConstructor() ?? false)) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -214,23 +150,8 @@ public static T ReadSerializedStruct(this Stream stream, int? version = null) Type type = typeof(T); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - ( - c.GetParameters().Length == 2 && - c.GetParameters()[0].ParameterType == typeof(Stream) && - c.GetParameters()[1].ParameterType == typeof(int) - ) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) res.Deserialize(stream, version ?? StreamSerializer.Version); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); + if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(stream, version ?? StreamSerializer.Version); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -253,23 +174,8 @@ public static Task ReadSerializedStructAsync(this Stream stream, int? vers Type type = typeof(T); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - ConstructorInfo ci = (from c in type.GetConstructors() - where c.IsPublic && - ( - c.GetParameters().Length == 0 || - ( - c.GetParameters().Length == 2 && - c.GetParameters()[0].ParameterType == typeof(Stream) && - c.GetParameters()[1].ParameterType == typeof(int) - ) - ) - select c) - .OrderBy(c => c.GetParameters().Length) - .FirstOrDefault() - ?? throw new SerializerException($"Failed to find the serializer constructor of type {type}"); - bool serializerConstructor = ci.GetParameters().Length > 0; - T res = (T)(serializerConstructor ? ci.Invoke(new object?[] { stream, version ?? StreamSerializer.Version }) : ci.Invoke(Array.Empty())); - if (!serializerConstructor) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); + if (!(ci?.IsSerializerConstructor() ?? false)) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs index ae82341..5d08edc 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs @@ -1,5 +1,4 @@ using System.Buffers; -using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -219,6 +218,7 @@ private static string ReadString(Stream stream, int? version, int minLen, int ma pool ??= StreamSerializer.BufferPool; int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) return string.Empty; byte[] buffer = ReadSerializedData(stream, len, pool); try { @@ -258,6 +258,7 @@ CancellationToken cancellationToken pool ??= StreamSerializer.BufferPool; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) return string.Empty; byte[] buffer = await ReadSerializedDataAsync(stream, len, pool, cancellationToken).DynamicContext(); try { @@ -285,30 +286,29 @@ CancellationToken cancellationToken private static string? ReadNullableString(Stream stream, int? version, int minLen, int maxLen, ArrayPool? pool, Func action) { pool ??= StreamSerializer.BufferPool; + int? len; switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: case 2: { if (!ReadBool(stream, version, pool)) return null; + len = ReadNumber(stream, version, pool); } break; - } - int len = ReadNumber(stream, version, pool); - switch (version & byte.MaxValue)// Serializer version switch - { - case 1: - case 2: - break; default: - if (len == -1) return null; + { + len = ReadNumberNullable(stream, version, pool); + if (len == null) return null; + } break; } - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - byte[] buffer = ReadSerializedData(stream, len, pool); + SerializerHelper.EnsureValidLength(len.Value, minLen, maxLen); + if (len == 0) return string.Empty; + byte[] buffer = ReadSerializedData(stream, len.Value, pool); try { - return action(buffer, len); + return action(buffer, len.Value); } finally { @@ -341,30 +341,29 @@ CancellationToken cancellationToken ) { pool ??= StreamSerializer.BufferPool; + int? len; switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch { case 1: case 2: { if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) return null; + len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); } break; - } - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - switch (version & byte.MaxValue)// Serializer version switch - { - case 1: - case 2: - break; default: - if (len == -1) return null; + { + len = await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (len == null) return null; + } break; } - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - byte[] buffer = await ReadSerializedDataAsync(stream, len, pool, cancellationToken).DynamicContext(); + SerializerHelper.EnsureValidLength(len.Value, minLen, maxLen); + if (len == 0) return string.Empty; + byte[] buffer = await ReadSerializedDataAsync(stream, len.Value, pool, cancellationToken).DynamicContext(); try { - return action(buffer, len); + return action(buffer, len.Value); } finally { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index 1d48fcd..1f2d984 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -64,8 +64,7 @@ public static async Task WriteDictAsync(this Stream stream, IDictionary value, C public static Stream WriteDictNullable(this Stream stream, IDictionary? value) => WriteNullableCount(stream, value?.Count, () => { - WriteNumber(stream, value!.Count); - if (value.Count == 0) return; + if (value!.Count == 0) return; foreach (object key in value.Keys) { WriteObject(stream, key); @@ -86,8 +85,7 @@ public static Stream WriteDictNullable(this Stream stream, IDictionary? value) public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, CancellationToken cancellationToken = default) => WriteNullableCountAsync(stream, value?.Count, async () => { - await WriteNumberAsync(stream, value!.Count, cancellationToken).DynamicContext(); - if (value.Count == 0) return; + if (value!.Count == 0) return; foreach (object key in value.Keys) { await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index b22b460..f3872b1 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -58,9 +58,11 @@ public static async Task WriteEnumAsync(this Stream stream, T value, Cancella if (ObjectHelper.AreEqual(value, default(T))) { await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); - return; } - await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + else + { + await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + } } /// diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs index e73b59c..c496490 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -51,7 +51,7 @@ private static Stream WriteNumberInt(Stream stream, object value, NumberTypes? t stream.Write(poolData.Span); break; case NumberTypes.Short: - Write(stream, (int)value.ConvertType()); + Write(stream, value.ConvertType()); break; case NumberTypes.Short | NumberTypes.Unsigned: Write(stream, value.ConvertType()); @@ -167,7 +167,7 @@ private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static Stream WriteNumberNullable(this Stream stream, T? value) where T : struct, IConvertible - => value == null ? WriteEnum(stream, NumberTypes.Null) : WriteNumber(stream, value.Value); + => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteNumber(stream, value.Value); /// /// Write @@ -180,7 +180,7 @@ public static Stream WriteNumberNullable(this Stream stream, T? value) where [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static Stream WriteNumberNullable(this Stream stream, object? value) - => value == null ? WriteEnum(stream, NumberTypes.Null) : WriteNumber(stream, value); + => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteNumber(stream, value); /// /// Write @@ -196,7 +196,7 @@ public static Stream WriteNumberNullable(this Stream stream, object? value) public static Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, IConvertible => value == null - ? WriteEnumAsync(stream, NumberTypes.Null, cancellationToken) + ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) : WriteNumberAsync(stream, value.Value, cancellationToken); /// @@ -211,7 +211,7 @@ public static Task WriteNumberNullableAsync(this Stream stream, T? value, Can #endif public static Task WriteNumberNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) => value == null - ? WriteEnumAsync(stream, NumberTypes.Null, cancellationToken) + ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) : WriteNumberAsync(stream, value, cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index 073bf12..bc539fa 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -1,6 +1,8 @@ using System.Runtime; using System.Runtime.CompilerServices; +//TODO Write(Serialized/*) -> Write + namespace wan24.StreamSerializerExtensions { // Serialized @@ -179,7 +181,7 @@ public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, C #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + public static Task WriteSerializedNullableStructAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!.Value, cancellationToken), cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index b8bdfcb..d405c04 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -1,5 +1,4 @@ -using System.Runtime; -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; @@ -129,10 +128,23 @@ public static Task WriteString32NullableAsync(this Stream stream, string? value, #endif private static Stream WriteString(Stream stream, string value, int lenShift, Func action) { - WriteNumber(stream, value); - if (value.Length == 0) return stream; + if (value.Length == 0) + { + Write(stream, (byte)NumberTypes.Zero); + return stream; + } byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); - return WriteSerializedData(stream, data, action(data)); + try + { + int len = action(data); + WriteNumber(stream, len); + return WriteSerializedData(stream, data, len); + } + catch + { + StreamSerializer.BufferPool.Return(data); + throw; + } } /// @@ -148,10 +160,23 @@ private static Stream WriteString(Stream stream, string value, int lenShift, Fun #endif private static async Task WriteStringAsync(Stream stream, string value, int lenShift, Func action, CancellationToken cancellationToken) { - await WriteNumberAsync(stream, value, cancellationToken).DynamicContext(); - if (value.Length == 0) return; + if (value.Length == 0) + { + await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); + return; + } byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); - await WriteSerializedDataAsync(stream, data, action(data), cancellationToken: cancellationToken).DynamicContext(); + try + { + int len = action(data); + await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); + await WriteSerializedDataAsync(stream, data, len, cancellationToken: cancellationToken).DynamicContext(); + } + catch + { + StreamSerializer.BufferPool.Return(data); + throw; + } } /// @@ -167,10 +192,28 @@ private static async Task WriteStringAsync(Stream stream, string value, int lenS #endif private static Stream WriteNullableString(Stream stream, string? value, int lenShift, Func action) { - WriteNumberNullable(stream, value); - if (value == null || value.Length == 0) return stream; + if (value == null) + { + Write(stream, (byte)NumberTypes.Null); + return stream; + } + if (value.Length == 0) + { + Write(stream, (byte)NumberTypes.Zero); + return stream; + } byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); - return WriteSerializedData(stream, data, action(data), StreamSerializer.BufferPool); + try + { + int len = action(data); + WriteNumber(stream, len); + return WriteSerializedData(stream, data, action(data), StreamSerializer.BufferPool); + } + catch + { + StreamSerializer.BufferPool.Return(data); + throw; + } } /// @@ -186,10 +229,28 @@ private static Stream WriteNullableString(Stream stream, string? value, int lenS #endif private static async Task WriteNullableStringAsync(Stream stream, string? value, int lenShift, Func action, CancellationToken cancellationToken) { - await WriteNumberNullableAsync(stream, value, cancellationToken).DynamicContext(); - if (value == null || value.Length == 0) return; + if (value == null) + { + await WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken).DynamicContext(); + return; + } + if (value.Length == 0) + { + await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); + return; + } byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); - await WriteSerializedDataAsync(stream, data, action(data), StreamSerializer.BufferPool, cancellationToken).DynamicContext(); + try + { + int len = action(data); + await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); + await WriteSerializedDataAsync(stream, data, action(data), StreamSerializer.BufferPool, cancellationToken).DynamicContext(); + } + catch + { + StreamSerializer.BufferPool.Return(data); + throw; + } } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index e46ca27..490f83b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -31,8 +31,24 @@ static StreamExtensions() /// Stream /// Stream [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Stream WriteSerializerVersion(this Stream stream) => WriteNumber(stream, StreamSerializer.Version); +#endif + public static Stream WriteSerializerVersion(this Stream stream) + { + (object n, NumberTypes nt) = StreamSerializer.Version.GetNumberAndType(); + Write(stream, (byte)nt); + switch (n) + { + case sbyte sb: Write(stream, sb); break; + case byte b: Write(stream, b); break; + case short s: Write(stream, s); break; + case ushort us: Write(stream, us); break; + case int i: Write(stream, i); break; + default: throw new SerializerException($"Invalid numeric type {nt} for serializer version {StreamSerializer.Version}"); + } + return stream; + } /// /// Write the serializer version @@ -40,9 +56,23 @@ static StreamExtensions() /// Stream /// Cancellation token [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) - => WriteNumberAsync(stream, StreamSerializer.Version, cancellationToken); +#endif + public static async Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) + { + (object n, NumberTypes nt) = StreamSerializer.Version.GetNumberAndType(); + await WriteAsync(stream, (byte)nt, cancellationToken).DynamicContext(); + switch (n) + { + case sbyte sb: await WriteAsync(stream, sb, cancellationToken).DynamicContext(); break; + case byte b: await WriteAsync(stream, b, cancellationToken).DynamicContext(); break; + case short s: await WriteAsync(stream, s, cancellationToken).DynamicContext(); break; + case ushort us: await WriteAsync(stream, us, cancellationToken).DynamicContext(); break; + case int i: await WriteAsync(stream, i, cancellationToken).DynamicContext(); break; + default: throw new SerializerException($"Invalid numeric type {nt} for serializer version {StreamSerializer.Version}"); + } + } /// /// Write a boolean flag if an object is not diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index 4b22d89..eb002bb 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -1,6 +1,9 @@ using System.Buffers; using System.Collections; using System.Collections.Concurrent; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime; using wan24.Core; //TODO char (de)serializer @@ -46,6 +49,10 @@ public static class StreamSerializer /// Allowed (non-array) types /// public static readonly ConcurrentBag AllowedTypes; + /// + /// Type instance factories + /// + public static readonly ConcurrentDictionary InstanceFactories = new(); /// /// Constructor @@ -415,6 +422,59 @@ public static bool IsTypeAllowed(Type type) return false; } + /// + /// Create an instance + /// + /// Used constructor + /// Requested type + /// Stream + /// Serializer version + /// Serializer options + /// Instance + public static object CreateInstance(out ConstructorInfo? usedConstructor, Type type, Stream stream, int? version = null, ISerializerOptions? options = null) + { + usedConstructor = null; + if (InstanceFactories.TryGetValue(type, out InstanceFactory_Delegate? factory)) return factory(type, stream, version ?? VERSION, options); + if (type.IsGenericType && InstanceFactories.TryGetValue(type.GetGenericTypeDefinition(), out factory)) + return factory(type, stream, version ?? VERSION, options); + if ( + InstanceFactories.Keys.FirstOrDefault(t => t.IsAssignableFrom(type)) is Type inheritedType && + InstanceFactories.TryGetValue(inheritedType, out factory) + ) + return factory(type, stream, version ?? VERSION, options); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) + { + ConstructorInfo? ci = (from c in type.GetConstructorsCached() + where c.GetParametersCached().Length == 0 || + c.IsSerializerConstructor() + orderby c.GetCustomAttributeCached() is not null descending + orderby c.GetParametersCached().Length descending + select c) + .FirstOrDefault(); + if (ci != null) + { + usedConstructor = ci; + return ci.GetParametersCached().Length == 0 ? ci.InvokeAuto() : ci.InvokeAuto(stream, version ?? Version); + } + } + return type.ConstructAuto(out usedConstructor, usePrivate: true, stream, version, options) + ?? throw new SerializerException($"Failed to instance {type}", new InvalidProgramException()); + } + + /// + /// Create an instance + /// + /// Requested type + /// Used constructor + /// Stream + /// Serializer version + /// Serializer options + /// Instance + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T CreateInstance(out ConstructorInfo? usedConstructor, Stream stream, int? version = null, ISerializerOptions? options = null) + => (T)CreateInstance(out usedConstructor, typeof(T), stream, version, options); + /// /// Serializer delegate /// @@ -451,6 +511,16 @@ public static bool IsTypeAllowed(Type type) /// Deserialized value (task will be handled as Task<T>, a result is required!) public delegate Task AsyncDeserialize_Delegate(Stream stream, Type type, int version, ISerializerOptions? options, CancellationToken cancellationToken); + /// + /// Delegate for an instance factory + /// + /// Requested type + /// Stream + /// Serializer version + /// Serializer options + /// Instance + public delegate object InstanceFactory_Delegate(Type type, Stream stream, int version, ISerializerOptions? options); + /// /// Delegate for finding a serializer /// diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs index 759557e..82cd5a6 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -6,7 +6,7 @@ namespace wan24.StreamSerializerExtensions /// /// Attribute for stream serializable classes and properties /// - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field)] + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Constructor)] public class StreamSerializerAttribute : Attribute { /// diff --git a/src/Stream-Serializer-Extensions/StreamSerializerBase.cs b/src/Stream-Serializer-Extensions/StreamSerializerBase.cs index ec74318..315b393 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerBase.cs @@ -42,7 +42,7 @@ protected StreamSerializerBase(int? objectVersion = null) : base() protected StreamSerializerBase(Stream stream, int version, int? objectVersion = null) : base() { _ObjectVersion = objectVersion; - Deserialize(stream, version); + DeserializeInt(stream, version); } /// From 03e6998352fbc49b75bf62c4b8f33ba1c02a42f3 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 13:47:17 +0200 Subject: [PATCH 04/17] Update + `StreamSerializerAttribute` can now be used to mark the preferred serializer constructor + Added fluent asynchronous API for `StreamExtensions` writing methods - Fixed `short` was serialized as `int` when using `WriteNumber` - Fixed a bug when using the serializer constructor of a `(Disposable)StreamSerializerBase` type --- ...SerializerExtensions.StreamExtensions.html | 8219 +++++++++++++---- docs/manifest.json | 2 +- docs/xrefmap.yml | 637 ++ src/Stream-Serializer-Extensions Docs/log.txt | 2 + .../StreamExtensions.Write.Any.cs | 32 +- .../StreamExtensions.Write.Array.cs | 78 +- .../StreamExtensions.Write.Basic.cs | 304 +- .../StreamExtensions.Write.Bytes.cs | 42 +- .../StreamExtensions.Write.Dictionary.cs | 31 +- .../StreamExtensions.Write.Enum.cs | 62 +- .../StreamExtensions.Write.List.cs | 31 +- .../StreamExtensions.Write.Number.cs | 55 +- .../StreamExtensions.Write.Object.cs | 62 +- .../StreamExtensions.Write.Serialized.cs | 110 +- .../StreamExtensions.Write.Stream.cs | 44 +- .../StreamExtensions.Write.String.cs | 92 +- .../StreamExtensions.Write.Struct.cs | 70 +- .../StreamExtensions.Write.cs | 42 +- 18 files changed, 8000 insertions(+), 1915 deletions(-) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index e9c0631..a1a3aeb 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -243,7 +243,7 @@

    Methods Improve this Doc - View Source + View Source

    ConvertStructureEndianess(Type, Memory<Byte>, StreamSerializerAttribute)

    @@ -914,6 +914,62 @@
    Returns
    IAsyncEnumerable<System.String>

    Enumerable

    + + + + + + | + Improve this Doc + + + View Source + + +

    FluentAsync(Task<Stream>, Func<Stream, Task<Stream>>)

    +

    Fluent API action executor

    +
    +
    +
    Declaration
    +
    +
    public static async Task<Stream> FluentAsync(Task<Stream> task, Func<Stream, Task<Stream>> action)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>task

    Stream task

    +
    Func<Stream, Task<Stream>>action

    Action to execute

    +
    +
    Returns
    + + + + + + + + + + + @@ -12553,7 +12609,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Byte)

    @@ -12610,7 +12666,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Decimal)

    @@ -12667,7 +12723,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Double)

    @@ -12724,7 +12780,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int16)

    @@ -12781,7 +12837,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int32)

    @@ -12838,7 +12894,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int64)

    @@ -12895,7 +12951,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, SByte)

    @@ -12952,7 +13008,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Single)

    @@ -13009,7 +13065,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt16)

    @@ -13066,7 +13122,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt32)

    @@ -13123,7 +13179,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt64)

    @@ -13237,7 +13293,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyAsync(Stream, Object, CancellationToken)

    @@ -13247,7 +13303,7 @@

    Declaration

    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    TypeDescription
    Task<Stream>

    Stream

    @@ -13289,27 +13345,28 @@
    Returns
    - - + +
    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyNullable(Stream, Object)

    + +

    WriteAnyAsync(Task<Stream>, Object, CancellationToken)

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteAnyNullable(this Stream stream, object obj)
    +public static Task<Stream> WriteAnyAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13322,7 +13379,7 @@
    Parameters
    - + @@ -13331,6 +13388,12 @@
    Parameters
    + + + + + @@ -13345,7 +13408,7 @@
    Returns
    - + @@ -13353,20 +13416,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Object obj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyNullableAsync(Stream, Object, CancellationToken)

    + +

    WriteAnyNullable(Stream, Object)

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteAnyNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static Stream WriteAnyNullable(this Stream stream, object obj)
    Parameters
    @@ -13388,12 +13451,6 @@
    Parameters
    - - - - - @@ -13408,26 +13465,28 @@
    Returns
    - - + +
    System.Object obj

    Object

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObject(Stream, Object)

    + +

    WriteAnyNullableAsync(Stream, Object, CancellationToken)

    Write any object

    Declaration
    -
    public static Stream WriteAnyObject(this Stream stream, object obj)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteAnyNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13449,6 +13508,12 @@
    Parameters
    + + + + + @@ -13463,7 +13528,7 @@
    Returns
    - + @@ -13471,19 +13536,20 @@
    Returns
    System.Object obj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectAsync(Stream, Object, CancellationToken)

    + +

    WriteAnyNullableAsync(Task<Stream>, Object, CancellationToken)

    Write any object

    Declaration
    -
    public static async Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteAnyNullableAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13496,7 +13562,7 @@
    Parameters
    - + @@ -13525,27 +13591,27 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectNullable(Stream, Object)

    + +

    WriteAnyObject(Stream, Object)

    Write any object

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteAnyObjectNullable(this Stream stream, object obj)
    +
    public static Stream WriteAnyObject(this Stream stream, object obj)
    Parameters
    @@ -13589,20 +13655,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectNullableAsync(Stream, Object, CancellationToken)

    + +

    WriteAnyObjectAsync(Stream, Object, CancellationToken)

    Write any object

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAnyObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    public static async Task<Stream> WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13644,27 +13709,27 @@
    Returns
    - - + +
    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArray(Stream, Array)

    -

    Write

    + +

    WriteAnyObjectAsync(Task<Stream>, Object, CancellationToken)

    +

    Write any object

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteArray(this Stream stream, Array value)
    +
    public static Task<Stream> WriteAnyObjectAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13677,15 +13742,21 @@
    Parameters
    - + - - - + + + + + + + @@ -13700,7 +13771,7 @@
    Returns
    - + @@ -13708,20 +13779,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    Arrayvalue

    Value to write

    +
    System.Objectobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayAsync(Stream, Array, CancellationToken)

    -

    Write

    + +

    WriteAnyObjectNullable(Stream, Object)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
    +public static Stream WriteAnyObjectNullable(this Stream stream, object obj)
    Parameters
    @@ -13740,15 +13811,9 @@
    Parameters
    - - - - - - - - + + @@ -13763,27 +13828,28 @@
    Returns
    - - + +
    Arrayvalue

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Objectobj

    Object

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayNullable(Stream, Nullable<Array>)

    -

    Write

    + +

    WriteAnyObjectNullableAsync(Stream, Object, CancellationToken)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteArrayNullable(this Stream stream, Array? value)
    +public static Task<Stream> WriteAnyObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13802,9 +13868,15 @@
    Parameters
    - - - + + + + + + + @@ -13819,28 +13891,27 @@
    Returns
    - - + +
    System.Nullable<Array>value

    Value to write

    +
    System.Objectobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayNullableAsync(Stream, Nullable<Array>, CancellationToken)

    -

    Write

    + +

    WriteAnyObjectNullableAsync(Task<Stream>, Object, CancellationToken)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAnyObjectNullableAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -13853,15 +13924,15 @@
    Parameters
    - + - - - + + @@ -13882,27 +13953,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.Nullable<Array>value

    Value to write

    +
    System.Objectobj

    Object

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Stream, Boolean, CancellationToken)

    + +

    WriteArray(Stream, Array)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = null)
    +public static Stream WriteArray(this Stream stream, Array value)
    Parameters
    @@ -13921,15 +13992,9 @@
    Parameters
    - + - - - - - @@ -13944,27 +14009,28 @@
    Returns
    - - + +
    System.BooleanArray value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Stream, Byte, CancellationToken)

    + +

    WriteArrayAsync(Stream, Array, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
    Parameters
    @@ -13983,7 +14049,7 @@
    Parameters
    - + @@ -14006,27 +14072,28 @@
    Returns
    - - + +
    System.ByteArray value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Stream, Decimal, CancellationToken)

    + +

    WriteArrayAsync(Task<Stream>, Array, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteArrayAsync(this Task<Stream> stream, Array value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14039,13 +14106,13 @@
    Parameters
    - + - + @@ -14068,27 +14135,28 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.DecimalArray value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Stream, Double, CancellationToken)

    + +

    WriteArrayNullable(Stream, Nullable<Array>)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = null)
    +public static Stream WriteArrayNullable(this Stream stream, Array? value)
    Parameters
    @@ -14107,15 +14175,9 @@
    Parameters
    - + - - - - - @@ -14130,27 +14192,28 @@
    Returns
    - - + +
    System.DoubleSystem.Nullable<Array> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Stream, Int16, CancellationToken)

    + +

    WriteArrayNullableAsync(Stream, Nullable<Array>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14169,7 +14232,7 @@
    Parameters
    - + @@ -14192,27 +14255,27 @@
    Returns
    - +
    System.Int16System.Nullable<Array> value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Stream, Int32, CancellationToken)

    + +

    WriteArrayNullableAsync(Task<Stream>, Nullable<Array>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteArrayNullableAsync(this Task<Stream> stream, Array? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14225,13 +14288,13 @@
    Parameters
    - + - + @@ -14254,27 +14317,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.Int32System.Nullable<Array> value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Int64, CancellationToken)

    +

    WriteAsync(Stream, Boolean, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14293,7 +14356,7 @@
    Parameters
    - + @@ -14316,27 +14379,28 @@
    Returns
    - - + +
    System.Int64System.Boolean value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, SByte, CancellationToken)

    +

    WriteAsync(Stream, Byte, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14355,7 +14419,7 @@
    Parameters
    - + @@ -14378,27 +14442,28 @@
    Returns
    - - + +
    System.SByteSystem.Byte value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Single, CancellationToken)

    +

    WriteAsync(Stream, Decimal, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14417,7 +14482,7 @@
    Parameters
    - + @@ -14440,27 +14505,27 @@
    Returns
    - +
    System.SingleSystem.Decimal value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, UInt16, CancellationToken)

    +

    WriteAsync(Stream, Double, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14479,7 +14544,7 @@
    Parameters
    - + @@ -14502,27 +14567,27 @@
    Returns
    - +
    System.UInt16System.Double value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, UInt32, CancellationToken)

    +

    WriteAsync(Stream, Int16, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14541,7 +14606,7 @@
    Parameters
    - + @@ -14564,27 +14629,27 @@
    Returns
    - +
    System.UInt32System.Int16 value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, UInt64, CancellationToken)

    +

    WriteAsync(Stream, Int32, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14603,7 +14668,7 @@
    Parameters
    - + @@ -14626,27 +14691,27 @@
    Returns
    - +
    System.UInt64System.Int32 value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytes(Stream, ReadOnlySpan<Byte>)

    + +

    WriteAsync(Stream, Int64, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteBytes(this Stream stream, ReadOnlySpan<byte> value)
    +public static Task<Stream> WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14665,9 +14730,15 @@
    Parameters
    - + + + + + + @@ -14682,28 +14753,27 @@
    Returns
    - - + +
    ReadOnlySpan<System.Byte>System.Int64 value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytes(Stream, Span<Byte>)

    + +

    WriteAsync(Stream, SByte, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Stream WriteBytes(this Stream stream, Span<byte> value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14722,9 +14792,15 @@
    Parameters
    - + + + + + + @@ -14739,28 +14815,27 @@
    Returns
    - - + +
    Span<System.Byte>System.SByte value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesAsync(Stream, Memory<Byte>, CancellationToken)

    + +

    WriteAsync(Stream, Single, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Task WriteBytesAsync(this Stream stream, Memory<byte> value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14779,7 +14854,7 @@
    Parameters
    - + @@ -14802,27 +14877,27 @@
    Returns
    - +
    Memory<System.Byte>System.Single value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, CancellationToken)

    + +

    WriteAsync(Stream, UInt16, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory<byte> value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14841,7 +14916,7 @@
    Parameters
    - + @@ -14864,27 +14939,27 @@
    Returns
    - +
    ReadOnlyMemory<System.Byte>System.UInt16 value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesNullable(Stream, Byte[])

    + +

    WriteAsync(Stream, UInt32, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteBytesNullable(this Stream stream, byte[] value)
    +public static Task<Stream> WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14903,9 +14978,15 @@
    Parameters
    - + + + + + + @@ -14920,28 +15001,27 @@
    Returns
    - - + +
    System.Byte[]System.UInt32 value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesNullableAsync(Stream, Byte[], CancellationToken)

    + +

    WriteAsync(Stream, UInt64, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteBytesNullableAsync(this Stream stream, byte[] value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = null)
    Parameters
    @@ -14960,7 +15040,7 @@
    Parameters
    - + @@ -14983,27 +15063,27 @@
    Returns
    - +
    System.Byte[]System.UInt64 value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDict(Stream, IDictionary)

    + +

    WriteAsync(Task<Stream>, Boolean, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteDict(this Stream stream, IDictionary value)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, bool value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15016,15 +15096,21 @@
    Parameters
    - + - + + + + + + @@ -15039,7 +15125,7 @@
    Returns
    - + @@ -15047,20 +15133,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Collections.IDictionarySystem.Boolean value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictAsync(Stream, IDictionary, CancellationToken)

    + +

    WriteAsync(Task<Stream>, Byte, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, byte value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15073,13 +15159,13 @@
    Parameters
    - + - + @@ -15102,27 +15188,28 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.Collections.IDictionarySystem.Byte value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictNullable(Stream, IDictionary)

    + +

    WriteAsync(Task<Stream>, Decimal, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteDictNullable(this Stream stream, IDictionary value)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, decimal value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15135,15 +15222,21 @@
    Parameters
    - + - + + + + + + @@ -15158,28 +15251,27 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.Collections.IDictionarySystem.Decimal value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictNullableAsync(Stream, IDictionary, CancellationToken)

    + +

    WriteAsync(Task<Stream>, Double, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteDictNullableAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, double value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15192,13 +15284,13 @@
    Parameters
    - + - + @@ -15221,27 +15313,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.Collections.IDictionarySystem.Double value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnum(Stream, Object)

    + +

    WriteAsync(Task<Stream>, Int16, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnum(this Stream stream, object value)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, short value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15254,15 +15346,21 @@
    Parameters
    - + - + + + + + + @@ -15277,29 +15375,27 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.ObjectSystem.Int16 value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnum<T>(Stream, T)

    + +

    WriteAsync(Task<Stream>, Int32, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnum<T>(this Stream stream, T value)
    -    where T : struct, Enum
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, int value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15312,67 +15408,56 @@
    Parameters
    - + - + - -
    StreamTask<Stream> stream

    Stream

    TSystem.Int32 value

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - + +
    NameType Description
    T

    Enumeration type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumAsync(Stream, Object, CancellationToken)

    + +

    WriteAsync(Task<Stream>, Int64, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, long value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15385,13 +15470,13 @@
    Parameters
    - + - + @@ -15414,28 +15499,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.ObjectSystem.Int64 value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumAsync<T>(Stream, T, CancellationToken)

    + +

    WriteAsync(Task<Stream>, SByte, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteEnumAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    -    where T : struct, Enum
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, sbyte value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15448,13 +15532,13 @@
    Parameters
    - + - + @@ -15477,43 +15561,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    TSystem.SByte value

    Value to write

    TaskTask<Stream>
    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Enumeration type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullable(Stream, Object)

    + +

    WriteAsync(Task<Stream>, Single, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnumNullable(this Stream stream, object value)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, float value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15526,15 +15594,21 @@
    Parameters
    - + - + + + + + + @@ -15549,29 +15623,27 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.ObjectSystem.Single value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullable<T>(Stream, Nullable<T>)

    + +

    WriteAsync(Task<Stream>, UInt16, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnumNullable<T>(this Stream stream, T? value)
    -    where T : struct, Enum
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, ushort value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15584,67 +15656,56 @@
    Parameters
    - + - + - -
    StreamTask<Stream> stream

    Stream

    System.Nullable<T>System.UInt16 value

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - + +
    NameType Description
    T

    Enumeration type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullableAsync(Stream, Object, CancellationToken)

    + +

    WriteAsync(Task<Stream>, UInt32, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteEnumNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, uint value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15657,13 +15718,13 @@
    Parameters
    - + - + @@ -15686,28 +15747,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.ObjectSystem.UInt32 value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    + +

    WriteAsync(Task<Stream>, UInt64, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteEnumNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    -    where T : struct, Enum
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, ulong value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15720,13 +15780,13 @@
    Parameters
    - + - + @@ -15749,43 +15809,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.Nullable<T>System.UInt64 value

    Value to write

    TaskTask<Stream>
    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Enumeration type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArray(Stream, Array)

    + +

    WriteBytes(Stream, ReadOnlySpan<Byte>)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteFixedArray(this Stream stream, Array value)
    +public static Stream WriteBytes(this Stream stream, ReadOnlySpan<byte> value)
    Parameters
    @@ -15804,7 +15848,7 @@
    Parameters
    - + @@ -15829,20 +15873,20 @@
    Returns
    ArrayReadOnlySpan<System.Byte> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArray<T>(Stream, ReadOnlySpan<T>)

    + +

    WriteBytes(Stream, Span<Byte>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteFixedArray<T>(this Stream stream, ReadOnlySpan<T> value)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Stream WriteBytes(this Stream stream, Span<byte> value)
    Parameters
    @@ -15861,7 +15905,7 @@
    Parameters
    - + @@ -15880,42 +15924,26 @@
    Returns
    - - -
    ReadOnlySpan<T>Span<System.Byte> value

    Value to write

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArray<T>(Stream, Span<T>)

    + +

    WriteBytesAsync(Stream, Memory<Byte>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Stream WriteFixedArray<T>(this Stream stream, Span<T> value)
    +public static Task<Stream> WriteBytesAsync(this Stream stream, Memory<byte> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -15934,9 +15962,15 @@
    Parameters
    - + + + + + + @@ -15951,44 +15985,27 @@
    Returns
    - - - - -
    Span<T>Memory<System.Byte> value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - - + +
    NameDescription
    T

    Element type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync(Stream, Array, CancellationToken)

    + +

    WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteBytesAsync(this Stream stream, ReadOnlyMemory<byte> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16007,7 +16024,7 @@
    Parameters
    - + @@ -16030,27 +16047,28 @@
    Returns
    - - + +
    ArrayReadOnlyMemory<System.Byte> value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

    + +

    WriteBytesAsync(Task<Stream>, Memory<Byte>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Task WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteBytesAsync(this Task<Stream> stream, Memory<byte> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16063,13 +16081,13 @@
    Parameters
    - + - + @@ -16092,43 +16110,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    Memory<T>Memory<System.Byte> value

    Value to write

    TaskTask<Stream>
    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Element type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync<T>(Stream, ReadOnlyMemory<T>, CancellationToken)

    + +

    WriteBytesAsync(Task<Stream>, ReadOnlyMemory<Byte>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteFixedArrayAsync<T>(this Stream stream, ReadOnlyMemory<T> value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteBytesAsync(this Task<Stream> stream, ReadOnlyMemory<byte> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16141,13 +16143,13 @@
    Parameters
    - + - + @@ -16170,43 +16172,28 @@
    Returns
    - - - - -
    StreamTask<Stream> stream

    Stream

    ReadOnlyMemory<T>ReadOnlyMemory<System.Byte> value

    Value to write

    Task
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Element type

    +
    Task<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNull<T>(Stream, T)

    -

    Write a boolean flag if an object is not null

    + +

    WriteBytesNullable(Stream, Byte[])

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool WriteIfNotNull<T>(this Stream stream, T obj)
    +public static Stream WriteBytesNullable(this Stream stream, byte[] value)
    Parameters
    @@ -16225,9 +16212,9 @@
    Parameters
    - - - + + @@ -16242,44 +16229,28 @@
    Returns
    - - - - -
    Tobj

    Object

    +
    System.Byte[]value

    Value to write

    System.Boolean

    Is not null?

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Object type

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNull<T>(Stream, T, Action)

    -

    Write a boolean flag if an object is not null

    + +

    WriteBytesNullableAsync(Stream, Byte[], CancellationToken)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteIfNotNull<T>(this Stream stream, T obj, Action action)
    +public static Task<Stream> WriteBytesNullableAsync(this Stream stream, byte[] value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16298,15 +16269,15 @@
    Parameters
    - - - + + - - - + + @@ -16321,44 +16292,27 @@
    Returns
    - - - - -
    Tobj

    Object

    +
    System.Byte[]value

    Value to write

    Actionaction

    Write action to execute, if the object isn't null

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - - + +
    NameDescription
    T

    Object type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNullAsync<T>(Stream, T, CancellationToken)

    -

    Write a boolean flag if an object is not null

    + +

    WriteBytesNullableAsync(Task<Stream>, Byte[], CancellationToken)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<bool> WriteIfNotNullAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteBytesNullableAsync(this Task<Stream> stream, byte[] value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16371,15 +16325,15 @@
    Parameters
    - + - - - + + @@ -16400,44 +16354,27 @@
    Returns
    - - - - -
    StreamTask<Stream> stream

    Stream

    Tobj

    Object

    +
    System.Byte[]value

    Value to write

    Task<System.Boolean>

    Is not null?

    -
    -
    Type Parameters
    - - - - - - - - - - - + +
    NameDescription
    T

    Object type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNullAsync<T>(Stream, T, Func<Task>, CancellationToken)

    -

    Write a boolean flag if an object is not null

    + +

    WriteDict(Stream, IDictionary)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteIfNotNullAsync<T>(this Stream stream, T obj, Func<Task> action, CancellationToken cancellationToken = null)
    +public static Stream WriteDict(this Stream stream, IDictionary value)
    Parameters
    @@ -16456,21 +16393,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -16485,43 +16410,28 @@
    Returns
    - - - - -
    Tobj

    Object

    -
    Func<Task>action

    Write action to execute, if the object isn't null

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Collections.IDictionaryvalue

    Value to write

    Task
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Object type

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteList(Stream, IList)

    + +

    WriteDictAsync(Stream, IDictionary, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteList(this Stream stream, IList value)
    +public static async Task<Stream> WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16540,9 +16450,15 @@
    Parameters
    - + + + + + + @@ -16557,7 +16473,7 @@
    Returns
    - + @@ -16565,20 +16481,20 @@
    Returns
    System.Collections.IListSystem.Collections.IDictionary value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListAsync(Stream, IList, CancellationToken)

    + +

    WriteDictAsync(Task<Stream>, IDictionary, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteDictAsync(this Task<Stream> stream, IDictionary value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16591,13 +16507,13 @@
    Parameters
    - + - + @@ -16620,27 +16536,28 @@
    Returns
    - - - - + + + +
    StreamTask<Stream> stream

    Stream

    System.Collections.IListSystem.Collections.IDictionary value

    Value to write

    Task
    Task<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListNullable(Stream, IList)

    + +

    WriteDictNullable(Stream, IDictionary)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteListNullable(this Stream stream, IList value)
    +public static Stream WriteDictNullable(this Stream stream, IDictionary value)
    Parameters
    @@ -16659,7 +16576,7 @@
    Parameters
    - + @@ -16684,20 +16601,20 @@
    Returns
    System.Collections.IListSystem.Collections.IDictionary value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListNullableAsync(Stream, IList, CancellationToken)

    + +

    WriteDictNullableAsync(Stream, IDictionary, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteListNullableAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteDictNullableAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16716,7 +16633,7 @@
    Parameters
    - + @@ -16739,27 +16656,27 @@
    Returns
    - +
    System.Collections.IListSystem.Collections.IDictionary value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Boolean>)

    + +

    WriteDictNullableAsync(Task<Stream>, IDictionary, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, bool? value)
    +public static Task<Stream> WriteDictNullableAsync(this Task<Stream> stream, IDictionary value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16772,15 +16689,21 @@
    Parameters
    - + - + + + + + + @@ -16795,27 +16718,27 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.Boolean>System.Collections.IDictionary value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Byte>)

    + +

    WriteEnum(Stream, Object)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, byte? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteEnum(this Stream stream, object value)
    Parameters
    @@ -16834,7 +16757,7 @@
    Parameters
    - + @@ -16859,19 +16782,21 @@
    Returns
    System.Nullable<System.Byte>System.Object value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Decimal>)

    + +

    WriteEnum<T>(Stream, T)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, decimal? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteEnum<T>(this Stream stream, T value)
    +    where T : struct, Enum
    Parameters
    @@ -16890,7 +16815,7 @@
    Parameters
    - + @@ -16909,25 +16834,42 @@
    Returns
    + + +
    System.Nullable<System.Decimal>T value

    Value to write

    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Double>)

    + +

    WriteEnumAsync(Stream, Object, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, double? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16946,9 +16888,15 @@
    Parameters
    - + + + + + + @@ -16963,7 +16911,7 @@
    Returns
    - + @@ -16971,19 +16919,20 @@
    Returns
    System.Nullable<System.Double>System.Object value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Int16>)

    + +

    WriteEnumAsync(Task<Stream>, Object, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, short? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteEnumAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    Parameters
    @@ -16996,15 +16945,21 @@
    Parameters
    - + - + + + + + + @@ -17019,7 +16974,7 @@
    Returns
    - + @@ -17027,19 +16982,21 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.Int16>System.Object value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Int32>)

    + +

    WriteEnumAsync<T>(Stream, T, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, int? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteEnumAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    +    where T : struct, Enum
    Parameters
    @@ -17058,9 +17015,15 @@
    Parameters
    - + + + + + + @@ -17075,27 +17038,45 @@
    Returns
    - + + + +
    System.Nullable<System.Int32>T value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Int64>)

    + +

    WriteEnumAsync<T>(Task<Stream>, T, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, long? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteEnumAsync<T>(this Task<Stream> stream, T value, CancellationToken cancellationToken = null)
    +    where T : struct, Enum
    Parameters
    @@ -17108,15 +17089,21 @@
    Parameters
    - + - + + + + + + @@ -17131,27 +17118,44 @@
    Returns
    - + + + +
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.Int64>T value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<SByte>)

    + +

    WriteEnumNullable(Stream, Object)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, sbyte? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteEnumNullable(this Stream stream, object value)
    Parameters
    @@ -17170,7 +17174,7 @@
    Parameters
    - + @@ -17195,19 +17199,21 @@
    Returns
    System.Nullable<System.SByte>System.Object value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<Single>)

    + +

    WriteEnumNullable<T>(Stream, Nullable<T>)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, float? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteEnumNullable<T>(this Stream stream, T? value)
    +    where T : struct, Enum
    Parameters
    @@ -17226,7 +17232,7 @@
    Parameters
    - + @@ -17245,25 +17251,42 @@
    Returns
    + + +
    System.Nullable<System.Single>System.Nullable<T> value

    Value to write

    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<UInt16>)

    + +

    WriteEnumNullableAsync(Stream, Object, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, ushort? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteEnumNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17282,9 +17305,15 @@
    Parameters
    - + + + + + + @@ -17299,27 +17328,27 @@
    Returns
    - - + +
    System.Nullable<System.UInt16>System.Object value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<UInt32>)

    + +

    WriteEnumNullableAsync(Task<Stream>, Object, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, uint? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteEnumNullableAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17332,15 +17361,21 @@
    Parameters
    - + - + + + + + + @@ -17355,27 +17390,28 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.UInt32>System.Object value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<UInt64>)

    + +

    WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, ulong? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteEnumNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    +    where T : struct, Enum
    Parameters
    @@ -17394,9 +17430,15 @@
    Parameters
    - + + + + + + @@ -17411,28 +17453,44 @@
    Returns
    - - + + + +
    System.Nullable<System.UInt64>System.Nullable<T> value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    +
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

    + +

    WriteEnumNullableAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteEnumNullableAsync<T>(this Task<Stream> stream, T? value, CancellationToken cancellationToken = null) + where T : struct, Enum
    Parameters
    @@ -17445,13 +17503,13 @@
    Parameters
    - + - + @@ -17474,26 +17532,43 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.Boolean>System.Nullable<T> value

    Value to write

    TaskTask<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

    + +

    WriteFixedArray(Stream, Array)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteFixedArray(this Stream stream, Array value)
    Parameters
    @@ -17512,15 +17587,9 @@
    Parameters
    - + - - - - - @@ -17535,26 +17604,28 @@
    Returns
    - - + +
    System.Nullable<System.Byte>Array value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

    + +

    WriteFixedArray<T>(Stream, ReadOnlySpan<T>)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteFixedArray<T>(this Stream stream, ReadOnlySpan<T> value)
    Parameters
    @@ -17573,49 +17644,61 @@
    Parameters
    - + + +
    System.Nullable<System.Decimal>ReadOnlySpan<T> value

    Value to write

    +
    Returns
    + + + + + + + + - - - +
    TypeDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    Stream

    Stream

    -
    Returns
    +
    Type Parameters
    - + - - + +
    TypeName Description
    TaskT

    Element type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

    + +

    WriteFixedArray<T>(Stream, Span<T>)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Stream WriteFixedArray<T>(this Stream stream, Span<T> value)
    Parameters
    @@ -17634,49 +17717,61 @@
    Parameters
    - + + +
    System.Nullable<System.Double>Span<T> value

    Value to write

    +
    Returns
    + + - - - + + + + + + +
    CancellationTokencancellationToken

    Cancellation token

    +
    TypeDescription
    Stream

    Stream

    -
    Returns
    +
    Type Parameters
    - + - - + +
    TypeName Description
    TaskT

    Element type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Int16>, CancellationToken)

    + +

    WriteFixedArrayAsync(Stream, Array, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17695,7 +17790,7 @@
    Parameters
    - + @@ -17718,26 +17813,28 @@
    Returns
    - - + +
    System.Nullable<System.Int16>Array value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    + +

    WriteFixedArrayAsync(Task<Stream>, Array, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteFixedArrayAsync(this Task<Stream> stream, Array value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17750,13 +17847,13 @@
    Parameters
    - + - + @@ -17779,26 +17876,28 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.Int32>Array value

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

    + +

    WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Task<Stream> WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17817,7 +17916,7 @@
    Parameters
    - + @@ -17840,26 +17939,43 @@
    Returns
    - +
    System.Nullable<System.Int64>Memory<T> value

    Value to write

    TaskTask<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Element type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

    + +

    WriteFixedArrayAsync<T>(Stream, ReadOnlyMemory<T>, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteFixedArrayAsync<T>(this Stream stream, ReadOnlyMemory<T> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17878,7 +17994,7 @@
    Parameters
    - + @@ -17901,26 +18017,44 @@
    Returns
    - - + + + + +
    System.Nullable<System.SByte>ReadOnlyMemory<T> value

    Value to write

    TaskTask<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

    + +

    WriteFixedArrayAsync<T>(Task<Stream>, Memory<T>, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Task<Stream> WriteFixedArrayAsync<T>(this Task<Stream> stream, Memory<T> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17933,13 +18067,13 @@
    Parameters
    - + - + @@ -17962,26 +18096,43 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.Single>Memory<T> value

    Value to write

    TaskTask<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Element type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

    + +

    WriteFixedArrayAsync<T>(Task<Stream>, ReadOnlyMemory<T>, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteFixedArrayAsync<T>(this Task<Stream> stream, ReadOnlyMemory<T> value, CancellationToken cancellationToken = null)
    Parameters
    @@ -17994,13 +18145,13 @@
    Parameters
    - + - + @@ -18023,26 +18174,44 @@
    Returns
    - - + + + + +
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.UInt16>ReadOnlyMemory<T> value

    Value to write

    TaskTask<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

    -

    Write

    + +

    WriteIfNotNull<T>(Stream, T)

    +

    Write a boolean flag if an object is not null

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool WriteIfNotNull<T>(this Stream stream, T obj)
    Parameters
    @@ -18061,49 +18230,61 @@
    Parameters
    - - - + + + +
    System.Nullable<System.UInt32>value

    Value to write

    +
    Tobj

    Object

    +
    Returns
    + + - - - + + + + + + +
    CancellationTokencancellationToken

    Cancellation token

    +
    TypeDescription
    System.Boolean

    Is not null?

    -
    Returns
    +
    Type Parameters
    - + - - + +
    TypeName Description
    TaskT

    Object type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

    -

    Write

    + +

    WriteIfNotNull<T>(Stream, T, Action)

    +

    Write a boolean flag if an object is not null

    Declaration
    -
    public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteIfNotNull<T>(this Stream stream, T obj, Action action)
    Parameters
    @@ -18122,15 +18303,15 @@
    Parameters
    - - - + + - - - + + @@ -18145,27 +18326,44 @@
    Returns
    - - + + + + +
    System.Nullable<System.UInt64>value

    Value to write

    +
    Tobj

    Object

    CancellationTokencancellationToken

    Cancellation token

    +
    Actionaction

    Write action to execute, if the object isn't null

    TaskStream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableCount(Stream, Nullable<Int64>)

    -

    Write a nullable count

    + +

    WriteIfNotNullAsync<T>(Stream, T, CancellationToken)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool WriteNullableCount(this Stream stream, long? count)
    +public static async Task<bool> WriteIfNotNullAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    Parameters
    @@ -18184,9 +18382,15 @@
    Parameters
    - - - + + + + + + + @@ -18201,28 +18405,44 @@
    Returns
    - + + + +
    System.Nullable<System.Int64>count

    Count

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    System.BooleanTask<System.Boolean>

    Is not null?

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableCount(Stream, Nullable<Int64>, Action)

    -

    Write a nullable count

    + +

    WriteIfNotNullAsync<T>(Stream, T, Func<Task>, CancellationToken)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullableCount(this Stream stream, long? count, Action action)
    +public static async Task<Stream> WriteIfNotNullAsync<T>(this Stream stream, T obj, Func<Task> action, CancellationToken cancellationToken = null)
    Parameters
    @@ -18241,15 +18461,21 @@
    Parameters
    - - - + + - + - + + + + + @@ -18264,28 +18490,44 @@
    Returns
    - + + + +
    System.Nullable<System.Int64>count

    Count

    +
    Tobj

    Object

    ActionFunc<Task> action

    Write action to execute, if the count isn't null

    +

    Write action to execute, if the object isn't null

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableCountAsync(Stream, Nullable<Int64>, CancellationToken)

    -

    Write a nullable count

    + +

    WriteList(Stream, IList)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<bool> WriteNullableCountAsync(this Stream stream, long? count, CancellationToken cancellationToken = null)
    +public static Stream WriteList(this Stream stream, IList value)
    Parameters
    @@ -18304,15 +18546,9 @@
    Parameters
    - - - - - - - - + + @@ -18327,28 +18563,28 @@
    Returns
    - - +
    System.Nullable<System.Int64>count

    Count

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Collections.IListvalue

    Value to write

    Task<System.Boolean>

    Is not null?

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullableCountAsync(Stream, Nullable<Int64>, Func<Task>, CancellationToken)

    -

    Write a nullable count

    + +

    WriteListAsync(Stream, IList, CancellationToken)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteNullableCountAsync(this Stream stream, long? count, Func<Task> action, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    Parameters
    @@ -18367,15 +18603,9 @@
    Parameters
    - - - - - - - - + + @@ -18396,26 +18626,28 @@
    Returns
    - - + +
    System.Nullable<System.Int64>count

    Count

    -
    Func<Task>action

    Write action to execute, if the count isn't null

    +
    System.Collections.IListvalue

    Value to write

    TaskTask<Stream>

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumber(Stream, Object)

    + +

    WriteListAsync(Task<Stream>, IList, CancellationToken)

    Write

    Declaration
    -
    public static Stream WriteNumber(this Stream stream, object value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteListAsync(this Task<Stream> stream, IList value, CancellationToken cancellationToken = null)
    Parameters
    @@ -18428,15 +18660,21 @@
    Parameters
    - + - + + + + + + @@ -18451,7 +18689,7 @@
    Returns
    - + @@ -18459,20 +18697,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.ObjectSystem.Collections.IList value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumber<T>(Stream, T)

    + +

    WriteListNullable(Stream, IList)

    Write

    Declaration
    -
    public static Stream WriteNumber<T>(this Stream stream, T value)
    -    where T : struct, IConvertible
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteListNullable(this Stream stream, IList value)
    Parameters
    @@ -18491,7 +18729,7 @@
    Parameters
    - + @@ -18510,41 +18748,26 @@
    Returns
    - - -
    TSystem.Collections.IList value

    Value to write

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Number type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberAsync(Stream, Object, CancellationToken)

    + +

    WriteListNullableAsync(Stream, IList, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteListNullableAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    Parameters
    @@ -18563,7 +18786,7 @@
    Parameters
    - + @@ -18586,27 +18809,27 @@
    Returns
    - +
    System.ObjectSystem.Collections.IList value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberAsync<T>(Stream, T, CancellationToken)

    + +

    WriteListNullableAsync(Task<Stream>, IList, CancellationToken)

    Write

    Declaration
    -
    public static Task WriteNumberAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    -    where T : struct, IConvertible
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteListNullableAsync(this Task<Stream> stream, IList value, CancellationToken cancellationToken = null)
    Parameters
    @@ -18619,13 +18842,13 @@
    Parameters
    - + - + @@ -18648,43 +18871,27 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    TSystem.Collections.IList value

    Value to write

    TaskTask<Stream>
    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Number type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullable(Stream, Object)

    + +

    WriteNullable(Stream, Nullable<Boolean>)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNumberNullable(this Stream stream, object value)
    +public static Stream WriteNullable(this Stream stream, bool? value)
    Parameters
    @@ -18703,7 +18910,7 @@
    Parameters
    - + @@ -18728,21 +18935,19 @@
    Returns
    System.ObjectSystem.Nullable<System.Boolean> value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullable<T>(Stream, Nullable<T>)

    + +

    WriteNullable(Stream, Nullable<Byte>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNumberNullable<T>(this Stream stream, T? value)
    -    where T : struct, IConvertible
    +
    public static Stream WriteNullable(this Stream stream, byte? value)
    Parameters
    @@ -18761,7 +18966,7 @@
    Parameters
    - + @@ -18780,42 +18985,25 @@
    Returns
    - - -
    System.Nullable<T>System.Nullable<System.Byte> value

    Value to write

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Number type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullableAsync(Stream, Object, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<Decimal>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNumberNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, decimal? value)
    Parameters
    @@ -18834,15 +19022,9 @@
    Parameters
    - + - - - - - @@ -18857,28 +19039,27 @@
    Returns
    - - + +
    System.ObjectSystem.Nullable<System.Decimal> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<Double>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteNumberNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    -    where T : struct, IConvertible
    +
    public static Stream WriteNullable(this Stream stream, double? value)
    Parameters
    @@ -18897,15 +19078,9 @@
    Parameters
    - + - - - - - @@ -18920,43 +19095,27 @@
    Returns
    - - - - -
    System.Nullable<T>System.Nullable<System.Double> value

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    Task
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Number type

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObject(Stream, Object)

    + +

    WriteNullable(Stream, Nullable<Int16>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteObject(this Stream stream, object obj)
    +
    public static Stream WriteNullable(this Stream stream, short? value)
    Parameters
    @@ -18975,9 +19134,9 @@
    Parameters
    - - - + + @@ -19000,20 +19159,19 @@
    Returns
    System.Objectobj

    Object to write

    +
    System.Nullable<System.Int16>value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObjectAsync(Stream, Object, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<Int32>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, int? value)
    Parameters
    @@ -19032,15 +19190,9 @@
    Parameters
    - - - - - - - - + + @@ -19055,27 +19207,27 @@
    Returns
    - - + +
    System.Objectobj

    Object to write

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Nullable<System.Int32>value

    Value to write

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObjectNullable(Stream, Object)

    + +

    WriteNullable(Stream, Nullable<Int64>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteObjectNullable(this Stream stream, object obj)
    +
    public static Stream WriteNullable(this Stream stream, long? value)
    Parameters
    @@ -19094,9 +19246,9 @@
    Parameters
    - - - + + @@ -19119,20 +19271,19 @@
    Returns
    System.Objectobj

    Object to write

    +
    System.Nullable<System.Int64>value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteObjectNullableAsync(Stream, Object, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<SByte>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, sbyte? value)
    Parameters
    @@ -19151,15 +19302,9 @@
    Parameters
    - - - - - - - - + + @@ -19174,27 +19319,27 @@
    Returns
    - - + +
    System.Objectobj

    Object to write

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Nullable<System.SByte>value

    Value to write

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerialized(Stream, IStreamSerializer)

    + +

    WriteNullable(Stream, Nullable<Single>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj)
    +
    public static Stream WriteNullable(this Stream stream, float? value)
    Parameters
    @@ -19213,9 +19358,9 @@
    Parameters
    - - - + + @@ -19238,21 +19383,19 @@
    Returns
    IStreamSerializerobj

    Object

    +
    System.Nullable<System.Single>value

    Value to write

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerialized<T>(Stream, T)

    + +

    WriteNullable(Stream, Nullable<UInt16>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerialized<T>(this Stream stream, T obj)
    -    where T : class, IStreamSerializer
    +
    public static Stream WriteNullable(this Stream stream, ushort? value)
    Parameters
    @@ -19271,9 +19414,9 @@
    Parameters
    - - - + + @@ -19290,42 +19433,25 @@
    Returns
    - - -
    Tobj

    Object

    +
    System.Nullable<System.UInt16>value

    Value to write

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<UInt32>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, uint? value)
    Parameters
    @@ -19344,15 +19470,9 @@
    Parameters
    - - - - - - - - + + @@ -19367,28 +19487,27 @@
    Returns
    - - + +
    IStreamSerializerobj

    Object

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Nullable<System.UInt32>value

    Value to write

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedAsync<T>(Stream, T, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<UInt64>)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    -    where T : class, IStreamSerializer
    +
    public static Stream WriteNullable(this Stream stream, ulong? value)
    Parameters
    @@ -19407,15 +19526,9 @@
    Parameters
    - - - - - - - - + + @@ -19430,43 +19543,28 @@
    Returns
    - - - - -
    Tobj

    Object

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Nullable<System.UInt64>value

    Value to write

    Task
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Object type

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedData(Stream, Byte[], Int32, ArrayPool<Byte>)

    -

    Write serialized Data

    + +

    WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null)
    +public static Task<Stream> WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19485,21 +19583,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -19514,28 +19606,26 @@
    Returns
    - - + +
    System.Byte[]data

    Serialized data (will be returned to pool)

    -
    System.Int32len

    Data length in bytes

    +
    System.Nullable<System.Boolean>value

    Value to write

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool<Byte>, CancellationToken)

    -

    Write serialized Data

    + +

    WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19554,21 +19644,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -19589,27 +19667,26 @@
    Returns
    - +
    System.Byte[]data

    Serialized data (will be returned to pool)

    -
    System.Int32len

    Data length in bytes

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    System.Nullable<System.Byte>value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullable(Stream, IStreamSerializer)

    + +

    WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer obj)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19628,9 +19705,15 @@
    Parameters
    - - - + + + + + + + @@ -19645,29 +19728,26 @@
    Returns
    - - + +
    IStreamSerializerobj

    Object

    +
    System.Nullable<System.Decimal>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullable<T>(Stream, T)

    + +

    WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullable<T>(this Stream stream, T obj)
    -    where T : class, IStreamSerializer
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19686,61 +19766,49 @@
    Parameters
    - - - + + - -
    Tobj

    Object

    +
    System.Nullable<System.Double>value

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - + +
    NameType Description
    T

    Object type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    + +

    WriteNullableAsync(Stream, Nullable<Int16>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19759,9 +19827,9 @@
    Parameters
    - - - + + @@ -19782,28 +19850,26 @@
    Returns
    - +
    IStreamSerializerobj

    Object

    +
    System.Nullable<System.Int16>value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullableAsync<T>(Stream, T, CancellationToken)

    + +

    WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedNullableAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    -    where T : class, IStreamSerializer
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19822,9 +19888,9 @@
    Parameters
    - - - + + @@ -19845,44 +19911,26 @@
    Returns
    - +
    Tobj

    Object

    +
    System.Nullable<System.Int32>value

    Value to write

    TaskTask<Stream>
    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Object type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>)

    + +

    WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullableStruct<T>(this Stream stream, T? obj)
    -    where T : struct, IStreamSerializer
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19901,62 +19949,49 @@
    Parameters
    - - - + + - -
    System.Nullable<T>obj

    Object

    +
    System.Nullable<System.Int64>value

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - + +
    NameType Description
    T

    Structure type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedNullableStructAsync<T>(Stream, Nullable<T>, CancellationToken)

    + +

    WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedNullableStructAsync<T>(this Stream stream, T? obj, CancellationToken cancellationToken = null)
    -    where T : struct, IStreamSerializer
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -19975,9 +20010,9 @@
    Parameters
    - - - + + @@ -19998,44 +20033,26 @@
    Returns
    - +
    System.Nullable<T>obj

    Object

    +
    System.Nullable<System.SByte>value

    Value to write

    TaskTask<Stream>
    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Structure type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedStruct<T>(Stream, T)

    + +

    WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedStruct<T>(this Stream stream, T obj)
    -    where T : struct, IStreamSerializer
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20054,62 +20071,49 @@
    Parameters
    - - - + + - -
    Tobj

    Object

    +
    System.Nullable<System.Single>value

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - + +
    NameType Description
    T

    Structure type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializedStructAsync<T>(Stream, T, CancellationToken)

    + +

    WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteSerializedStructAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    -    where T : struct, IStreamSerializer
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20128,9 +20132,9 @@
    Parameters
    - - - + + @@ -20151,43 +20155,26 @@
    Returns
    - +
    Tobj

    Object

    +
    System.Nullable<System.UInt16>value

    Value to write

    TaskTask<Stream>
    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T

    Structure type

    -
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializerVersion(Stream)

    -

    Write the serializer version

    + +

    WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializerVersion(this Stream stream)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20203,6 +20190,18 @@
    Parameters
    + + + + + + + + + + @@ -20217,28 +20216,26 @@
    Returns
    - - + +
    Stream stream

    Stream

    +
    System.Nullable<System.UInt32>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteSerializerVersionAsync(Stream, CancellationToken)

    -

    Write the serializer version

    + +

    WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

    +

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20254,6 +20251,12 @@
    Parameters
    + + + + + @@ -20274,26 +20277,27 @@
    Returns
    - +
    Stream stream

    Stream

    +
    System.Nullable<System.UInt64>value

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStream(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>)

    -

    Write a stream

    + +

    WriteNullableAsync(Task<Stream>, Nullable<Boolean>, CancellationToken)

    +

    Write

    Declaration
    -
    public static Stream WriteStream(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, bool? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20306,27 +20310,21 @@
    Parameters
    - + - - - - - - - - + + - - - + + @@ -20341,27 +20339,4407 @@
    Returns
    - - + + + +
    StreamTask<Stream> stream

    Stream

    Streamsource

    Source stream

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Boolean>value

    Value to write

    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    +
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<Byte>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, byte? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.Byte>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<Decimal>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, decimal? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.Decimal>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<Double>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, double? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.Double>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<Int16>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, short? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.Int16>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<Int32>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, int? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.Int32>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<Int64>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, long? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.Int64>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<SByte>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, sbyte? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.SByte>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<Single>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, float? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.Single>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<UInt16>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ushort? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.UInt16>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<UInt32>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, uint? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.UInt32>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableAsync(Task<Stream>, Nullable<UInt64>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ulong? value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<System.UInt64>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableCount(Stream, Nullable<Int64>)

    +

    Write a nullable count

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool WriteNullableCount(this Stream stream, long? count)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int64>count

    Count

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Is not null?

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableCount(Stream, Nullable<Int64>, Action)

    +

    Write a nullable count

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteNullableCount(this Stream stream, long? count, Action action)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int64>count

    Count

    +
    Actionaction

    Write action to execute, if the count isn't null

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableCountAsync(Stream, Nullable<Int64>, CancellationToken)

    +

    Write a nullable count

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<bool> WriteNullableCountAsync(this Stream stream, long? count, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int64>count

    Count

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.Boolean>

    Is not null?

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNullableCountAsync(Stream, Nullable<Int64>, Func<Task>, CancellationToken)

    +

    Write a nullable count

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteNullableCountAsync(this Stream stream, long? count, Func<Task> action, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<System.Int64>count

    Count

    +
    Func<Task>action

    Write action to execute, if the count isn't null

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumber(Stream, Object)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Stream WriteNumber(this Stream stream, object value)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumber<T>(Stream, T)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Stream WriteNumber<T>(this Stream stream, T value)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberAsync(Task<Stream>, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNumberAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberAsync<T>(Stream, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNumberAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberAsync<T>(Task<Stream>, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNumberAsync<T>(this Task<Stream> stream, T value, CancellationToken cancellationToken = null)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    Tvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullable(Stream, Object)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteNumberNullable(this Stream stream, object value)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullable<T>(Stream, Nullable<T>)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteNumberNullable<T>(this Stream stream, T? value)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<T>value

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullableAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullableAsync(Task<Stream>, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberNullableAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<T>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberNullableAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberNullableAsync<T>(this Task<Stream> stream, T? value, CancellationToken cancellationToken = null)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<T>value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObject(Stream, Object)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteObject(this Stream stream, object obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectAsync(Task<Stream>, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteObjectAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Objectobj

    Object to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectNullable(Stream, Object)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteObjectNullable(this Stream stream, object obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectNullableAsync(Stream, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Objectobj

    Object to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteObjectNullableAsync(Task<Stream>, Object, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteObjectNullableAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Objectobj

    Object to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteSerialized(Stream, IStreamSerializer)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerialized<T>(Stream, T)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerialized<T>(this Stream stream, T obj)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedAsync(Task<Stream>, IStreamSerializer, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedAsync(this Task<Stream> stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedAsync<T>(Stream, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedAsync<T>(Task<Stream>, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedAsync<T>(this Task<Stream> stream, T obj, CancellationToken cancellationToken = null)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedData(Stream, Byte[], Int32, ArrayPool<Byte>)

    +

    Write serialized Data

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Byte[]data

    Serialized data (will be returned to pool)

    +
    System.Int32len

    Data length in bytes

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool<Byte>, CancellationToken)

    +

    Write serialized Data

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Byte[]data

    Serialized data (will be returned to pool)

    +
    System.Int32len

    Data length in bytes

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullable(Stream, IStreamSerializer)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullable<T>(Stream, T)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedNullable<T>(this Stream stream, T obj)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableAsync(Task<Stream>, IStreamSerializer, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedNullableAsync(this Task<Stream> stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    IStreamSerializerobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableAsync<T>(Stream, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedNullableAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableAsync<T>(Task<Stream>, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedNullableAsync<T>(this Task<Stream> stream, T obj, CancellationToken cancellationToken = null)
    +    where T : class, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedNullableStruct<T>(this Stream stream, T? obj)
    +    where T : struct, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<T>obj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableStructAsync<T>(Stream, Nullable<T>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedNullableStructAsync<T>(this Stream stream, T? obj, CancellationToken cancellationToken = null)
    +    where T : struct, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<T>obj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedNullableStructAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedNullableStructAsync<T>(this Task<Stream> stream, T? obj, CancellationToken cancellationToken = null)
    +    where T : struct, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<T>obj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedStruct<T>(Stream, T)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedStruct<T>(this Stream stream, T obj)
    +    where T : struct, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedStructAsync<T>(Stream, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedStructAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +    where T : struct, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedStructAsync<T>(Task<Stream>, T, CancellationToken)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializedStructAsync<T>(this Task<Stream> stream, T obj, CancellationToken cancellationToken = null)
    +    where T : struct, IStreamSerializer
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    Tobj

    Object

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializerVersion(Stream)

    +

    Write the serializer version

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializerVersion(this Stream stream)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializerVersionAsync(Stream, CancellationToken)

    +

    Write the serializer version

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializerVersionAsync(Task<Stream>, CancellationToken)

    +

    Write the serializer version

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteSerializerVersionAsync(this Task<Stream> stream, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteStream(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>)

    +

    Write a stream

    +
    +
    +
    Declaration
    +
    +
    public static Stream WriteStream(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Streamsource

    Source stream

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteStreamAsync(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    Write a stream

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteStreamAsync(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Streamsource

    Source stream

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteStreamAsync(Task<Stream>, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    Write a stream

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteStreamAsync(this Task<Stream> stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    Streamsource

    Source stream

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteStreamNullable(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>)

    +

    Write a stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<Stream>source

    Source stream

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteStreamNullableAsync(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    Write a stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteStreamNullableAsync(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Nullable<Stream>source

    Source stream

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteStreamNullableAsync(Task<Stream>, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    Write a stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteStreamNullableAsync(this Task<Stream> stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Nullable<Stream>source

    Source stream

    +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteString(Stream, String)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Stream WriteString(this Stream stream, string value)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Stringvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteString16(Stream, String)

    +

    Write UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Stream WriteString16(this Stream stream, string value)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Stringvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteString16Async(Stream, String, CancellationToken)

    +

    Write UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Stringvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteString16Async(Task<Stream>, String, CancellationToken)

    +

    Write UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteString16Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Stringvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStreamAsync(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    -

    Write a stream

    + +

    WriteString16Nullable<T>(Stream, String)

    +

    Write UTF-16 (little endian) string

    Declaration
    -
    public static Task WriteStreamAsync(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    public static Stream WriteString16Nullable<T>(this Stream stream, string value)
    Parameters
    @@ -20379,22 +24757,81 @@
    Parameters
    + + + + + + +

    Stream

    System.Stringvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + - - + +
    TypeDescription
    Streamsource

    Source stream

    +

    Stream

    +
    Type Parameters
    + + - - - + + + + + + + + + +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    NameDescription
    T
    + + | + Improve this Doc + + + View Source + + +

    WriteString16NullableAsync(Stream, String, CancellationToken)

    +

    Write UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteString16NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + - - - + + @@ -20415,27 +24852,143 @@
    Returns
    - +
    TypeNameDescription
    Streamstream

    Stream

    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    System.Stringvalue

    Value to write

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStreamNullable(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>)

    -

    Write a stream

    + +

    WriteString16NullableAsync(Task<Stream>, String, CancellationToken)

    +

    Write UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteString16NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Stringvalue

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>
    + + | + Improve this Doc + + + View Source + + +

    WriteString32(Stream, String)

    +

    Write UTF-32 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Stream WriteString32(this Stream stream, string value)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Stringvalue

    Value to write

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteString32Async(Stream, String, CancellationToken)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +
    public static Task<Stream> WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20454,21 +25007,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -20483,28 +25030,26 @@
    Returns
    - - + +
    System.Nullable<Stream>source

    Source stream

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Stringvalue

    Value to write

    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStreamNullableAsync(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    -

    Write a stream

    + +

    WriteString32Async(Task<Stream>, String, CancellationToken)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStreamNullableAsync(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteString32Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20517,27 +25062,15 @@
    Parameters
    - + - - - - - - - - - - - - - + + @@ -20558,27 +25091,26 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.Nullable<Stream>source

    Source stream

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>chunkLength

    Chunk length in bytes

    +
    System.Stringvalue

    Value to write

    Task

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString(Stream, String)

    -

    Write

    + +

    WriteString32Nullable(Stream, String)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    public static Stream WriteString(this Stream stream, string value)
    +
    public static Stream WriteString32Nullable(this Stream stream, string value)
    Parameters
    @@ -20622,19 +25154,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString16(Stream, String)

    -

    Write UTF-16 (little endian) string

    + +

    WriteString32NullableAsync(Stream, String, CancellationToken)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    public static Stream WriteString16(this Stream stream, string value)
    +
    public static Task<Stream> WriteString32NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20656,6 +25188,12 @@
    Parameters
    + + + + + @@ -20670,27 +25208,26 @@
    Returns
    - - + +
    System.String value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString16Async(Stream, String, CancellationToken)

    -

    Write UTF-16 (little endian) string

    + +

    WriteString32NullableAsync(Task<Stream>, String, CancellationToken)

    +

    Write UTF-32 (little endian) string

    Declaration
    -
    public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteString32NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20703,7 +25240,7 @@
    Parameters
    - + @@ -20732,26 +25269,26 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString16Nullable<T>(Stream, String)

    -

    Write UTF-16 (little endian) string

    + +

    WriteStringAsync(Stream, String, CancellationToken)

    +

    Write

    Declaration
    -
    public static Stream WriteString16Nullable<T>(this Stream stream, string value)
    +
    public static Task<Stream> WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20775,54 +25312,44 @@
    Parameters
    - -

    Value to write

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - +
    NameType Description
    TTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString16NullableAsync(Stream, String, CancellationToken)

    -

    Write UTF-16 (little endian) string

    + +

    WriteStringAsync(Task<Stream>, String, CancellationToken)

    +

    Write

    Declaration
    -
    public static Task WriteString16NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteStringAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20835,7 +25362,7 @@
    Parameters
    - + @@ -20864,26 +25391,26 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32(Stream, String)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStringNullable(Stream, String)

    +

    Write

    Declaration
    -
    public static Stream WriteString32(this Stream stream, string value)
    +
    public static Stream WriteStringNullable(this Stream stream, string value)
    Parameters
    @@ -20927,19 +25454,19 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32Async(Stream, String, CancellationToken)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStringNullableAsync(Stream, String, CancellationToken)

    +

    Write

    Declaration
    -
    public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteStringNullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20981,26 +25508,26 @@
    Returns
    - +
    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32Nullable(Stream, String)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStringNullableAsync(Task<Stream>, String, CancellationToken)

    +

    Write

    Declaration
    -
    public static Stream WriteString32Nullable(this Stream stream, string value)
    +
    public static Task<Stream> WriteStringNullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -21013,7 +25540,7 @@
    Parameters
    - + @@ -21022,6 +25549,12 @@
    Parameters
    + + + + + @@ -21036,27 +25569,27 @@
    Returns
    - - + +
    StreamTask<Stream> stream

    Stream

    System.String value

    Value to write

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteString32NullableAsync(Stream, String, CancellationToken)

    -

    Write UTF-32 (little endian) string

    + +

    WriteStruct(Stream, Object, Boolean)

    +

    Write a struct

    Declaration
    -
    public static Task WriteString32NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true)
    Parameters
    @@ -21075,15 +25608,15 @@
    Parameters
    - + - - - - + + @@ -21098,87 +25631,108 @@
    Returns
    - - + +
    System.StringSystem.Object value

    Value to write

    +

    Struct

    CancellationTokencancellationToken

    Cancellation token

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStringAsync(Stream, String, CancellationToken)

    -

    Write

    + +

    WriteStruct<T>(Stream, T, Boolean)

    +

    Write a struct

    Declaration
    -
    public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteStruct<T>(this Stream stream, T value, bool forceLittleEndian = true)
    +    where T : struct
    Parameters
    - + + + + + + + + + + + + + + + + + + + + + +
    TypeNameNameDescription
    Streamstream

    Stream

    +
    Tvalue

    Struct

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    +
    +
    Returns
    + + + + - - - - - - - - - - -
    Type Description
    Streamstream

    Stream

    -
    System.Stringvalue

    Value to write

    -
    CancellationTokencancellationToken

    Cancellation token

    -
    Returns
    +
    Type Parameters
    - + - - + +
    TypeName Description
    TaskT

    Structure type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStringNullable(Stream, String)

    -

    Write

    + +

    WriteStructAsync(Stream, Object, Boolean, CancellationToken)

    +

    Write a struct

    Declaration
    -
    public static Stream WriteStringNullable(this Stream stream, string value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    Parameters
    @@ -21197,9 +25751,21 @@
    Parameters
    - + - + + + + + + + + + + @@ -21214,27 +25780,27 @@
    Returns
    - - + +
    System.StringSystem.Object value

    Value to write

    +

    Struct

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStringNullableAsync(Stream, String, CancellationToken)

    -

    Write

    + +

    WriteStructAsync(Task<Stream>, Object, Boolean, CancellationToken)

    +

    Write a struct

    Declaration
    -
    public static Task WriteStringNullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteStructAsync(this Task<Stream> stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    Parameters
    @@ -21247,15 +25813,21 @@
    Parameters
    - + - + - + + + + + @@ -21276,27 +25848,28 @@
    Returns
    - +
    StreamTask<Stream> stream

    Stream

    System.StringSystem.Object value

    Value to write

    +

    Struct

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    TaskTask<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStruct(Stream, Object, Boolean)

    + +

    WriteStructAsync<T>(Stream, T, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true)
    +public static Task<Stream> WriteStructAsync<T>(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = null) + where T : struct
    Parameters
    @@ -21315,7 +25888,7 @@
    Parameters
    - + @@ -21324,6 +25897,12 @@
    Parameters
    + + + + + @@ -21338,28 +25917,43 @@
    Returns
    - - + + + +
    System.ObjectT value

    Struct

    System.Boolean forceLittleEndian

    Force little endian encoding?

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    +
    Task<Stream>
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Structure type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStruct<T>(Stream, T, Boolean)

    + +

    WriteStructAsync<T>(Task<Stream>, T, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStruct<T>(this Stream stream, T value, bool forceLittleEndian = true)
    +public static Task<Stream> WriteStructAsync<T>(this Task<Stream> stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
         where T : struct
    Parameters
    @@ -21373,7 +25967,7 @@
    Parameters
    - Stream + Task<Stream> stream

    Stream

    @@ -21388,6 +25982,12 @@
    Parameters
    System.Boolean forceLittleEndian

    Force little endian encoding?

    + + + + CancellationToken + cancellationToken +

    Cancellation token

    @@ -21402,9 +26002,8 @@
    Returns
    - Stream -

    Stream

    - + Task<Stream> + @@ -21426,20 +26025,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStructAsync(Stream, Object, Boolean, CancellationToken)

    + +

    WriteStructNullable(Stream, Object, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Stream WriteStructNullable(this Stream stream, object value, bool forceLittleEndian = true)
    Parameters
    @@ -21467,12 +26066,6 @@
    Parameters
    - - - - - @@ -21487,27 +26080,28 @@
    Returns
    - - + +
    System.Boolean forceLittleEndian

    Force little endian encoding?

    -
    CancellationTokencancellationToken

    Cancellation token

    TaskStream

    Stream

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStructAsync<T>(Stream, T, Boolean, CancellationToken)

    + +

    WriteStructNullable<T>(Stream, Nullable<T>, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStructAsync<T>(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Stream WriteStructNullable<T>(this Stream stream, T? value, bool forceLittleEndian = true)
         where T : struct
    Parameters
    @@ -21527,7 +26121,7 @@
    Parameters
    - T + System.Nullable<T> value

    Struct

    @@ -21536,12 +26130,6 @@
    Parameters
    System.Boolean forceLittleEndian

    Force little endian encoding?

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    @@ -21556,8 +26144,9 @@
    Returns
    - Task - + Stream +

    Stream

    + @@ -21579,20 +26168,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStructNullable(Stream, Object, Boolean)

    + +

    WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStructNullable(this Stream stream, object value, bool forceLittleEndian = true)
    +public static Task<Stream> WriteStructNullableAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    Parameters
    @@ -21620,6 +26209,12 @@
    Parameters
    + + + + + @@ -21634,29 +26229,27 @@
    Returns
    - - + +
    System.Boolean forceLittleEndian

    Force little endian encoding?

    +
    CancellationTokencancellationToken

    Cancellation token

    Stream

    Stream

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteStructNullable<T>(Stream, Nullable<T>, Boolean)

    + +

    WriteStructNullableAsync(Task<Stream>, Object, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStructNullable<T>(this Stream stream, T? value, bool forceLittleEndian = true)
    -    where T : struct
    +public static Task<Stream> WriteStructNullableAsync(this Task<Stream> stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    Parameters
    @@ -21669,13 +26262,13 @@
    Parameters
    - + - + @@ -21686,56 +26279,46 @@
    Parameters
    - -
    StreamTask<Stream> stream

    Stream

    System.Nullable<T>System.Object value

    Struct

    Force little endian encoding?

    -
    Returns
    - - - - - - - - - - + +
    TypeDescription
    Stream

    Stream

    +
    CancellationTokencancellationToken

    Cancellation token

    -
    Type Parameters
    +
    Returns
    - + - - + +
    NameType Description
    T

    Structure type

    -
    Task<Stream>
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken)

    +

    WriteStructNullableAsync<T>(Stream, Nullable<T>, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStructNullableAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructNullableAsync<T>(this Stream stream, T? value, bool forceLittleEndian = true, CancellationToken cancellationToken = null) + where T : struct
    Parameters
    @@ -21754,7 +26337,7 @@
    Parameters
    - + @@ -21783,27 +26366,43 @@
    Returns
    - +
    System.ObjectSystem.Nullable<T> value

    Struct

    TaskTask<Stream>
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Structure type

    +
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullableAsync<T>(Stream, Nullable<T>, Boolean, CancellationToken)

    +

    WriteStructNullableAsync<T>(Task<Stream>, Nullable<T>, Boolean, CancellationToken)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task WriteStructNullableAsync<T>(this Stream stream, T? value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructNullableAsync<T>(this Task<Stream> stream, T? value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
         where T : struct
    Parameters
    @@ -21817,7 +26416,7 @@
    Parameters
    - Stream + Task<Stream> stream

    Stream

    @@ -21852,7 +26451,7 @@
    Returns
    - Task + Task<Stream> diff --git a/docs/manifest.json b/docs/manifest.json index 4fab925..2033772 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "b5m8woBFj4XvcqP5E/0qFWP/J9zex/IVeIXZLh5asQU=" + "hash": "0l9mXc99W0eRv7iyKQJNMCN1Fc/w15+oRYG+M5vnfXo=" } }, "is_incremental": false, diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index a9c2c79..8596daa 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -2750,6 +2750,22 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync nameWithType: StreamExtensions.EnumerateStringAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task{Stream},Func{Stream,Task{Stream}}) + name: FluentAsync(Task, Func>) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_FluentAsync_Task_Stream__Func_Stream_Task_Stream___ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task{Stream},Func{Stream,Task{Stream}}) + name.vb: FluentAsync(Task(Of Stream), Func(Of Stream, Task(Of Stream))) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task, Func>) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task(Of Stream), Func(Of Stream, Task(Of Stream))) + nameWithType: StreamExtensions.FluentAsync(Task, Func>) + nameWithType.vb: StreamExtensions.FluentAsync(Task(Of Stream), Func(Of Stream, Task(Of Stream))) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync* + name: FluentAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_FluentAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync + nameWithType: StreamExtensions.FluentAsync - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) name: ReadAny(Stream, Nullable, ISerializerOptions) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAny_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ @@ -5062,6 +5078,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteAnyAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,CancellationToken) + name: WriteAnyAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteAnyAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteAnyAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAnyAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync* name: WriteAnyAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_ @@ -5088,6 +5113,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteAnyNullableAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,CancellationToken) + name: WriteAnyNullableAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteAnyNullableAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteAnyNullableAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync* name: WriteAnyNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_ @@ -5114,6 +5148,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteAnyObjectAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task{Stream},System.Object,CancellationToken) + name: WriteAnyObjectAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteAnyObjectAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteAnyObjectAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAnyObjectAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync* name: WriteAnyObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_ @@ -5140,6 +5183,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task{Stream},System.Object,CancellationToken) + name: WriteAnyObjectNullableAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteAnyObjectNullableAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAnyObjectNullableAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync* name: WriteAnyObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_ @@ -5166,6 +5218,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream,Array,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream, Array, CancellationToken) nameWithType: StreamExtensions.WriteArrayAsync(Stream, Array, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task{Stream},Array,CancellationToken) + name: WriteArrayAsync(Task, Array, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_Task_Stream__Array_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task{Stream},Array,CancellationToken) + name.vb: WriteArrayAsync(Task(Of Stream), Array, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task, Array, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task(Of Stream), Array, CancellationToken) + nameWithType: StreamExtensions.WriteArrayAsync(Task, Array, CancellationToken) + nameWithType.vb: StreamExtensions.WriteArrayAsync(Task(Of Stream), Array, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync* name: WriteArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_ @@ -5198,6 +5259,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, System.Nullable(Of Array), CancellationToken) nameWithType: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable(Of Array), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task{Stream},System.Nullable{Array},CancellationToken) + name: WriteArrayNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_Task_Stream__System_Nullable_Array__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task{Stream},System.Nullable{Array},CancellationToken) + name.vb: WriteArrayNullableAsync(Task(Of Stream), Nullable(Of Array), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task(Of Stream), System.Nullable(Of Array), CancellationToken) + nameWithType: StreamExtensions.WriteArrayNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Task(Of Stream), Nullable(Of Array), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync* name: WriteArrayNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_ @@ -5277,6 +5347,114 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt64,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.UInt64, CancellationToken) nameWithType: StreamExtensions.WriteAsync(Stream, UInt64, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Boolean,CancellationToken) + name: WriteAsync(Task, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Boolean,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Boolean, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Boolean, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Boolean, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Byte,CancellationToken) + name: WriteAsync(Task, Byte, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Byte_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Byte,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Byte, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Byte, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Byte, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Byte, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Byte, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Decimal,CancellationToken) + name: WriteAsync(Task, Decimal, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Decimal_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Decimal,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Decimal, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Decimal, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Decimal, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Decimal, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Decimal, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Double,CancellationToken) + name: WriteAsync(Task, Double, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Double_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Double,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Double, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Double, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Double, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Double, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Double, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int16,CancellationToken) + name: WriteAsync(Task, Int16, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int16_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int16,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Int16, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int16, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int16, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Int16, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int16, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int32,CancellationToken) + name: WriteAsync(Task, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int32,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Int32, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int32, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int32, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Int32, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int64,CancellationToken) + name: WriteAsync(Task, Int64, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int64_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int64,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Int64, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int64, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int64, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Int64, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int64, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.SByte,CancellationToken) + name: WriteAsync(Task, SByte, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_SByte_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.SByte,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), SByte, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.SByte, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.SByte, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, SByte, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), SByte, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Single,CancellationToken) + name: WriteAsync(Task, Single, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Single_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Single,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), Single, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Single, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Single, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, Single, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Single, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt16,CancellationToken) + name: WriteAsync(Task, UInt16, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt16_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt16,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), UInt16, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt16, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt16, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, UInt16, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt16, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt32,CancellationToken) + name: WriteAsync(Task, UInt32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt32,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), UInt32, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt32, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt32, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, UInt32, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt64,CancellationToken) + name: WriteAsync(Task, UInt64, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt64_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt64,CancellationToken) + name.vb: WriteAsync(Task(Of Stream), UInt64, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt64, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt64, CancellationToken) + nameWithType: StreamExtensions.WriteAsync(Task, UInt64, CancellationToken) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt64, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync* name: WriteAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_ @@ -5327,6 +5505,24 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory(Of System.Byte), CancellationToken) nameWithType: StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory, CancellationToken) nameWithType.vb: StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},Memory{System.Byte},CancellationToken) + name: WriteBytesAsync(Task, Memory, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Task_Stream__Memory_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},Memory{System.Byte},CancellationToken) + name.vb: WriteBytesAsync(Task(Of Stream), Memory(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task, Memory, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task(Of Stream), Memory(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.WriteBytesAsync(Task, Memory, CancellationToken) + nameWithType.vb: StreamExtensions.WriteBytesAsync(Task(Of Stream), Memory(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},ReadOnlyMemory{System.Byte},CancellationToken) + name: WriteBytesAsync(Task, ReadOnlyMemory, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Task_Stream__ReadOnlyMemory_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},ReadOnlyMemory{System.Byte},CancellationToken) + name.vb: WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task, ReadOnlyMemory, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.WriteBytesAsync(Task, ReadOnlyMemory, CancellationToken) + nameWithType.vb: StreamExtensions.WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of Byte), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync* name: WriteBytesAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_ @@ -5359,6 +5555,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream, System.Byte(), CancellationToken) nameWithType: StreamExtensions.WriteBytesNullableAsync(Stream, Byte[], CancellationToken) nameWithType.vb: StreamExtensions.WriteBytesNullableAsync(Stream, Byte(), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task{Stream},System.Byte[],CancellationToken) + name: WriteBytesNullableAsync(Task, Byte[], CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_Task_Stream__System_Byte___CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task{Stream},System.Byte[],CancellationToken) + name.vb: WriteBytesNullableAsync(Task(Of Stream), Byte(), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task, System.Byte[], CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task(Of Stream), System.Byte(), CancellationToken) + nameWithType: StreamExtensions.WriteBytesNullableAsync(Task, Byte[], CancellationToken) + nameWithType.vb: StreamExtensions.WriteBytesNullableAsync(Task(Of Stream), Byte(), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync* name: WriteBytesNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_ @@ -5385,6 +5590,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream,System.Collections.IDictionary,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream, System.Collections.IDictionary, CancellationToken) nameWithType: StreamExtensions.WriteDictAsync(Stream, IDictionary, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) + name: WriteDictAsync(Task, IDictionary, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_Task_Stream__System_Collections_IDictionary_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) + name.vb: WriteDictAsync(Task(Of Stream), IDictionary, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task, System.Collections.IDictionary, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task(Of Stream), System.Collections.IDictionary, CancellationToken) + nameWithType: StreamExtensions.WriteDictAsync(Task, IDictionary, CancellationToken) + nameWithType.vb: StreamExtensions.WriteDictAsync(Task(Of Stream), IDictionary, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync* name: WriteDictAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_ @@ -5411,6 +5625,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream,System.Collections.IDictionary,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream, System.Collections.IDictionary, CancellationToken) nameWithType: StreamExtensions.WriteDictNullableAsync(Stream, IDictionary, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) + name: WriteDictNullableAsync(Task, IDictionary, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_Task_Stream__System_Collections_IDictionary_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) + name.vb: WriteDictNullableAsync(Task(Of Stream), IDictionary, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task, System.Collections.IDictionary, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task(Of Stream), System.Collections.IDictionary, CancellationToken) + nameWithType: StreamExtensions.WriteDictNullableAsync(Task, IDictionary, CancellationToken) + nameWithType.vb: StreamExtensions.WriteDictNullableAsync(Task(Of Stream), IDictionary, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync* name: WriteDictNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_ @@ -5446,6 +5669,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteEnumAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task{Stream},System.Object,CancellationToken) + name: WriteEnumAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteEnumAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteEnumAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteEnumAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync* name: WriteEnumAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_ @@ -5462,6 +5694,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteEnumAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteEnumAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Task{Stream},``0,CancellationToken) + name: WriteEnumAsync(Task, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync__1_Task_Stream____0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Task{Stream},``0,CancellationToken) + name.vb: WriteEnumAsync(Of T)(Task(Of Stream), T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Of T)(Task(Of Stream), T, CancellationToken) + nameWithType: StreamExtensions.WriteEnumAsync(Task, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteEnumAsync(Of T)(Task(Of Stream), T, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream,System.Object) name: WriteEnumNullable(Stream, Object) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable_Stream_System_Object_ @@ -5490,6 +5731,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task{Stream},System.Object,CancellationToken) + name: WriteEnumNullableAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteEnumNullableAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteEnumNullableAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync* name: WriteEnumNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_ @@ -5506,6 +5756,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) + name: WriteEnumNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync__1_Task_Stream__System_Nullable___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) + name.vb: WriteEnumNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteEnumNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream,Array) name: WriteFixedArray(Stream, Array) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray_Stream_Array_ @@ -5543,6 +5802,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream,Array,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, Array, CancellationToken) nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Array, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task{Stream},Array,CancellationToken) + name: WriteFixedArrayAsync(Task, Array, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_Task_Stream__Array_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task{Stream},Array,CancellationToken) + name.vb: WriteFixedArrayAsync(Task(Of Stream), Array, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, Array, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task(Of Stream), Array, CancellationToken) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, Array, CancellationToken) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Task(Of Stream), Array, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync* name: WriteFixedArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_ @@ -5568,6 +5836,24 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, ReadOnlyMemory, CancellationToken) nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},Memory{``0},CancellationToken) + name: WriteFixedArrayAsync(Task, Memory, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Task_Stream__Memory___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},Memory{``0},CancellationToken) + name.vb: WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, Memory, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, Memory, CancellationToken) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},ReadOnlyMemory{``0},CancellationToken) + name: WriteFixedArrayAsync(Task, ReadOnlyMemory, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Task_Stream__ReadOnlyMemory___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},ReadOnlyMemory{``0},CancellationToken) + name.vb: WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, ReadOnlyMemory, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, ReadOnlyMemory, CancellationToken) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull* name: WriteIfNotNull href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull_ @@ -5637,6 +5923,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream,System.Collections.IList,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream, System.Collections.IList, CancellationToken) nameWithType: StreamExtensions.WriteListAsync(Stream, IList, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task{Stream},System.Collections.IList,CancellationToken) + name: WriteListAsync(Task, IList, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_Task_Stream__System_Collections_IList_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task{Stream},System.Collections.IList,CancellationToken) + name.vb: WriteListAsync(Task(Of Stream), IList, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task, System.Collections.IList, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task(Of Stream), System.Collections.IList, CancellationToken) + nameWithType: StreamExtensions.WriteListAsync(Task, IList, CancellationToken) + nameWithType.vb: StreamExtensions.WriteListAsync(Task(Of Stream), IList, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync* name: WriteListAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_ @@ -5663,6 +5958,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream,System.Collections.IList,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream, System.Collections.IList, CancellationToken) nameWithType: StreamExtensions.WriteListNullableAsync(Stream, IList, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task{Stream},System.Collections.IList,CancellationToken) + name: WriteListNullableAsync(Task, IList, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_Task_Stream__System_Collections_IList_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task{Stream},System.Collections.IList,CancellationToken) + name.vb: WriteListNullableAsync(Task(Of Stream), IList, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task, System.Collections.IList, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task(Of Stream), System.Collections.IList, CancellationToken) + nameWithType: StreamExtensions.WriteListNullableAsync(Task, IList, CancellationToken) + nameWithType.vb: StreamExtensions.WriteListNullableAsync(Task(Of Stream), IList, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync* name: WriteListNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_ @@ -5893,6 +6197,114 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.UInt64), CancellationToken) nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of UInt64), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Boolean},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Boolean__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Boolean},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Boolean), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Boolean), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Boolean), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Byte},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Byte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Byte},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Byte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Byte), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Decimal},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Decimal__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Decimal},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Decimal), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Decimal), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Decimal), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Double},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Double__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Double},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Double), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Double), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Double), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int16},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int16__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int16},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int16), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int16), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int16), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int32},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int32},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int32), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int64},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int64__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int64},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int64), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int64), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int64), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.SByte},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_SByte__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.SByte},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of SByte), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.SByte), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of SByte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Single},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Single__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Single},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Single), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Single), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Single), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt16},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt16__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt16},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt16), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt16), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt16), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt32},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt32},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt32), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt64},CancellationToken) + name: WriteNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt64__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt64},CancellationToken) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt64), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt64), CancellationToken) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt64), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync* name: WriteNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_ @@ -5978,6 +6390,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteNumberAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task{Stream},System.Object,CancellationToken) + name: WriteNumberAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteNumberAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteNumberAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNumberAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync* name: WriteNumberAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_ @@ -5994,6 +6415,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteNumberAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Task{Stream},``0,CancellationToken) + name: WriteNumberAsync(Task, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync__1_Task_Stream____0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Task{Stream},``0,CancellationToken) + name.vb: WriteNumberAsync(Of T)(Task(Of Stream), T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Task(Of Stream), T, CancellationToken) + nameWithType: StreamExtensions.WriteNumberAsync(Task, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Task(Of Stream), T, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object) name: WriteNumberNullable(Stream, Object) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable_Stream_System_Object_ @@ -6022,6 +6452,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task{Stream},System.Object,CancellationToken) + name: WriteNumberNullableAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteNumberNullableAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteNumberNullableAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync* name: WriteNumberNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_ @@ -6038,6 +6477,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) + name: WriteNumberNullableAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync__1_Task_Stream__System_Nullable___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) + name.vb: WriteNumberNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteNumberNullableAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream,System.Object) name: WriteObject(Stream, Object) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObject_Stream_System_Object_ @@ -6057,6 +6505,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteObjectAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task{Stream},System.Object,CancellationToken) + name: WriteObjectAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteObjectAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteObjectAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteObjectAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync* name: WriteObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_ @@ -6083,6 +6540,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream,System.Object,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream, System.Object, CancellationToken) nameWithType: StreamExtensions.WriteObjectNullableAsync(Stream, Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task{Stream},System.Object,CancellationToken) + name: WriteObjectNullableAsync(Task, Object, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_Task_Stream__System_Object_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task{Stream},System.Object,CancellationToken) + name.vb: WriteObjectNullableAsync(Task(Of Stream), Object, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task, System.Object, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task(Of Stream), System.Object, CancellationToken) + nameWithType: StreamExtensions.WriteObjectNullableAsync(Task, Object, CancellationToken) + nameWithType.vb: StreamExtensions.WriteObjectNullableAsync(Task(Of Stream), Object, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync* name: WriteObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_ @@ -6118,6 +6584,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) nameWithType: StreamExtensions.WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) + name: WriteSerializedAsync(Task, IStreamSerializer, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_Task_Stream__wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) + name.vb: WriteSerializedAsync(Task(Of Stream), IStreamSerializer, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task(Of Stream), wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedAsync(Task, IStreamSerializer, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedAsync(Task(Of Stream), IStreamSerializer, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync* name: WriteSerializedAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_ @@ -6134,6 +6609,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteSerializedAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Task{Stream},``0,CancellationToken) + name: WriteSerializedAsync(Task, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync__1_Task_Stream____0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Task{Stream},``0,CancellationToken) + name.vb: WriteSerializedAsync(Of T)(Task(Of Stream), T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Of T)(Task(Of Stream), T, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedAsync(Task, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedAsync(Of T)(Task(Of Stream), T, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte}) name: WriteSerializedData(Stream, Byte[], Int32, ArrayPool) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_Stream_System_Byte___System_Int32_System_Buffers_ArrayPool_System_Byte__ @@ -6194,6 +6678,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) + name: WriteSerializedNullableAsync(Task, IStreamSerializer, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_Task_Stream__wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) + name.vb: WriteSerializedNullableAsync(Task(Of Stream), IStreamSerializer, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task(Of Stream), wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Task, IStreamSerializer, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Task(Of Stream), IStreamSerializer, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync* name: WriteSerializedNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_ @@ -6210,6 +6703,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Task{Stream},``0,CancellationToken) + name: WriteSerializedNullableAsync(Task, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Task_Stream____0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Task{Stream},``0,CancellationToken) + name.vb: WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Task, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct* name: WriteSerializedNullableStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStruct_ @@ -6242,6 +6744,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) nameWithType: StreamExtensions.WriteSerializedNullableStructAsync(Stream, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, Nullable(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) + name: WriteSerializedNullableStructAsync(Task, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync__1_Task_Stream__System_Nullable___0__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) + name.vb: WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Task, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), System.Nullable(Of T), CancellationToken) + nameWithType: StreamExtensions.WriteSerializedNullableStructAsync(Task, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct* name: WriteSerializedStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStruct_ @@ -6274,6 +6785,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) nameWithType: StreamExtensions.WriteSerializedStructAsync(Stream, T, CancellationToken) nameWithType.vb: StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Task{Stream},``0,CancellationToken) + name: WriteSerializedStructAsync(Task, T, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync__1_Task_Stream____0_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Task{Stream},``0,CancellationToken) + name.vb: WriteSerializedStructAsync(Of T)(Task(Of Stream), T, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Task, T, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Of T)(Task(Of Stream), T, CancellationToken) + nameWithType: StreamExtensions.WriteSerializedStructAsync(Task, T, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializedStructAsync(Of T)(Task(Of Stream), T, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) name: WriteSerializerVersion(Stream) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion_Stream_ @@ -6293,6 +6813,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream, CancellationToken) nameWithType: StreamExtensions.WriteSerializerVersionAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task{Stream},CancellationToken) + name: WriteSerializerVersionAsync(Task, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_Task_Stream__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task{Stream},CancellationToken) + name.vb: WriteSerializerVersionAsync(Task(Of Stream), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task(Of Stream), CancellationToken) + nameWithType: StreamExtensions.WriteSerializerVersionAsync(Task, CancellationToken) + nameWithType.vb: StreamExtensions.WriteSerializerVersionAsync(Task(Of Stream), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync* name: WriteSerializerVersionAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_ @@ -6325,6 +6854,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream, Stream, System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) nameWithType: StreamExtensions.WriteStreamAsync(Stream, Stream, ArrayPool, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteStreamAsync(Stream, Stream, ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task{Stream},Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) + name: WriteStreamAsync(Task, Stream, ArrayPool, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_Task_Stream__Stream_System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task{Stream},Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) + name.vb: WriteStreamAsync(Task(Of Stream), Stream, ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task, Stream, System.Buffers.ArrayPool, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task(Of Stream), Stream, System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) + nameWithType: StreamExtensions.WriteStreamAsync(Task, Stream, ArrayPool, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStreamAsync(Task(Of Stream), Stream, ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync* name: WriteStreamAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_ @@ -6357,6 +6895,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream, System.Nullable(Of Stream), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) nameWithType: StreamExtensions.WriteStreamNullableAsync(Stream, Nullable, ArrayPool, Nullable, CancellationToken) nameWithType.vb: StreamExtensions.WriteStreamNullableAsync(Stream, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task{Stream},System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) + name: WriteStreamNullableAsync(Task, Nullable, ArrayPool, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_Task_Stream__System_Nullable_Stream__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task{Stream},System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) + name.vb: WriteStreamNullableAsync(Task(Of Stream), Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task, System.Nullable, System.Buffers.ArrayPool, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task(Of Stream), System.Nullable(Of Stream), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) + nameWithType: StreamExtensions.WriteStreamNullableAsync(Task, Nullable, ArrayPool, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStreamNullableAsync(Task(Of Stream), Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync* name: WriteStreamNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_ @@ -6396,6 +6943,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream,System.String,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream, System.String, CancellationToken) nameWithType: StreamExtensions.WriteString16Async(Stream, String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task{Stream},System.String,CancellationToken) + name: WriteString16Async(Task, String, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_Task_Stream__System_String_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task{Stream},System.String,CancellationToken) + name.vb: WriteString16Async(Task(Of Stream), String, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task, System.String, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task(Of Stream), System.String, CancellationToken) + nameWithType: StreamExtensions.WriteString16Async(Task, String, CancellationToken) + nameWithType.vb: StreamExtensions.WriteString16Async(Task(Of Stream), String, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async* name: WriteString16Async href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_ @@ -6425,6 +6981,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream,System.String,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream, System.String, CancellationToken) nameWithType: StreamExtensions.WriteString16NullableAsync(Stream, String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task{Stream},System.String,CancellationToken) + name: WriteString16NullableAsync(Task, String, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_Task_Stream__System_String_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task{Stream},System.String,CancellationToken) + name.vb: WriteString16NullableAsync(Task(Of Stream), String, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task, System.String, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task(Of Stream), System.String, CancellationToken) + nameWithType: StreamExtensions.WriteString16NullableAsync(Task, String, CancellationToken) + nameWithType.vb: StreamExtensions.WriteString16NullableAsync(Task(Of Stream), String, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync* name: WriteString16NullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_ @@ -6451,6 +7016,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream,System.String,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream, System.String, CancellationToken) nameWithType: StreamExtensions.WriteString32Async(Stream, String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task{Stream},System.String,CancellationToken) + name: WriteString32Async(Task, String, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_Task_Stream__System_String_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task{Stream},System.String,CancellationToken) + name.vb: WriteString32Async(Task(Of Stream), String, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task, System.String, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task(Of Stream), System.String, CancellationToken) + nameWithType: StreamExtensions.WriteString32Async(Task, String, CancellationToken) + nameWithType.vb: StreamExtensions.WriteString32Async(Task(Of Stream), String, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async* name: WriteString32Async href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_ @@ -6477,6 +7051,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream,System.String,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream, System.String, CancellationToken) nameWithType: StreamExtensions.WriteString32NullableAsync(Stream, String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task{Stream},System.String,CancellationToken) + name: WriteString32NullableAsync(Task, String, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_Task_Stream__System_String_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task{Stream},System.String,CancellationToken) + name.vb: WriteString32NullableAsync(Task(Of Stream), String, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task, System.String, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task(Of Stream), System.String, CancellationToken) + nameWithType: StreamExtensions.WriteString32NullableAsync(Task, String, CancellationToken) + nameWithType.vb: StreamExtensions.WriteString32NullableAsync(Task(Of Stream), String, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync* name: WriteString32NullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_ @@ -6490,6 +7073,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream,System.String,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream, System.String, CancellationToken) nameWithType: StreamExtensions.WriteStringAsync(Stream, String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task{Stream},System.String,CancellationToken) + name: WriteStringAsync(Task, String, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringAsync_Task_Stream__System_String_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task{Stream},System.String,CancellationToken) + name.vb: WriteStringAsync(Task(Of Stream), String, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task, System.String, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task(Of Stream), System.String, CancellationToken) + nameWithType: StreamExtensions.WriteStringAsync(Task, String, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStringAsync(Task(Of Stream), String, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync* name: WriteStringAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringAsync_ @@ -6516,6 +7108,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream,System.String,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream, System.String, CancellationToken) nameWithType: StreamExtensions.WriteStringNullableAsync(Stream, String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task{Stream},System.String,CancellationToken) + name: WriteStringNullableAsync(Task, String, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_Task_Stream__System_String_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task{Stream},System.String,CancellationToken) + name.vb: WriteStringNullableAsync(Task(Of Stream), String, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task, System.String, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task(Of Stream), System.String, CancellationToken) + nameWithType: StreamExtensions.WriteStringNullableAsync(Task, String, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStringNullableAsync(Task(Of Stream), String, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync* name: WriteStringNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_ @@ -6551,6 +7152,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,System.Boolean,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream, System.Object, System.Boolean, CancellationToken) nameWithType: StreamExtensions.WriteStructAsync(Stream, Object, Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) + name: WriteStructAsync(Task, Object, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_Task_Stream__System_Object_System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) + name.vb: WriteStructAsync(Task(Of Stream), Object, Boolean, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task, System.Object, System.Boolean, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task(Of Stream), System.Object, System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructAsync(Task, Object, Boolean, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStructAsync(Task(Of Stream), Object, Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync* name: WriteStructAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_ @@ -6567,6 +7177,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of T)(Stream, T, System.Boolean, CancellationToken) nameWithType: StreamExtensions.WriteStructAsync(Stream, T, Boolean, CancellationToken) nameWithType.vb: StreamExtensions.WriteStructAsync(Of T)(Stream, T, Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Task{Stream},``0,System.Boolean,CancellationToken) + name: WriteStructAsync(Task, T, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync__1_Task_Stream____0_System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Task{Stream},``0,System.Boolean,CancellationToken) + name.vb: WriteStructAsync(Of T)(Task(Of Stream), T, Boolean, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task, T, System.Boolean, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of T)(Task(Of Stream), T, System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructAsync(Task, T, Boolean, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStructAsync(Of T)(Task(Of Stream), T, Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,System.Boolean) name: WriteStructNullable(Stream, Object, Boolean) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable_Stream_System_Object_System_Boolean_ @@ -6595,6 +7214,15 @@ references: commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,System.Boolean,CancellationToken) fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream, System.Object, System.Boolean, CancellationToken) nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) + name: WriteStructNullableAsync(Task, Object, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_Task_Stream__System_Object_System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) + name.vb: WriteStructNullableAsync(Task(Of Stream), Object, Boolean, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task, System.Object, System.Boolean, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task(Of Stream), System.Object, System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructNullableAsync(Task, Object, Boolean, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Task(Of Stream), Object, Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync* name: WriteStructNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_ @@ -6611,6 +7239,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of T)(Stream, System.Nullable(Of T), System.Boolean, CancellationToken) nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Nullable, Boolean, CancellationToken) nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of T)(Stream, Nullable(Of T), Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Task{Stream},System.Nullable{``0},System.Boolean,CancellationToken) + name: WriteStructNullableAsync(Task, Nullable, Boolean, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync__1_Task_Stream__System_Nullable___0__System_Boolean_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Task{Stream},System.Nullable{``0},System.Boolean,CancellationToken) + name.vb: WriteStructNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), Boolean, CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task, System.Nullable, System.Boolean, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), System.Boolean, CancellationToken) + nameWithType: StreamExtensions.WriteStructNullableAsync(Task, Nullable, Boolean, CancellationToken) + nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), Boolean, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializer name: StreamSerializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index 6ea843e..289794e 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -55,3 +55,5 @@ {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-24T09:12:24.7414575Z","message_severity":"warning","correlation_id":"AB2A3ED5-0256-4B54-A82D-22AE5DAFAB60.1.1.13"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T10:43:06.3853697Z","message_severity":"warning","correlation_id":"86C6A747-1EEC-4F8D-8019-EE0C5147C43E.1.1.12"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T10:43:06.3893699Z","message_severity":"warning","correlation_id":"86C6A747-1EEC-4F8D-8019-EE0C5147C43E.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:44:21.2507452Z","message_severity":"warning","correlation_id":"6F515D44-206C-4AF6-9F67-CB40FB57CEB1.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:44:21.2547443Z","message_severity":"warning","correlation_id":"6F515D44-206C-4AF6-9F67-CB40FB57CEB1.1.1.13"} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index f83288e..6106059 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -40,11 +40,12 @@ public static Stream WriteAny(this Stream stream, object obj) /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) { (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); @@ -58,8 +59,21 @@ public static async Task WriteAnyAsync(this Stream stream, object obj, Cancellat { await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); } + return stream; } + /// + /// Write any object + /// + /// Stream + /// Object + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyAsync(this Task stream, object obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAnyAsync(s, obj, cancellationToken)); + /// /// Write any object /// @@ -89,11 +103,12 @@ public static Stream WriteAnyNullable(this Stream stream, object? obj) /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) { if (obj == null) { @@ -103,6 +118,19 @@ public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, { await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); } + return stream; } + + /// + /// Write any object + /// + /// Stream + /// Object + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAnyNullableAsync(s, obj, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs index d4dc4f7..4f590c2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs @@ -32,18 +32,32 @@ public static Stream WriteArray(this Stream stream, Array value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) + public static Task WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); - if (value.Length == 0) return; + if (value.Length == 0) return stream; foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + return stream; }); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteArrayAsync(this Task stream, Array value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteArrayAsync(s, value, cancellationToken)); + /// /// Write /// @@ -67,9 +81,20 @@ public static Stream WriteArrayNullable(this Stream stream, Array? value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = default) + public static Task WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = default) => WriteNullableCountAsync(stream, value?.Length, () => WriteFixedArrayAsync(stream, value!, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteArrayNullableAsync(this Task stream, Array? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteArrayNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -137,7 +162,7 @@ public static Stream WriteFixedArray(this Stream stream, Array value) /// Cancellation token [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) + public static Task WriteFixedArrayAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) => WriteFixedArrayAsync(stream, (ReadOnlyMemory)value, cancellationToken); /// @@ -147,31 +172,72 @@ public static Task WriteFixedArrayAsync(this Stream stream, Memory value, /// Stream /// Value to write /// Cancellation token + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteFixedArrayAsync(s, value, cancellationToken)); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) + public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { for (int i = 0; i < value.Length; i++) await WriteObjectAsync(stream, value.Span[i]!, cancellationToken).DynamicContext(); + return stream; }); + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Task stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteFixedArrayAsync(s, value, cancellationToken)); + /// /// Write /// /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) + public static Task WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { foreach (object element in value) await WriteObjectAsync(stream, element!, cancellationToken).DynamicContext(); + return stream; }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Task stream, Array value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteFixedArrayAsync(s, value, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index 34e96cd..ce77796 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -31,17 +31,30 @@ public static Stream Write(this Stream stream, bool value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = default) + public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = default) { byte[] buffer = StreamSerializer.BufferPool.Rent(minimumLength: 1); buffer[0] = (byte)(value ? 1 : 0); - await WriteSerializedDataAsync(stream, buffer, len: 1, cancellationToken: cancellationToken).DynamicContext(); + return await WriteSerializedDataAsync(stream, buffer, len: 1, cancellationToken: cancellationToken).DynamicContext(); } + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, bool value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -80,7 +93,7 @@ public static Stream WriteNullable(this Stream stream, bool? value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = default) { ObjectTypes type; if (value == null) @@ -98,6 +111,17 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, Cancellat return WriteAsync(stream, (byte)type, cancellationToken); } + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, bool? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -116,9 +140,20 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, Cancellat /// Cancellation token [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = default) => WriteAsync(stream, (byte)value, cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, sbyte value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -134,9 +169,18 @@ public static Stream WriteNullable(this Stream stream, sbyte? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, sbyte.MinValue, sbyte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, sbyte? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -160,18 +204,31 @@ public static Stream Write(this Stream stream, byte value) /// Stream /// Value to write /// Cancellation token + /// Stream #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = default) + public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = default) #pragma warning restore IDE0060 { await Task.Yield(); - Write(stream, value); + return Write(stream, value); } + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, byte value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -187,9 +244,18 @@ public static Stream WriteNullable(this Stream stream, byte? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, byte.MinValue, byte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, byte? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -213,9 +279,20 @@ public static Stream Write(this Stream stream, short value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, short value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -231,9 +308,18 @@ public static Stream WriteNullable(this Stream stream, short? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, short.MinValue, short.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, short? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -257,9 +343,20 @@ public static Stream Write(this Stream stream, ushort value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, ushort value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -275,9 +372,18 @@ public static Stream WriteNullable(this Stream stream, ushort? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, ushort.MinValue, ushort.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, ushort? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -301,9 +407,20 @@ public static Stream Write(this Stream stream, int value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, int value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -319,9 +436,18 @@ public static Stream WriteNullable(this Stream stream, int? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, int.MinValue, int.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, int? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -345,9 +471,20 @@ public static Stream Write(this Stream stream, uint value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, uint value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -363,9 +500,18 @@ public static Stream WriteNullable(this Stream stream, uint? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, uint.MinValue, uint.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, uint? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -389,9 +535,20 @@ public static Stream Write(this Stream stream, long value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, long value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -407,9 +564,18 @@ public static Stream WriteNullable(this Stream stream, long? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, long.MinValue, long.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, long? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -433,9 +599,20 @@ public static Stream Write(this Stream stream, ulong value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, ulong value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -451,9 +628,18 @@ public static Stream WriteNullable(this Stream stream, ulong? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, ulong.MinValue, ulong.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, ulong? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -477,9 +663,20 @@ public static Stream Write(this Stream stream, float value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, float value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -495,9 +692,18 @@ public static Stream WriteNullable(this Stream stream, float? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, float.MinValue, float.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, float? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -521,9 +727,22 @@ public static Stream Write(this Stream stream, double value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteAsync(this Task stream, double value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -539,9 +758,18 @@ public static Stream WriteNullable(this Stream stream, double? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, double.MinValue, double.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, double? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -565,9 +793,20 @@ public static Stream Write(this Stream stream, decimal value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = default) => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal), cancellationToken: cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, decimal value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + /// /// Write /// @@ -583,9 +822,18 @@ public static Stream WriteNullable(this Stream stream, decimal? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, decimal.MinValue, decimal.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNullableAsync(this Task stream, decimal? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + /// /// Write a nullable numeric value /// @@ -622,10 +870,11 @@ private static Stream WriteNullableNumeric(Stream stream, T? value, T min, T /// Maximum /// Action to execute if the value can't be handled using a default handler /// Cancellation token + /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task WriteNullableNumericAsync(Stream stream, T? value, T min, T max, Func action, CancellationToken cancellationToken) + private static async Task WriteNullableNumericAsync(Stream stream, T? value, T min, T max, Func action, CancellationToken cancellationToken) where T : struct, IConvertible { NumberTypes type; @@ -636,6 +885,7 @@ private static async Task WriteNullableNumericAsync(Stream stream, T? value, else type = NumberTypes.Default; await WriteAsync(stream, (byte)type, cancellationToken).DynamicContext(); if (type == NumberTypes.Default) await action().DynamicContext(); + return stream; } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs index e764120..07c5695 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs @@ -53,7 +53,7 @@ public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) /// Cancellation token [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteBytesAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) + public static Task WriteBytesAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) => WriteBytesAsync(stream, (ReadOnlyMemory)value, cancellationToken); /// @@ -62,17 +62,42 @@ public static Task WriteBytesAsync(this Stream stream, Memory value, Cance /// Stream /// Value to write /// Cancellation token + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteBytesAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteBytesAsync(s, value, cancellationToken)); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) + public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); if (value.Length > 0) await stream.WriteAsync(value, cancellationToken).DynamicContext(); + return stream; }); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteBytesAsync(this Task stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteBytesAsync(s, value, cancellationToken)); + /// /// Write /// @@ -96,12 +121,23 @@ public static Stream WriteBytesNullable(this Stream stream, byte[]? value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteBytesNullableAsync(this Stream stream, byte[]? value, CancellationToken cancellationToken = default) + public static Task WriteBytesNullableAsync(this Stream stream, byte[]? value, CancellationToken cancellationToken = default) => WriteNullableCountAsync( stream, value?.Length, () => SerializerException.WrapAsync(() => stream.WriteAsync(value, cancellationToken).AsTask()), cancellationToken ); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteBytesNullableAsync(this Task stream, byte[]? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteBytesNullableAsync(s, value, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index 1f2d984..47bb045 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -36,21 +36,35 @@ public static Stream WriteDict(this Stream stream, IDictionary value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = default) + public static async Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = default) { await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); - if (value.Count == 0) return; + if (value.Count == 0) return stream; foreach (object key in value.Keys) { await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); } + return stream; } + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteDictAsync(this Task stream, IDictionary value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteDictAsync(s, value, cancellationToken)); + /// /// Write /// @@ -82,7 +96,7 @@ public static Stream WriteDictNullable(this Stream stream, IDictionary? value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, CancellationToken cancellationToken = default) + public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, CancellationToken cancellationToken = default) => WriteNullableCountAsync(stream, value?.Count, async () => { if (value!.Count == 0) return; @@ -92,5 +106,16 @@ public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); } }, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteDictNullableAsync(s, value, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index f3872b1..c114d5a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -49,11 +49,12 @@ public static Stream WriteEnum(this Stream stream, object value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum + public static async Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum { if (ObjectHelper.AreEqual(value, default(T))) { @@ -63,19 +64,34 @@ public static async Task WriteEnumAsync(this Stream stream, T value, Cancella { await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), cancellationToken).DynamicContext(); } + return stream; } + /// + /// Write + /// + /// Enumeration type + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteEnumAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum + => FluentAsync(stream, (s) => WriteEnumAsync(s, value, cancellationToken)); + /// /// Write /// /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = default) + public static async Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = default) { Type enumType = value.GetType(); SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value")); @@ -87,8 +103,21 @@ public static async Task WriteEnumAsync(this Stream stream, object value, Cancel { await WriteNumberAsync(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), cancellationToken).DynamicContext(); } + return stream; } + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteEnumAsync(this Task stream, object value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteEnumAsync(s, value, cancellationToken)); + /// /// Write /// @@ -127,11 +156,23 @@ public static Stream WriteEnumNullable(this Stream stream, object? value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteEnumNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum + public static Task WriteEnumNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum => value == null ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) : WriteEnumAsync(stream, value.Value, cancellationToken); + /// + /// Write + /// + /// Enumeration type + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteEnumNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum + => FluentAsync(stream, (s) => WriteEnumNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -142,9 +183,22 @@ public static Task WriteEnumNullableAsync(this Stream stream, T? value, Cance #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteEnumNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) + public static Task WriteEnumNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) => value == null ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) : WriteEnumAsync(stream, value, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteEnumNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteEnumNullableAsync(s, value, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index 1aba3c8..e98b1ba 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -32,17 +32,31 @@ public static Stream WriteList(this Stream stream, IList value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = default) + public static async Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = default) { await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); - if (value.Count == 0) return; + if (value.Count == 0) return stream; foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + return stream; } + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteListAsync(this Task stream, IList value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteListAsync(s, value, cancellationToken)); + /// /// Write /// @@ -70,11 +84,22 @@ public static Stream WriteListNullable(this Stream stream, IList? value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteListNullableAsync(this Stream stream, IList? value, CancellationToken cancellationToken = default) + public static Task WriteListNullableAsync(this Stream stream, IList? value, CancellationToken cancellationToken = default) => WriteNullableCountAsync(stream, value?.Count, async () => { if (value!.Count == 0) return; foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); }, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteListNullableAsync(this Task stream, IList? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteListNullableAsync(s, value, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs index c496490..98b9101 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -88,18 +88,37 @@ private static Stream WriteNumberInt(Stream stream, object value, NumberTypes? t /// Stream /// Value to write /// Cancellation token - public static Task WriteNumberAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible + public static Task WriteNumberAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible => WriteNumberIntAsync(stream, value, type: null, cancellationToken); + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNumberAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible + => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); + /// /// Write /// /// Stream /// Value to write /// Cancellation token - public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = default) + public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = default) => WriteNumberIntAsync(stream, value, type: null, cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteNumberAsync(this Task stream, object value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); + /// /// Write /// @@ -107,10 +126,11 @@ public static Task WriteNumberAsync(this Stream stream, object value, Cancellati /// Value to write /// Number type /// Cancellation token + /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes? type, CancellationToken cancellationToken) + private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes? type, CancellationToken cancellationToken) => SerializerException.WrapAsync(async () => { if (type == null) (_, type) = value.GetNumberAndType(); @@ -153,6 +173,7 @@ private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); break; } + return stream; }); /// @@ -193,12 +214,25 @@ public static Stream WriteNumberNullable(this Stream stream, object? value) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) + public static Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, IConvertible => value == null ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) : WriteNumberAsync(stream, value.Value, cancellationToken); + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNumberNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) + where T : struct, IConvertible + => FluentAsync(stream, (s) => WriteNumberNullableAsync(s, value, cancellationToken)); + /// /// Write /// @@ -209,9 +243,20 @@ public static Task WriteNumberNullableAsync(this Stream stream, T? value, Can #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteNumberNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) + public static Task WriteNumberNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) => value == null ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) : WriteNumberAsync(stream, value, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNumberNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteNumberNullableAsync(s, value, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index 5438130..cb3423e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -37,11 +37,12 @@ public static Stream WriteObject(this Stream stream, object obj) /// Stream /// Object to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + public static async Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj)); if (obj is IStreamSerializer streamSerializer) @@ -50,8 +51,21 @@ public static async Task WriteObjectAsync(this Stream stream, object obj, Cancel await WriteAnyObjectAsync(stream, obj, cancellationToken).DynamicContext(); else await SerializerException.WrapAsync(async () => await serializer(stream, obj, cancellationToken).DynamicContext()).DynamicContext(); + return stream; } + /// + /// Write + /// + /// Stream + /// Object to write + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteObjectAsync(this Task stream, object obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteObjectAsync(s, obj, cancellationToken)); + /// /// Write /// @@ -75,9 +89,20 @@ public static Stream WriteObjectNullable(this Stream stream, object? obj) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + public static Task WriteObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Object to write + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteObjectNullableAsync(s, obj, cancellationToken)); + /// /// Write any object /// @@ -115,13 +140,10 @@ public static Stream WriteAnyObject(this Stream stream, object obj) /// Stream /// Object /// Cancellation token - public static async Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + /// Stream + public static async Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) { - if (obj is IStreamSerializer serializable) - { - await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); - return; - } + if (obj is IStreamSerializer serializable) return await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); Type type = obj.GetType(); PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); @@ -141,8 +163,19 @@ public static async Task WriteAnyObjectAsync(this Stream stream, object obj, Can await WriteAnyAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); } } + return stream; } + /// + /// Write any object + /// + /// Stream + /// Object + /// Cancellation token + /// Stream + public static Task WriteAnyObjectAsync(this Task stream, object obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAnyObjectAsync(s, obj, cancellationToken)); + /// /// Write any object /// @@ -166,7 +199,18 @@ public static Stream WriteAnyObjectNullable(this Stream stream, object? obj) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAnyObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + public static Task WriteAnyObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteAnyObjectNullableAsync(s, obj, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index bc539fa..a34b2c2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -1,5 +1,6 @@ using System.Runtime; using System.Runtime.CompilerServices; +using wan24.Core; //TODO Write(Serialized/*) -> Write @@ -67,12 +68,29 @@ public static Stream WriteSerializedStruct(this Stream stream, T obj) where T /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = default) - => SerializerException.Wrap(() => obj.SerializeAsync(stream, cancellationToken)); + public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = default) + => SerializerException.Wrap(async () => + { + await obj.SerializeAsync(stream, cancellationToken).DynamicContext(); + return stream; + }); + + /// + /// Write + /// + /// Stream + /// Object + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedAsync(this Task stream, IStreamSerializer obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteSerializedAsync(s, obj, cancellationToken)); /// /// Write @@ -81,12 +99,30 @@ public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer ob /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer - => SerializerException.Wrap(() => obj.SerializeAsync(stream, cancellationToken)); + public static Task WriteSerializedAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer + => SerializerException.Wrap(async () => + { + await obj.SerializeAsync(stream, cancellationToken).DynamicContext(); + return stream; + }); + + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedAsync(this Task stream, T obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer + => FluentAsync(stream, (s) => WriteSerializedAsync(s, obj, cancellationToken)); /// /// Write @@ -95,12 +131,30 @@ public static Task WriteSerializedAsync(this Stream stream, T obj, Cancellati /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedStructAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer - => SerializerException.Wrap(() => obj.SerializeAsync(stream, cancellationToken)); + public static Task WriteSerializedStructAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + => SerializerException.Wrap(async () => + { + await obj.SerializeAsync(stream, cancellationToken).DynamicContext(); + return stream; + }); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedStructAsync(this Task stream, T obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + => FluentAsync(stream, (s) => WriteSerializedStructAsync(s, obj, cancellationToken)); /// /// Write @@ -153,9 +207,20 @@ public static Stream WriteSerializedNullableStruct(this Stream stream, T? obj #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) + public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedNullableAsync(this Task stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteSerializedNullableAsync(s, obj, cancellationToken)); + /// /// Write /// @@ -167,9 +232,22 @@ public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSeria #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer + public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedNullableAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) + where T : class, IStreamSerializer + => FluentAsync(stream, (s) => WriteSerializedNullableAsync(s, obj, cancellationToken)); + /// /// Write /// @@ -181,7 +259,21 @@ public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, C #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedNullableStructAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + public static Task WriteSerializedNullableStructAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) + where T : struct, IStreamSerializer => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!.Value, cancellationToken), cancellationToken); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedNullableStructAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) + where T : struct, IStreamSerializer + => FluentAsync(stream, (s) => WriteSerializedNullableStructAsync(s, obj, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs index add6341..17e4698 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -67,7 +67,8 @@ public static Stream WriteStreamNullable(this Stream stream, Stream? source, Arr /// Array pool /// Chunk length in bytes /// Cancellation token - public static Task WriteStreamAsync( + /// Stream + public static Task WriteStreamAsync( this Stream stream, Stream source, ArrayPool? pool = null, @@ -98,8 +99,27 @@ public static Task WriteStreamAsync( await stream.WriteBytesAsync(buffer.Memory, cancellationToken).DynamicContext(); } } + return stream; }); + /// + /// Write a stream + /// + /// Stream + /// Source stream + /// Array pool + /// Chunk length in bytes + /// Cancellation token + /// Stream + public static Task WriteStreamAsync( + this Task stream, + Stream source, + ArrayPool? pool = null, + int? chunkLength = null, + CancellationToken cancellationToken = default + ) + => FluentAsync(stream, (s) => WriteStreamAsync(s, source, pool, chunkLength, cancellationToken)); + /// /// Write a stream /// @@ -113,7 +133,7 @@ public static Task WriteStreamAsync( #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteStreamNullableAsync( + public static Task WriteStreamNullableAsync( this Stream stream, Stream? source, ArrayPool? pool = null, @@ -123,5 +143,25 @@ public static Task WriteStreamNullableAsync( => source == null ? WriteNumberAsync(stream, long.MinValue, cancellationToken) : WriteStreamAsync(stream, source, pool, chunkLength, cancellationToken); + + /// + /// Write a stream + /// + /// Stream + /// Source stream + /// Array pool + /// Chunk length in bytes + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStreamNullableAsync( + this Task stream, + Stream? source, + ArrayPool? pool = null, + int? chunkLength = null, + CancellationToken cancellationToken = default + ) + => FluentAsync(stream, (s) => WriteStreamNullableAsync(s, source, pool, chunkLength, cancellationToken)); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index d405c04..096f17e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -22,9 +22,18 @@ public static Stream WriteString(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token - public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) + public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes(buffer), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteStringAsync(this Task stream, string value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteStringAsync(s, value, cancellationToken)); + /// /// Write /// @@ -40,9 +49,18 @@ public static Stream WriteStringNullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteStringNullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) + public static Task WriteStringNullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes(buffer), cancellationToken); + /// + /// Write + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteStringNullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteStringNullableAsync(s, value, cancellationToken)); + /// /// Write UTF-16 (little endian) string /// @@ -58,9 +76,18 @@ public static Stream WriteString16(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token - public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) + public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) => WriteStringAsync(stream, value, lenShift: 1, (buffer) => value.GetBytes16(buffer), cancellationToken); + /// + /// Write UTF-16 (little endian) string + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteString16Async(this Task stream, string value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteString16Async(s, value, cancellationToken)); + /// /// Write UTF-16 (little endian) string /// @@ -76,9 +103,18 @@ public static Stream WriteString16Nullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteString16NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) + public static Task WriteString16NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) => WriteNullableStringAsync(stream, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer), cancellationToken); + /// + /// Write UTF-16 (little endian) string + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteString16NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteString16NullableAsync(s, value, cancellationToken)); + /// /// Write UTF-32 (little endian) string /// @@ -94,9 +130,18 @@ public static Stream WriteString32(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token - public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) + public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes32(buffer), cancellationToken); + /// + /// Write UTF-32 (little endian) string + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteString32Async(this Task stream, string value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteString32Async(s, value, cancellationToken)); + /// /// Write UTF-32 (little endian) string /// @@ -112,9 +157,18 @@ public static Stream WriteString32Nullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token - public static Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) + public static Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer), cancellationToken); + /// + /// Write UTF-32 (little endian) string + /// + /// Stream + /// Value to write + /// Cancellation token + public static Task WriteString32NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteString32NullableAsync(s, value, cancellationToken)); + /// /// Write a string /// @@ -155,16 +209,13 @@ private static Stream WriteString(Stream stream, string value, int lenShift, Fun /// Buffer length bit-shifting value /// Writing action to execut /// Cancellation token + /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task WriteStringAsync(Stream stream, string value, int lenShift, Func action, CancellationToken cancellationToken) + private static async Task WriteStringAsync(Stream stream, string value, int lenShift, Func action, CancellationToken cancellationToken) { - if (value.Length == 0) - { - await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); - return; - } + if (value.Length == 0) return await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); try { @@ -177,6 +228,7 @@ private static async Task WriteStringAsync(Stream stream, string value, int lenS StreamSerializer.BufferPool.Return(data); throw; } + return stream; } /// @@ -224,21 +276,14 @@ private static Stream WriteNullableString(Stream stream, string? value, int lenS /// Buffer length bit-shifting value /// Writing action to execute if the string isn't /// Cancellation token + /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task WriteNullableStringAsync(Stream stream, string? value, int lenShift, Func action, CancellationToken cancellationToken) + private static async Task WriteNullableStringAsync(Stream stream, string? value, int lenShift, Func action, CancellationToken cancellationToken) { - if (value == null) - { - await WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken).DynamicContext(); - return; - } - if (value.Length == 0) - { - await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); - return; - } + if (value == null) return await WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken).DynamicContext(); + if (value.Length == 0) return await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); try { @@ -251,6 +296,7 @@ private static async Task WriteNullableStringAsync(Stream stream, string? value, StreamSerializer.BufferPool.Return(data); throw; } + return stream; } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs index 177ad4c..f7813ff 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs @@ -112,7 +112,7 @@ public static Stream WriteStructNullable(this Stream stream, T? value, bool f #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) + public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(() => { Type structType = value.GetType(); @@ -132,6 +132,18 @@ public static Task WriteStructAsync(this Stream stream, object value, bool force return WriteBytesAsync(stream, buffer.Memory, cancellationToken); }); + /// + /// Write a struct + /// + /// Stream + /// Struct + /// Force little endian encoding? + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructAsync(this Task stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteStructAsync(s, value, forceLittleEndian, cancellationToken)); + /// /// Write a struct /// @@ -144,7 +156,7 @@ public static Task WriteStructAsync(this Stream stream, object value, bool force #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteStructAsync(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) where T : struct + public static Task WriteStructAsync(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) where T : struct => SerializerException.WrapAsync(() => { Type structType = typeof(T); @@ -164,6 +176,20 @@ public static Task WriteStructAsync(this Stream stream, T value, bool forceLi return WriteBytesAsync(stream, buffer.Memory, cancellationToken); }); + /// + /// Write a struct + /// + /// Structure type + /// Stream + /// Struct + /// Force little endian encoding? + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructAsync(this Task stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) + where T : struct + => FluentAsync(stream, (s) => WriteStructAsync(s, value, forceLittleEndian, cancellationToken)); + /// /// Write a struct /// @@ -175,7 +201,7 @@ public static Task WriteStructAsync(this Stream stream, T value, bool forceLi #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteStructNullableAsync( + public static Task WriteStructNullableAsync( this Stream stream, object? value, bool forceLittleEndian = true, @@ -183,6 +209,23 @@ public static Task WriteStructNullableAsync( ) => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!, forceLittleEndian, cancellationToken), cancellationToken); + /// + /// Write a struct + /// + /// Stream + /// Struct + /// Force little endian encoding? + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructNullableAsync( + this Task stream, + object? value, + bool forceLittleEndian = true, + CancellationToken cancellationToken = default + ) + => FluentAsync(stream, (s) => WriteStructNullableAsync(s, value, forceLittleEndian, cancellationToken)); + /// /// Write a struct /// @@ -195,7 +238,7 @@ public static Task WriteStructNullableAsync( #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteStructNullableAsync( + public static Task WriteStructNullableAsync( this Stream stream, T? value, bool forceLittleEndian = true, @@ -204,6 +247,25 @@ public static Task WriteStructNullableAsync( where T : struct => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!.Value, forceLittleEndian, cancellationToken), cancellationToken); + /// + /// Write a struct + /// + /// Structure type + /// Stream + /// Struct + /// Force little endian encoding? + /// Cancellation token + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructNullableAsync( + this Task stream, + T? value, + bool forceLittleEndian = true, + CancellationToken cancellationToken = default + ) + where T : struct + => FluentAsync(stream, (s) => WriteStructNullableAsync(s, value, forceLittleEndian, cancellationToken)); + /// /// Convert the endianess of structure fields /// diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index 490f83b..a3b0cbe 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -55,11 +55,12 @@ public static Stream WriteSerializerVersion(this Stream stream) /// /// Stream /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) + public static async Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) { (object n, NumberTypes nt) = StreamSerializer.Version.GetNumberAndType(); await WriteAsync(stream, (byte)nt, cancellationToken).DynamicContext(); @@ -72,8 +73,20 @@ public static async Task WriteSerializerVersionAsync(this Stream stream, Cancell case int i: await WriteAsync(stream, i, cancellationToken).DynamicContext(); break; default: throw new SerializerException($"Invalid numeric type {nt} for serializer version {StreamSerializer.Version}"); } + return stream; } + /// + /// Write the serializer version + /// + /// Stream + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializerVersionAsync(this Task stream, CancellationToken cancellationToken = default) + => FluentAsync(stream, (s) => WriteSerializerVersionAsync(s, cancellationToken)); + /// /// Write a boolean flag if an object is not /// @@ -172,14 +185,16 @@ public static Stream WriteIfNotNull(this Stream stream, T? obj, Action action /// Object /// Write action to execute, if the object isn't /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteIfNotNullAsync(this Stream stream, T? obj, Func action, CancellationToken cancellationToken = default) + public static async Task WriteIfNotNullAsync(this Stream stream, T? obj, Func action, CancellationToken cancellationToken = default) { if (await WriteIfNotNullAsync(stream, obj, cancellationToken).DynamicContext()) await action().DynamicContext(); + return stream; } /// @@ -206,14 +221,16 @@ public static Stream WriteNullableCount(this Stream stream, long? count, Action /// Count /// Write action to execute, if the count isn't /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteNullableCountAsync(this Stream stream, long? count, Func action, CancellationToken cancellationToken = default) + public static async Task WriteNullableCountAsync(this Stream stream, long? count, Func action, CancellationToken cancellationToken = default) { if (await WriteNullableCountAsync(stream, count, cancellationToken).DynamicContext()) await action().DynamicContext(); + return stream; } /// @@ -250,11 +267,18 @@ public static Stream WriteSerializedData(this Stream stream, byte[] data, int le /// Data length in bytes /// Array pool (data will returned to that pool) /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool? pool = null, CancellationToken cancellationToken = default) + public static async Task WriteSerializedDataAsync( + this Stream stream, + byte[] data, + int len, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) => await SerializerException.WrapAsync(async () => { try @@ -265,6 +289,16 @@ public static async Task WriteSerializedDataAsync(this Stream stream, byte[] dat { (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); } + return stream; }); + + /// + /// Fluent API action executor + /// + /// Stream task + /// Action to execute + /// Stream + public static async Task FluentAsync(Task task, Func> action) + => await action(await task.DynamicContext()).DynamicContext(); } } From 143108849f079b7ace324a3bee9f54fc17c3ded4 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 14:04:48 +0200 Subject: [PATCH 05/17] Update --- ...SerializerExtensions.StreamExtensions.html | 590 ++++++++++-------- docs/manifest.json | 2 +- src/Stream-Serializer-Extensions Docs/log.txt | 2 + .../StreamExtensions.Write.Array.cs | 4 + .../StreamExtensions.Write.Basic.cs | 48 +- .../StreamExtensions.Write.Bytes.cs | 4 + .../StreamExtensions.Write.Dictionary.cs | 2 + .../StreamExtensions.Write.Enum.cs | 6 +- .../StreamExtensions.Write.List.cs | 2 + .../StreamExtensions.Write.Number.cs | 8 + .../StreamExtensions.Write.Object.cs | 4 + .../StreamExtensions.Write.Serialized.cs | 6 + .../StreamExtensions.Write.String.cs | 12 + .../StreamExtensions.Write.Struct.cs | 8 + 14 files changed, 447 insertions(+), 251 deletions(-) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index a1a3aeb..9ac92f0 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -243,7 +243,7 @@

    Methods Improve this Doc - View Source + View Source

    ConvertStructureEndianess(Type, Memory<Byte>, StreamSerializerAttribute)

    @@ -12552,7 +12552,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Boolean)

    @@ -12609,7 +12609,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Byte)

    @@ -12666,7 +12666,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Decimal)

    @@ -12723,7 +12723,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Double)

    @@ -12780,7 +12780,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int16)

    @@ -12837,7 +12837,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int32)

    @@ -12894,7 +12894,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int64)

    @@ -12951,7 +12951,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, SByte)

    @@ -13008,7 +13008,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Single)

    @@ -13065,7 +13065,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt16)

    @@ -13122,7 +13122,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt32)

    @@ -13179,7 +13179,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt64)

    @@ -13602,7 +13602,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObject(Stream, Object)

    @@ -13658,7 +13658,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectAsync(Stream, Object, CancellationToken)

    @@ -13720,7 +13720,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectAsync(Task<Stream>, Object, CancellationToken)

    @@ -13782,7 +13782,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullable(Stream, Object)

    @@ -13839,7 +13839,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullableAsync(Stream, Object, CancellationToken)

    @@ -13892,7 +13892,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -13901,7 +13902,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullableAsync(Task<Stream>, Object, CancellationToken)

    @@ -13954,7 +13955,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14203,7 +14205,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteArrayNullableAsync(Stream, Nullable<Array>, CancellationToken)

    @@ -14256,7 +14258,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14265,7 +14268,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteArrayNullableAsync(Task<Stream>, Nullable<Array>, CancellationToken)

    @@ -14318,7 +14321,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14327,7 +14331,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Boolean, CancellationToken)

    @@ -14390,7 +14394,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Byte, CancellationToken)

    @@ -14453,7 +14457,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Decimal, CancellationToken)

    @@ -14506,7 +14510,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14515,7 +14520,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Double, CancellationToken)

    @@ -14568,7 +14573,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14577,7 +14583,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int16, CancellationToken)

    @@ -14630,7 +14636,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14639,7 +14646,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int32, CancellationToken)

    @@ -14692,7 +14699,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14701,7 +14709,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int64, CancellationToken)

    @@ -14754,7 +14762,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14763,7 +14772,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, SByte, CancellationToken)

    @@ -14816,7 +14825,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14825,7 +14835,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Single, CancellationToken)

    @@ -14878,7 +14888,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14887,7 +14898,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt16, CancellationToken)

    @@ -14940,7 +14951,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -14949,7 +14961,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt32, CancellationToken)

    @@ -15002,7 +15014,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15011,7 +15024,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt64, CancellationToken)

    @@ -15064,7 +15077,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15073,7 +15087,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Boolean, CancellationToken)

    @@ -15136,7 +15150,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Byte, CancellationToken)

    @@ -15199,7 +15213,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Decimal, CancellationToken)

    @@ -15252,7 +15266,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15261,7 +15276,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Double, CancellationToken)

    @@ -15314,7 +15329,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15323,7 +15339,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Int16, CancellationToken)

    @@ -15376,7 +15392,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15385,7 +15402,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Int32, CancellationToken)

    @@ -15438,7 +15455,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15447,7 +15465,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Int64, CancellationToken)

    @@ -15500,7 +15518,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15509,7 +15528,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, SByte, CancellationToken)

    @@ -15562,7 +15581,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15571,7 +15591,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Single, CancellationToken)

    @@ -15624,7 +15644,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15633,7 +15654,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, UInt16, CancellationToken)

    @@ -15686,7 +15707,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15695,7 +15717,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, UInt32, CancellationToken)

    @@ -15748,7 +15770,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15757,7 +15780,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, UInt64, CancellationToken)

    @@ -15810,7 +15833,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15933,7 +15957,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesAsync(Stream, Memory<Byte>, CancellationToken)

    @@ -15986,7 +16010,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -15995,7 +16020,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, CancellationToken)

    @@ -16058,7 +16083,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesAsync(Task<Stream>, Memory<Byte>, CancellationToken)

    @@ -16111,7 +16136,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -16120,7 +16146,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesAsync(Task<Stream>, ReadOnlyMemory<Byte>, CancellationToken)

    @@ -16183,7 +16209,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesNullable(Stream, Byte[])

    @@ -16240,7 +16266,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesNullableAsync(Stream, Byte[], CancellationToken)

    @@ -16293,7 +16319,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -16302,7 +16329,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteBytesNullableAsync(Task<Stream>, Byte[], CancellationToken)

    @@ -16355,7 +16382,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -16604,7 +16632,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteDictNullableAsync(Stream, IDictionary, CancellationToken)

    @@ -16657,7 +16685,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -16666,7 +16695,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteDictNullableAsync(Task<Stream>, IDictionary, CancellationToken)

    @@ -16719,7 +16748,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -17276,7 +17306,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync(Stream, Object, CancellationToken)

    @@ -17329,7 +17359,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -17338,7 +17369,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync(Task<Stream>, Object, CancellationToken)

    @@ -17391,7 +17422,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -17400,7 +17432,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    @@ -17454,7 +17486,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -17479,7 +17512,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteEnumNullableAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    @@ -17533,7 +17566,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -17558,7 +17592,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteFixedArray(Stream, Array)

    @@ -17615,7 +17649,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteFixedArray<T>(Stream, ReadOnlySpan<T>)

    @@ -17688,7 +17722,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteFixedArray<T>(Stream, Span<T>)

    @@ -17761,7 +17795,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteFixedArrayAsync(Stream, Array, CancellationToken)

    @@ -17824,7 +17858,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteFixedArrayAsync(Task<Stream>, Array, CancellationToken)

    @@ -17887,7 +17921,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

    @@ -17940,7 +17974,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -17965,7 +18000,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteFixedArrayAsync<T>(Stream, ReadOnlyMemory<T>, CancellationToken)

    @@ -18044,7 +18079,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteFixedArrayAsync<T>(Task<Stream>, Memory<T>, CancellationToken)

    @@ -18097,7 +18132,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -18122,7 +18158,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteFixedArrayAsync<T>(Task<Stream>, ReadOnlyMemory<T>, CancellationToken)

    @@ -18757,7 +18793,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteListNullableAsync(Stream, IList, CancellationToken)

    @@ -18810,7 +18846,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -18819,7 +18856,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteListNullableAsync(Task<Stream>, IList, CancellationToken)

    @@ -18872,7 +18909,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -18881,7 +18919,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Boolean>)

    @@ -18938,7 +18976,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Byte>)

    @@ -18994,7 +19032,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Decimal>)

    @@ -19050,7 +19088,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Double>)

    @@ -19106,7 +19144,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Int16>)

    @@ -19162,7 +19200,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Int32>)

    @@ -19218,7 +19256,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Int64>)

    @@ -19274,7 +19312,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<SByte>)

    @@ -19330,7 +19368,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Single>)

    @@ -19386,7 +19424,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<UInt16>)

    @@ -19442,7 +19480,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<UInt32>)

    @@ -19498,7 +19536,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<UInt64>)

    @@ -19554,7 +19592,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

    @@ -19607,7 +19645,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -19616,7 +19655,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

    @@ -19668,7 +19707,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -19677,7 +19717,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

    @@ -19729,7 +19769,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -19738,7 +19779,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

    @@ -19790,7 +19831,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -19799,7 +19841,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Int16>, CancellationToken)

    @@ -19851,7 +19893,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -19860,7 +19903,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    @@ -19912,7 +19955,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -19921,7 +19965,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

    @@ -19973,7 +20017,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -19982,7 +20027,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

    @@ -20034,7 +20079,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20043,7 +20089,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

    @@ -20095,7 +20141,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20104,7 +20151,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

    @@ -20156,7 +20203,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20165,7 +20213,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

    @@ -20217,7 +20265,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20226,7 +20275,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

    @@ -20278,7 +20327,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20287,7 +20337,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Boolean>, CancellationToken)

    @@ -20340,7 +20390,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20349,7 +20400,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Byte>, CancellationToken)

    @@ -20401,7 +20452,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20410,7 +20462,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Decimal>, CancellationToken)

    @@ -20462,7 +20514,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20471,7 +20524,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Double>, CancellationToken)

    @@ -20523,7 +20576,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20532,7 +20586,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Int16>, CancellationToken)

    @@ -20584,7 +20638,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20593,7 +20648,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Int32>, CancellationToken)

    @@ -20645,7 +20700,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20654,7 +20710,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Int64>, CancellationToken)

    @@ -20706,7 +20762,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20715,7 +20772,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<SByte>, CancellationToken)

    @@ -20767,7 +20824,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20776,7 +20834,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Single>, CancellationToken)

    @@ -20828,7 +20886,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20837,7 +20896,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<UInt16>, CancellationToken)

    @@ -20889,7 +20948,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20898,7 +20958,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<UInt32>, CancellationToken)

    @@ -20950,7 +21010,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -20959,7 +21020,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<UInt64>, CancellationToken)

    @@ -21011,7 +21072,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -21401,7 +21463,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberAsync(Stream, Object, CancellationToken)

    @@ -21453,7 +21515,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -21462,7 +21525,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberAsync(Task<Stream>, Object, CancellationToken)

    @@ -21514,7 +21577,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -21523,7 +21587,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberAsync<T>(Stream, T, CancellationToken)

    @@ -21576,7 +21640,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -21601,7 +21666,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberAsync<T>(Task<Stream>, T, CancellationToken)

    @@ -21654,7 +21719,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -21679,7 +21745,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberNullable(Stream, Object)

    @@ -21736,7 +21802,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberNullable<T>(Stream, Nullable<T>)

    @@ -21810,7 +21876,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync(Stream, Object, CancellationToken)

    @@ -21863,7 +21929,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -21872,7 +21939,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync(Task<Stream>, Object, CancellationToken)

    @@ -21925,7 +21992,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -21934,7 +22002,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    @@ -21988,7 +22056,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -22013,7 +22082,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    @@ -22067,7 +22136,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -22332,7 +22402,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteObjectNullableAsync(Stream, Object, CancellationToken)

    @@ -22385,7 +22455,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -22394,7 +22465,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteObjectNullableAsync(Task<Stream>, Object, CancellationToken)

    @@ -22447,7 +22518,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -23148,7 +23220,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    @@ -23201,7 +23273,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -23210,7 +23283,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync(Task<Stream>, IStreamSerializer, CancellationToken)

    @@ -23263,7 +23336,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -23272,7 +23346,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync<T>(Stream, T, CancellationToken)

    @@ -23326,7 +23400,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -23351,7 +23426,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync<T>(Task<Stream>, T, CancellationToken)

    @@ -23405,7 +23480,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -23504,7 +23580,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableStructAsync<T>(Stream, Nullable<T>, CancellationToken)

    @@ -23558,7 +23634,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -23583,7 +23660,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableStructAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    @@ -23637,7 +23714,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -24552,7 +24630,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16(Stream, String)

    @@ -24608,7 +24686,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Async(Stream, String, CancellationToken)

    @@ -24660,7 +24738,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -24669,7 +24748,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Async(Task<Stream>, String, CancellationToken)

    @@ -24721,7 +24800,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -24730,7 +24810,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Nullable<T>(Stream, String)

    @@ -24801,7 +24881,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteString16NullableAsync(Stream, String, CancellationToken)

    @@ -24853,7 +24933,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -24862,7 +24943,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16NullableAsync(Task<Stream>, String, CancellationToken)

    @@ -24914,7 +24995,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -24923,7 +25005,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32(Stream, String)

    @@ -24979,7 +25061,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Async(Stream, String, CancellationToken)

    @@ -25031,7 +25113,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25040,7 +25123,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Async(Task<Stream>, String, CancellationToken)

    @@ -25092,7 +25175,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25101,7 +25185,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Nullable(Stream, String)

    @@ -25157,7 +25241,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32NullableAsync(Stream, String, CancellationToken)

    @@ -25209,7 +25293,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25218,7 +25303,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32NullableAsync(Task<Stream>, String, CancellationToken)

    @@ -25270,7 +25355,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25279,7 +25365,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringAsync(Stream, String, CancellationToken)

    @@ -25331,7 +25417,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25340,7 +25427,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringAsync(Task<Stream>, String, CancellationToken)

    @@ -25392,7 +25479,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25401,7 +25489,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullable(Stream, String)

    @@ -25457,7 +25545,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullableAsync(Stream, String, CancellationToken)

    @@ -25509,7 +25597,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25518,7 +25607,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullableAsync(Task<Stream>, String, CancellationToken)

    @@ -25570,7 +25659,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25722,7 +25812,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteStructAsync(Stream, Object, Boolean, CancellationToken)

    @@ -25781,7 +25871,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25790,7 +25881,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStructAsync(Task<Stream>, Object, Boolean, CancellationToken)

    @@ -25849,7 +25940,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25858,7 +25950,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStructAsync<T>(Stream, T, Boolean, CancellationToken)

    @@ -25918,7 +26010,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -25943,7 +26036,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteStructAsync<T>(Task<Stream>, T, Boolean, CancellationToken)

    @@ -26003,7 +26096,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -26171,7 +26265,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken)

    @@ -26230,7 +26324,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -26239,7 +26334,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStructNullableAsync(Task<Stream>, Object, Boolean, CancellationToken)

    @@ -26298,7 +26393,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -26307,7 +26403,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStructNullableAsync<T>(Stream, Nullable<T>, Boolean, CancellationToken)

    @@ -26367,7 +26463,8 @@
    Returns
    Task<Stream> - +

    Stream

    + @@ -26392,7 +26489,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteStructNullableAsync<T>(Task<Stream>, Nullable<T>, Boolean, CancellationToken)

    @@ -26452,7 +26549,8 @@
    Returns
    Task<Stream> - +

    Stream

    + diff --git a/docs/manifest.json b/docs/manifest.json index 2033772..5caea53 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "0l9mXc99W0eRv7iyKQJNMCN1Fc/w15+oRYG+M5vnfXo=" + "hash": "QB0hiYwIsGMrxqm5FlZC2Aab77NCVgKWgAbDYl70BwE=" } }, "is_incremental": false, diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index 289794e..ccd7e1f 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -57,3 +57,5 @@ {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T10:43:06.3893699Z","message_severity":"warning","correlation_id":"86C6A747-1EEC-4F8D-8019-EE0C5147C43E.1.1.13"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:44:21.2507452Z","message_severity":"warning","correlation_id":"6F515D44-206C-4AF6-9F67-CB40FB57CEB1.1.1.12"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:44:21.2547443Z","message_severity":"warning","correlation_id":"6F515D44-206C-4AF6-9F67-CB40FB57CEB1.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:58:18.7332379Z","message_severity":"warning","correlation_id":"B1751265-F1C7-40E3-866A-4598735FCFC9.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:58:18.7392339Z","message_severity":"warning","correlation_id":"B1751265-F1C7-40E3-866A-4598735FCFC9.1.1.13"} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs index 4f590c2..e2d53ba 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs @@ -77,6 +77,7 @@ public static Stream WriteArrayNullable(this Stream stream, Array? value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -90,6 +91,7 @@ public static Task WriteArrayNullableAsync(this Stream stream, Array? va /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteArrayNullableAsync(this Task stream, Array? value, CancellationToken cancellationToken = default) @@ -160,6 +162,7 @@ public static Stream WriteFixedArray(this Stream stream, Array value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteFixedArrayAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) @@ -172,6 +175,7 @@ public static Task WriteFixedArrayAsync(this Stream stream, Memory /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteFixedArrayAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index ce77796..8c7ea7e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -3,6 +3,8 @@ using System.Text; using wan24.Core; +//TODO Check all fluent API methods are inlined + namespace wan24.StreamSerializerExtensions { // Basic types @@ -89,6 +91,7 @@ public static Stream WriteNullable(this Stream stream, bool? value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -117,6 +120,7 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, C /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, bool? value, CancellationToken cancellationToken = default) @@ -138,6 +142,7 @@ public static Task WriteNullableAsync(this Task stream, bool? va /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = default) @@ -149,6 +154,7 @@ public static Task WriteAsync(this Stream stream, sbyte value, Cancellat /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, sbyte value, CancellationToken cancellationToken = default) @@ -169,6 +175,7 @@ public static Stream WriteNullable(this Stream stream, sbyte? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, sbyte.MinValue, sbyte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -178,6 +185,7 @@ public static Task WriteNullableAsync(this Stream stream, sbyte? value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, sbyte? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -244,6 +252,7 @@ public static Stream WriteNullable(this Stream stream, byte? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, byte.MinValue, byte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -253,6 +262,7 @@ public static Task WriteNullableAsync(this Stream stream, byte? value, C /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, byte? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -275,6 +285,7 @@ public static Stream Write(this Stream stream, short value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -288,6 +299,7 @@ public static Task WriteAsync(this Stream stream, short value, Cancellat /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, short value, CancellationToken cancellationToken = default) @@ -308,6 +320,7 @@ public static Stream WriteNullable(this Stream stream, short? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, short.MinValue, short.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -317,6 +330,7 @@ public static Task WriteNullableAsync(this Stream stream, short? value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, short? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -339,6 +353,7 @@ public static Stream Write(this Stream stream, ushort value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -352,6 +367,7 @@ public static Task WriteAsync(this Stream stream, ushort value, Cancella /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, ushort value, CancellationToken cancellationToken = default) @@ -372,6 +388,7 @@ public static Stream WriteNullable(this Stream stream, ushort? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, ushort.MinValue, ushort.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -381,6 +398,7 @@ public static Task WriteNullableAsync(this Stream stream, ushort? value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, ushort? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -403,6 +421,7 @@ public static Stream Write(this Stream stream, int value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -416,6 +435,7 @@ public static Task WriteAsync(this Stream stream, int value, Cancellatio /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, int value, CancellationToken cancellationToken = default) @@ -436,6 +456,7 @@ public static Stream WriteNullable(this Stream stream, int? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, int.MinValue, int.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -445,6 +466,7 @@ public static Task WriteNullableAsync(this Stream stream, int? value, Ca /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, int? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -467,6 +489,7 @@ public static Stream Write(this Stream stream, uint value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -480,6 +503,7 @@ public static Task WriteAsync(this Stream stream, uint value, Cancellati /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, uint value, CancellationToken cancellationToken = default) @@ -500,6 +524,7 @@ public static Stream WriteNullable(this Stream stream, uint? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, uint.MinValue, uint.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -509,6 +534,7 @@ public static Task WriteNullableAsync(this Stream stream, uint? value, C /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, uint? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -531,6 +557,7 @@ public static Stream Write(this Stream stream, long value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -544,6 +571,7 @@ public static Task WriteAsync(this Stream stream, long value, Cancellati /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, long value, CancellationToken cancellationToken = default) @@ -564,6 +592,7 @@ public static Stream WriteNullable(this Stream stream, long? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, long.MinValue, long.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -573,6 +602,7 @@ public static Task WriteNullableAsync(this Stream stream, long? value, C /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, long? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -595,6 +625,7 @@ public static Stream Write(this Stream stream, ulong value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -608,6 +639,7 @@ public static Task WriteAsync(this Stream stream, ulong value, Cancellat /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, ulong value, CancellationToken cancellationToken = default) @@ -628,6 +660,7 @@ public static Stream WriteNullable(this Stream stream, ulong? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, ulong.MinValue, ulong.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -637,6 +670,7 @@ public static Task WriteNullableAsync(this Stream stream, ulong? value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, ulong? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -659,6 +693,7 @@ public static Stream Write(this Stream stream, float value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -672,6 +707,7 @@ public static Task WriteAsync(this Stream stream, float value, Cancellat /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, float value, CancellationToken cancellationToken = default) @@ -692,6 +728,7 @@ public static Stream WriteNullable(this Stream stream, float? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, float.MinValue, float.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -701,6 +738,7 @@ public static Task WriteNullableAsync(this Stream stream, float? value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, float? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -723,6 +761,7 @@ public static Stream Write(this Stream stream, double value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -736,10 +775,9 @@ public static Task WriteAsync(this Stream stream, double value, Cancella /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif public static Task WriteAsync(this Task stream, double value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); @@ -758,6 +796,7 @@ public static Stream WriteNullable(this Stream stream, double? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, double.MinValue, double.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -767,6 +806,7 @@ public static Task WriteNullableAsync(this Stream stream, double? value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, double? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -789,6 +829,7 @@ public static Stream Write(this Stream stream, decimal value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -802,6 +843,7 @@ public static Task WriteAsync(this Stream stream, decimal value, Cancell /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, decimal value, CancellationToken cancellationToken = default) @@ -822,6 +864,7 @@ public static Stream WriteNullable(this Stream stream, decimal? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = default) => WriteNullableNumericAsync(stream, value, decimal.MinValue, decimal.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); @@ -831,6 +874,7 @@ public static Task WriteNullableAsync(this Stream stream, decimal? value /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNullableAsync(this Task stream, decimal? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs index 07c5695..2157992 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs @@ -51,6 +51,7 @@ public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteBytesAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) @@ -62,6 +63,7 @@ public static Task WriteBytesAsync(this Stream stream, Memory valu /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteBytesAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) @@ -117,6 +119,7 @@ public static Stream WriteBytesNullable(this Stream stream, byte[]? value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -135,6 +138,7 @@ public static Task WriteBytesNullableAsync(this Stream stream, byte[]? v /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteBytesNullableAsync(this Task stream, byte[]? value, CancellationToken cancellationToken = default) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index 47bb045..18e8683 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -92,6 +92,7 @@ public static Stream WriteDictNullable(this Stream stream, IDictionary? value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -113,6 +114,7 @@ public static Task WriteDictNullableAsync(this Stream stream, IDictionar /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, CancellationToken cancellationToken = default) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index c114d5a..57fca8b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -152,6 +152,7 @@ public static Stream WriteEnumNullable(this Stream stream, object? value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -168,6 +169,7 @@ public static Task WriteEnumNullableAsync(this Stream stream, T? valu /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteEnumNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum @@ -179,6 +181,7 @@ public static Task WriteEnumNullableAsync(this Task stream, T /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -194,10 +197,9 @@ public static Task WriteEnumNullableAsync(this Stream stream, object? va /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif public static Task WriteEnumNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteEnumNullableAsync(s, value, cancellationToken)); } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index e98b1ba..d0b1a43 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -80,6 +80,7 @@ public static Stream WriteListNullable(this Stream stream, IList? value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -97,6 +98,7 @@ public static Task WriteListNullableAsync(this Stream stream, IList? val /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteListNullableAsync(this Task stream, IList? value, CancellationToken cancellationToken = default) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs index 98b9101..f1fce9f 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -88,6 +88,7 @@ private static Stream WriteNumberInt(Stream stream, object value, NumberTypes? t /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNumberAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible => WriteNumberIntAsync(stream, value, type: null, cancellationToken); @@ -98,6 +99,7 @@ public static Task WriteNumberAsync(this Stream stream, T value, Canc /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNumberAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); @@ -107,6 +109,7 @@ public static Task WriteNumberAsync(this Task stream, T value /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = default) => WriteNumberIntAsync(stream, value, type: null, cancellationToken); @@ -116,6 +119,7 @@ public static Task WriteNumberAsync(this Stream stream, object value, Ca /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteNumberAsync(this Task stream, object value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); @@ -210,6 +214,7 @@ public static Stream WriteNumberNullable(this Stream stream, object? value) /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -227,6 +232,7 @@ public static Task WriteNumberNullableAsync(this Stream stream, T? va /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) @@ -239,6 +245,7 @@ public static Task WriteNumberNullableAsync(this Task stream, /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -254,6 +261,7 @@ public static Task WriteNumberNullableAsync(this Stream stream, object? /// Stream /// Value to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index cb3423e..6aafccb 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -85,6 +85,7 @@ public static Stream WriteObjectNullable(this Stream stream, object? obj) /// Stream /// Object to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -98,6 +99,7 @@ public static Task WriteObjectNullableAsync(this Stream stream, object? /// Stream /// Object to write /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) @@ -195,6 +197,7 @@ public static Stream WriteAnyObjectNullable(this Stream stream, object? obj) /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -208,6 +211,7 @@ public static Task WriteAnyObjectNullableAsync(this Stream stream, objec /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index a34b2c2..cdc75e0 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -203,6 +203,7 @@ public static Stream WriteSerializedNullableStruct(this Stream stream, T? obj /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -216,6 +217,7 @@ public static Task WriteSerializedNullableAsync(this Stream stream, IStr /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedNullableAsync(this Task stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) @@ -228,6 +230,7 @@ public static Task WriteSerializedNullableAsync(this Task stream /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -242,6 +245,7 @@ public static Task WriteSerializedNullableAsync(this Stream stream, T /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedNullableAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) @@ -255,6 +259,7 @@ public static Task WriteSerializedNullableAsync(this Task str /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -270,6 +275,7 @@ public static Task WriteSerializedNullableStructAsync(this Stream str /// Stream /// Object /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedNullableStructAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index 096f17e..7d2cba3 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -22,6 +22,7 @@ public static Stream WriteString(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes(buffer), cancellationToken); @@ -31,6 +32,7 @@ public static Task WriteStringAsync(this Stream stream, string value, Ca /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteStringAsync(this Task stream, string value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteStringAsync(s, value, cancellationToken)); @@ -49,6 +51,7 @@ public static Stream WriteStringNullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteStringNullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes(buffer), cancellationToken); @@ -58,6 +61,7 @@ public static Task WriteStringNullableAsync(this Stream stream, string? /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteStringNullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteStringNullableAsync(s, value, cancellationToken)); @@ -76,6 +80,7 @@ public static Stream WriteString16(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) => WriteStringAsync(stream, value, lenShift: 1, (buffer) => value.GetBytes16(buffer), cancellationToken); @@ -85,6 +90,7 @@ public static Task WriteString16Async(this Stream stream, string value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString16Async(this Task stream, string value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString16Async(s, value, cancellationToken)); @@ -103,6 +109,7 @@ public static Stream WriteString16Nullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString16NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) => WriteNullableStringAsync(stream, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer), cancellationToken); @@ -112,6 +119,7 @@ public static Task WriteString16NullableAsync(this Stream stream, string /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString16NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString16NullableAsync(s, value, cancellationToken)); @@ -130,6 +138,7 @@ public static Stream WriteString32(this Stream stream, string value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes32(buffer), cancellationToken); @@ -139,6 +148,7 @@ public static Task WriteString32Async(this Stream stream, string value, /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString32Async(this Task stream, string value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString32Async(s, value, cancellationToken)); @@ -157,6 +167,7 @@ public static Stream WriteString32Nullable(this Stream stream, string? value) /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer), cancellationToken); @@ -166,6 +177,7 @@ public static Task WriteString32NullableAsync(this Stream stream, string /// Stream /// Value to write /// Cancellation token + /// Stream public static Task WriteString32NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString32NullableAsync(s, value, cancellationToken)); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs index f7813ff..07c311d 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs @@ -108,6 +108,7 @@ public static Stream WriteStructNullable(this Stream stream, T? value, bool f /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -139,6 +140,7 @@ public static Task WriteStructAsync(this Stream stream, object value, bo /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructAsync(this Task stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) @@ -152,6 +154,7 @@ public static Task WriteStructAsync(this Task stream, object val /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -184,6 +187,7 @@ public static Task WriteStructAsync(this Stream stream, T value, bool /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructAsync(this Task stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) @@ -197,6 +201,7 @@ public static Task WriteStructAsync(this Task stream, T value /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -216,6 +221,7 @@ public static Task WriteStructNullableAsync( /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructNullableAsync( @@ -234,6 +240,7 @@ public static Task WriteStructNullableAsync( /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -255,6 +262,7 @@ public static Task WriteStructNullableAsync( /// Struct /// Force little endian encoding? /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructNullableAsync( From 278717cdd241927f7a8ecab83708da41a03e45cd Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 14:12:48 +0200 Subject: [PATCH 06/17] Update --- .../StreamExtensions.Write.Basic.cs | 24 +++++++++++++++++-- .../StreamExtensions.Write.Number.cs | 4 ++++ .../StreamExtensions.Write.Object.cs | 2 ++ .../StreamExtensions.Write.Stream.cs | 2 ++ .../StreamExtensions.Write.String.cs | 15 +++++++++++- .../StreamExtensions.Write.cs | 4 ++++ 6 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index 8c7ea7e..b67fa47 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -3,8 +3,6 @@ using System.Text; using wan24.Core; -//TODO Check all fluent API methods are inlined - namespace wan24.StreamSerializerExtensions { // Basic types @@ -186,6 +184,8 @@ public static Task WriteNullableAsync(this Stream stream, sbyte? value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, sbyte? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -263,6 +263,8 @@ public static Task WriteNullableAsync(this Stream stream, byte? value, C /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, byte? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -331,6 +333,8 @@ public static Task WriteNullableAsync(this Stream stream, short? value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, short? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -399,6 +403,8 @@ public static Task WriteNullableAsync(this Stream stream, ushort? value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, ushort? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -467,6 +473,8 @@ public static Task WriteNullableAsync(this Stream stream, int? value, Ca /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, int? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -535,6 +543,8 @@ public static Task WriteNullableAsync(this Stream stream, uint? value, C /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, uint? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -603,6 +613,8 @@ public static Task WriteNullableAsync(this Stream stream, long? value, C /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, long? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -671,6 +683,8 @@ public static Task WriteNullableAsync(this Stream stream, ulong? value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, ulong? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -739,6 +753,8 @@ public static Task WriteNullableAsync(this Stream stream, float? value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, float? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -807,6 +823,8 @@ public static Task WriteNullableAsync(this Stream stream, double? value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, double? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); @@ -875,6 +893,8 @@ public static Task WriteNullableAsync(this Stream stream, decimal? value /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, decimal? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs index f1fce9f..2f39115 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -100,6 +100,8 @@ public static Task WriteNumberAsync(this Stream stream, T value, Canc /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); @@ -120,6 +122,8 @@ public static Task WriteNumberAsync(this Stream stream, object value, Ca /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberAsync(this Task stream, object value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index 6aafccb..763d499 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -175,6 +175,8 @@ public static async Task WriteAnyObjectAsync(this Stream stream, object /// Object /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyObjectAsync(this Task stream, object obj, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteAnyObjectAsync(s, obj, cancellationToken)); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs index 17e4698..d886a9b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -111,6 +111,8 @@ public static Task WriteStreamAsync( /// Chunk length in bytes /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStreamAsync( this Task stream, Stream source, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index 7d2cba3..523b52b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -1,4 +1,5 @@ -using System.Runtime.CompilerServices; +using System.Runtime; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; @@ -33,6 +34,8 @@ public static Task WriteStringAsync(this Stream stream, string value, Ca /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStringAsync(this Task stream, string value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteStringAsync(s, value, cancellationToken)); @@ -62,6 +65,8 @@ public static Task WriteStringNullableAsync(this Stream stream, string? /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStringNullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteStringNullableAsync(s, value, cancellationToken)); @@ -91,6 +96,8 @@ public static Task WriteString16Async(this Stream stream, string value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString16Async(this Task stream, string value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString16Async(s, value, cancellationToken)); @@ -120,6 +127,8 @@ public static Task WriteString16NullableAsync(this Stream stream, string /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString16NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString16NullableAsync(s, value, cancellationToken)); @@ -149,6 +158,8 @@ public static Task WriteString32Async(this Stream stream, string value, /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString32Async(this Task stream, string value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString32Async(s, value, cancellationToken)); @@ -178,6 +189,8 @@ public static Task WriteString32NullableAsync(this Stream stream, string /// Value to write /// Cancellation token /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString32NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) => FluentAsync(stream, (s) => WriteString32NullableAsync(s, value, cancellationToken)); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index a3b0cbe..97c4d12 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -298,6 +298,10 @@ public static async Task WriteSerializedDataAsync( /// Stream task /// Action to execute /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif public static async Task FluentAsync(Task task, Func> action) => await action(await task.DynamicContext()).DynamicContext(); } From bc3e407ab0bf605d038a699dd51469901ff63000 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 16:30:48 +0200 Subject: [PATCH 07/17] Update + Added `StreamExtensions.WrifeIf(Async)` for conditional writing --- ...SerializerExtensions.StreamExtensions.html | 500 ++++++++++++------ ...mSerializer.AsyncDeserialize_Delegate.html | 2 +- ...eamSerializer.AsyncSerialize_Delegate.html | 2 +- ...StreamSerializer.Deserialize_Delegate.html | 2 +- ...alizer.FindAsyncDeserializer_Delegate.html | 2 +- ...rializer.FindAsyncSerializer_Delegate.html | 2 +- ...ializer.FindSyncDeserializer_Delegate.html | 2 +- ...erializer.FindSyncSerializer_Delegate.html | 2 +- ...nsions.StreamSerializer.Init_Delegate.html | 2 +- ...amSerializer.InstanceFactory_Delegate.html | 2 +- ...ns.StreamSerializer.LoadType_Delegate.html | 2 +- ...s.StreamSerializer.Serialize_Delegate.html | 2 +- ...SerializerExtensions.StreamSerializer.html | 52 +- ...zerExtensions.StreamSerializerAdapter.html | 12 +- docs/manifest.json | 28 +- docs/xrefmap.yml | 57 +- src/Stream-Serializer-Extensions Docs/log.txt | 4 + .../StreamExtensions.Write.Any.cs | 4 +- .../StreamExtensions.Write.Array.cs | 10 +- .../StreamExtensions.Write.Basic.cs | 50 +- .../StreamExtensions.Write.Bytes.cs | 6 +- .../StreamExtensions.Write.Dictionary.cs | 4 +- .../StreamExtensions.Write.Enum.cs | 8 +- .../StreamExtensions.Write.List.cs | 4 +- .../StreamExtensions.Write.Number.cs | 8 +- .../StreamExtensions.Write.Object.cs | 8 +- .../StreamExtensions.Write.Serialized.cs | 12 +- .../StreamExtensions.Write.Stream.cs | 4 +- .../StreamExtensions.Write.String.cs | 12 +- .../StreamExtensions.Write.Struct.cs | 8 +- .../StreamExtensions.Write.cs | 39 +- .../StreamSerializer.cs | 1 + .../StreamSerializerAdapter.cs | 6 +- 33 files changed, 535 insertions(+), 324 deletions(-) diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index 9ac92f0..88b385a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -914,62 +914,6 @@
    Returns
    IAsyncEnumerable<System.String>

    Enumerable

    - - - - - - | - Improve this Doc - - - View Source - - -

    FluentAsync(Task<Stream>, Func<Stream, Task<Stream>>)

    -

    Fluent API action executor

    -
    -
    -
    Declaration
    -
    -
    public static async Task<Stream> FluentAsync(Task<Stream> task, Func<Stream, Task<Stream>> action)
    -
    -
    Parameters
    - - - - - - - - - - - - - - - - - - - - -
    TypeNameDescription
    Task<Stream>task

    Stream task

    -
    Func<Stream, Task<Stream>>action

    Action to execute

    -
    -
    Returns
    - - - - - - - - - - - @@ -12552,7 +12496,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Boolean)

    @@ -12666,7 +12610,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Decimal)

    @@ -12723,7 +12667,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Double)

    @@ -12837,7 +12781,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int32)

    @@ -12894,7 +12838,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Int64)

    @@ -12951,7 +12895,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, SByte)

    @@ -13008,7 +12952,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, Single)

    @@ -13065,7 +13009,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt16)

    @@ -13122,7 +13066,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt32)

    @@ -13179,7 +13123,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Write(Stream, UInt64)

    @@ -13729,7 +13673,8 @@

    Declaration
    -
    public static Task<Stream> WriteAnyObjectAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteAnyObjectAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    Parameters
    TypeDescription
    Task<Stream>

    Stream

    @@ -13782,7 +13727,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullable(Stream, Object)

    @@ -13839,7 +13784,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullableAsync(Stream, Object, CancellationToken)

    @@ -13902,7 +13847,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyObjectNullableAsync(Task<Stream>, Object, CancellationToken)

    @@ -14331,7 +14276,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Boolean, CancellationToken)

    @@ -14394,7 +14339,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Byte, CancellationToken)

    @@ -14457,7 +14402,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Decimal, CancellationToken)

    @@ -14520,7 +14465,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Double, CancellationToken)

    @@ -14646,7 +14591,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int32, CancellationToken)

    @@ -14709,7 +14654,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Int64, CancellationToken)

    @@ -14772,7 +14717,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, SByte, CancellationToken)

    @@ -14835,7 +14780,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, Single, CancellationToken)

    @@ -14898,7 +14843,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt16, CancellationToken)

    @@ -14961,7 +14906,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt32, CancellationToken)

    @@ -15024,7 +14969,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Stream, UInt64, CancellationToken)

    @@ -15087,7 +15032,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Boolean, CancellationToken)

    @@ -15150,7 +15095,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Byte, CancellationToken)

    @@ -15213,7 +15158,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Decimal, CancellationToken)

    @@ -15276,7 +15221,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Double, CancellationToken)

    @@ -15402,7 +15347,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Int32, CancellationToken)

    @@ -15465,7 +15410,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Int64, CancellationToken)

    @@ -15528,7 +15473,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, SByte, CancellationToken)

    @@ -15591,7 +15536,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, Single, CancellationToken)

    @@ -15654,7 +15599,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, UInt16, CancellationToken)

    @@ -15717,7 +15662,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, UInt32, CancellationToken)

    @@ -15780,7 +15725,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAsync(Task<Stream>, UInt64, CancellationToken)

    @@ -18228,6 +18173,195 @@
    Type Parameters
    + + +
    T

    Element type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteIf(Stream, Boolean, Func<Stream, Stream>)

    +

    Write if a condition is true

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteIf(this Stream stream, bool condition, Func<Stream, Stream> action)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Booleancondition

    Condition

    +
    Func<Stream, Stream>action

    Write action to execute, if the condition is true

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteIfAsync(Stream, Boolean, Func<Stream, Task<Stream>>)

    +

    Write if a condition is true

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Stream> WriteIfAsync(this Stream stream, bool condition, Func<Stream, Task<Stream>> action)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    System.Booleancondition

    Condition

    +
    Func<Stream, Task<Stream>>action

    Write action to execute, if the condition is true

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteIfAsync(Task<Stream>, Boolean, Func<Stream, Task<Stream>>)

    +

    Write if a condition is true

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteIfAsync(this Task<Stream> stream, bool condition, Func<Stream, Task<Stream>> action)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Booleancondition

    Condition

    +
    Func<Stream, Task<Stream>>action

    Write action to execute, if the condition is true

    +
    +
    Returns
    + + + + + + + + + + + @@ -18919,7 +19053,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Boolean>)

    @@ -18976,7 +19110,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Byte>)

    @@ -19032,7 +19166,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Decimal>)

    @@ -19088,7 +19222,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Double>)

    @@ -19200,7 +19334,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Int32>)

    @@ -19256,7 +19390,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Int64>)

    @@ -19312,7 +19446,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<SByte>)

    @@ -19368,7 +19502,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<Single>)

    @@ -19424,7 +19558,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<UInt16>)

    @@ -19480,7 +19614,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<UInt32>)

    @@ -19536,7 +19670,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullable(Stream, Nullable<UInt64>)

    @@ -19592,7 +19726,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

    @@ -19655,7 +19789,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

    @@ -19717,7 +19851,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

    @@ -19779,7 +19913,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

    @@ -19903,7 +20037,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    @@ -19965,7 +20099,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

    @@ -20027,7 +20161,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

    @@ -20089,7 +20223,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

    @@ -20151,7 +20285,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

    @@ -20213,7 +20347,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

    @@ -20275,7 +20409,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

    @@ -20337,7 +20471,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Boolean>, CancellationToken)

    @@ -20400,7 +20534,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Byte>, CancellationToken)

    @@ -20409,7 +20543,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, byte? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, byte? value, CancellationToken cancellationToken = null)
    Parameters
    TypeDescription
    Task<Stream>

    Stream

    @@ -20462,7 +20597,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Decimal>, CancellationToken)

    @@ -20471,7 +20606,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, decimal? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, decimal? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20524,7 +20660,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Double>, CancellationToken)

    @@ -20533,7 +20669,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, double? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, double? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20595,7 +20732,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, short? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, short? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20648,7 +20786,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Int32>, CancellationToken)

    @@ -20657,7 +20795,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, int? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, int? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20710,7 +20849,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Int64>, CancellationToken)

    @@ -20719,7 +20858,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, long? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, long? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20772,7 +20912,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<SByte>, CancellationToken)

    @@ -20781,7 +20921,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, sbyte? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, sbyte? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20834,7 +20975,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<Single>, CancellationToken)

    @@ -20843,7 +20984,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, float? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, float? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20896,7 +21038,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<UInt16>, CancellationToken)

    @@ -20905,7 +21047,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ushort? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ushort? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -20958,7 +21101,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<UInt32>, CancellationToken)

    @@ -20967,7 +21110,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, uint? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, uint? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -21020,7 +21164,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNullableAsync(Task<Stream>, Nullable<UInt64>, CancellationToken)

    @@ -21029,7 +21173,8 @@

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ulong? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ulong? value, CancellationToken cancellationToken = null)
    Parameters
    @@ -21463,7 +21608,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberAsync(Stream, Object, CancellationToken)

    @@ -21525,7 +21670,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberAsync(Task<Stream>, Object, CancellationToken)

    @@ -21534,7 +21679,8 @@

    Declaration
    -
    public static Task<Stream> WriteNumberAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    Parameters
    @@ -21675,7 +21821,8 @@

    Declaration
    -
    public static Task<Stream> WriteNumberAsync<T>(this Task<Stream> stream, T value, CancellationToken cancellationToken = null)
    +    
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberAsync<T>(this Task<Stream> stream, T value, CancellationToken cancellationToken = null)
         where T : struct, IConvertible
    Parameters
    @@ -21745,7 +21892,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberNullable(Stream, Object)

    @@ -21802,7 +21949,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberNullable<T>(Stream, Nullable<T>)

    @@ -21876,7 +22023,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync(Stream, Object, CancellationToken)

    @@ -21939,7 +22086,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync(Task<Stream>, Object, CancellationToken)

    @@ -22002,7 +22149,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    @@ -22082,7 +22229,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteNumberNullableAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    @@ -24290,7 +24437,8 @@

    Declaration
    -
    public static Task<Stream> WriteStreamAsync(this Task<Stream> stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteStreamAsync(this Task<Stream> stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    Parameters
    @@ -24424,7 +24572,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStreamNullableAsync(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    @@ -24499,7 +24647,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStreamNullableAsync(Task<Stream>, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    @@ -24574,7 +24722,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString(Stream, String)

    @@ -24630,7 +24778,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16(Stream, String)

    @@ -24686,7 +24834,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Async(Stream, String, CancellationToken)

    @@ -24748,7 +24896,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Async(Task<Stream>, String, CancellationToken)

    @@ -24757,7 +24905,8 @@

    Declaration
    -
    public static Task<Stream> WriteString16Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteString16Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -24810,7 +24959,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16Nullable<T>(Stream, String)

    @@ -24881,7 +25030,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteString16NullableAsync(Stream, String, CancellationToken)

    @@ -24943,7 +25092,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString16NullableAsync(Task<Stream>, String, CancellationToken)

    @@ -24952,7 +25101,8 @@

    Declaration
    -
    public static Task<Stream> WriteString16NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteString16NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -25005,7 +25155,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32(Stream, String)

    @@ -25061,7 +25211,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Async(Stream, String, CancellationToken)

    @@ -25123,7 +25273,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Async(Task<Stream>, String, CancellationToken)

    @@ -25132,7 +25282,8 @@

    Declaration
    -
    public static Task<Stream> WriteString32Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteString32Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -25185,7 +25336,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32Nullable(Stream, String)

    @@ -25241,7 +25392,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32NullableAsync(Stream, String, CancellationToken)

    @@ -25303,7 +25454,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteString32NullableAsync(Task<Stream>, String, CancellationToken)

    @@ -25312,7 +25463,8 @@

    Declaration
    -
    public static Task<Stream> WriteString32NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteString32NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -25365,7 +25517,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringAsync(Stream, String, CancellationToken)

    @@ -25427,7 +25579,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringAsync(Task<Stream>, String, CancellationToken)

    @@ -25436,7 +25588,8 @@

    Declaration
    -
    public static Task<Stream> WriteStringAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteStringAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    @@ -25489,7 +25642,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullable(Stream, String)

    @@ -25545,7 +25698,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullableAsync(Stream, String, CancellationToken)

    @@ -25607,7 +25760,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteStringNullableAsync(Task<Stream>, String, CancellationToken)

    @@ -25616,7 +25769,8 @@

    Declaration
    -
    public static Task<Stream> WriteStringNullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteStringNullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    Parameters
    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html index 28962a6..bae28e1 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html @@ -164,7 +164,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html index 785a199..524cb63 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html @@ -151,7 +151,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html index 16fda57..3e2738c 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html @@ -158,7 +158,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html index 9e7ed2d..25329e4 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html index 84a5ea1..c9dee15 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html index 473fe89..c82e20c 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html index b8b9b60..018652b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html index 93c6a88..36f92f8 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html index cc6f0d5..bc7c209 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html @@ -158,7 +158,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html index ac894bc..0a7b82d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html index ede0473..5e44f08 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html @@ -130,7 +130,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html index 7f287b4..8504368 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -118,7 +118,7 @@

    Fields Improve this Doc - View Source + View Source

    AllowedTypes

    Allowed (non-array) types

    @@ -148,7 +148,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncDeserializer

    Deserializer

    @@ -178,7 +178,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncSerializer

    Serializer

    @@ -208,7 +208,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    InstanceFactories

    Type instance factories

    @@ -238,7 +238,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncDeserializer

    Deserializer

    @@ -268,7 +268,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncObject

    An object for thread locking

    @@ -298,7 +298,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncSerializer

    Serializer

    @@ -328,7 +328,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    VERSION

    Version number

    @@ -360,7 +360,7 @@

    Properties Improve this Doc - View Source + View Source

    BufferPool

    @@ -391,7 +391,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Version

    @@ -424,7 +424,7 @@

    Methods Improve this Doc - View Source + View Source

    CreateInstance(out ConstructorInfo, Type, Stream, Nullable<Int32>, ISerializerOptions)

    @@ -498,7 +498,7 @@
    Returns
    Improve this Doc - View Source + View Source

    CreateInstance<T>(out ConstructorInfo, Stream, Nullable<Int32>, ISerializerOptions)

    @@ -583,7 +583,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    FindAsyncDeserializer(Type)

    @@ -633,7 +633,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindAsyncSerializer(Type)

    @@ -683,7 +683,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDelegateType(Type, IEnumerable<Type>)

    @@ -739,7 +739,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDeserializer(Type)

    @@ -789,7 +789,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindSerializer(Type)

    @@ -839,7 +839,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsTypeAllowed(Type)

    @@ -889,7 +889,7 @@
    Returns
    Improve this Doc - View Source + View Source

    LoadType(String)

    @@ -941,7 +941,7 @@

    Events Improve this Doc - View Source + View Source

    OnFindAsyncDeserializer

    Raised when finding a deserializer

    @@ -971,7 +971,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindAsyncSerializer

    Raised when finding a serializer

    @@ -1001,7 +1001,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncDeserializer

    Raised when finding a deserializer

    @@ -1031,7 +1031,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncSerializer

    Raised when finding a serializer

    @@ -1061,7 +1061,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnInit

    Raised on initialization

    @@ -1091,7 +1091,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnLoadType

    Raised on loading a type

    @@ -1127,7 +1127,7 @@
    Event Type
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html index 71ad191..98b36e0 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html @@ -115,10 +115,10 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source

    ReadSerializedObjectVersion(Stream, Int32, Int32)

    @@ -178,10 +178,10 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source

    ReadSerializedObjectVersionAsync(Stream, Int32, Int32, CancellationToken)

    @@ -253,10 +253,10 @@
    Returns
    diff --git a/docs/manifest.json b/docs/manifest.json index 5caea53..ab027f7 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "QB0hiYwIsGMrxqm5FlZC2Aab77NCVgKWgAbDYl70BwE=" + "hash": "bhdyKldMwFHR9nLz25GDReq5VZwrJ1RSFEApIfLnjfw=" } }, "is_incremental": false, @@ -405,7 +405,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html", - "hash": "zO9lY/KRno3Nh4TpBrgvqd5WweZN3h8KpESJ4bNxhmg=" + "hash": "qPZvZ+KgUEbwu0KjIGndhdacxy49P4r92ddI8uuZbho=" } }, "is_incremental": false, @@ -417,7 +417,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html", - "hash": "GYKAMZCQ9Vhehwwz6kJGC+PV26D7WljWn9VEQ9X2J9U=" + "hash": "DGPuBSJQSs4Ul6kVrsC4wboUE5qlAaym7Y86JD+W7X8=" } }, "is_incremental": false, @@ -429,7 +429,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html", - "hash": "3ZvkMA731sGaikL4RUUM6bKG0vtP9NqjDRknomg2Aww=" + "hash": "ySJlnNdPkBn3KeULgNwXcUoElnzPnySx75X4vijltA4=" } }, "is_incremental": false, @@ -441,7 +441,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html", - "hash": "66sEAXLLAldHDPu8IyVEc8tx/aczxvCYilmpsD+7IU8=" + "hash": "k/jY6Kv7RWOK+kRc/Bf4i1B7u+6axa+sJlRedx2dj+o=" } }, "is_incremental": false, @@ -453,7 +453,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html", - "hash": "5LHGIxnKMHzA2x7Zt3huL9EqLZ7kq5szBLQDKSH1xkM=" + "hash": "b9ldd6l1GkS1K7Ayj+EuL9vSStPnJSRG5EQ7a2ac0J8=" } }, "is_incremental": false, @@ -465,7 +465,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html", - "hash": "LzZhrQ+T7xDuPeChLzK1tLtYwzfs5ipSegKnDHID4FE=" + "hash": "Jk6eLPV6bFsdH1vyq8LdH4AjayUanP5kOyVer74E/O0=" } }, "is_incremental": false, @@ -477,7 +477,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html", - "hash": "wHBwftCLQnDOXelEabdiWLVBgP0gTDmxHCTADlWT2O0=" + "hash": "eXGH5yr6pz/oh+Ml3Nk9gXy77Fe1neYGRHCIe2Pe3FQ=" } }, "is_incremental": false, @@ -489,7 +489,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html", - "hash": "R/np5q+A/k4GvOIgzMkmzQ1pQBc2g6jvpymvCUjBSMs=" + "hash": "SqCDBhBSnuATYrLJ0Y52N9wTrQm73YkOjZgeFekNhbo=" } }, "is_incremental": false, @@ -501,7 +501,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html", - "hash": "cfAlpwTTWiPePl+7HHJX6Zd+EVDBtRDOWhVIkoWfXnI=" + "hash": "ODhPTEYas6Q14p8YmO9hljsZQ7jhhCKqxii3DdOrHZY=" } }, "is_incremental": false, @@ -513,7 +513,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html", - "hash": "DCPKZCxwDhDmYJ/Ur2QaMxmbdKsUwAxfTf+afSqpFXY=" + "hash": "gjQidERgHEq7gCHhxEVMc8uUl2QEVnkbOcR6n8xe4uw=" } }, "is_incremental": false, @@ -525,7 +525,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html", - "hash": "l9ZnWLUNsCGv3yKm0owT3R1F3yu8eAu8QVF13AsxTII=" + "hash": "xgC99PXwp0UMVBYj9mVa/vl0ri0DP3Fhn2lVQbhCplU=" } }, "is_incremental": false, @@ -537,7 +537,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "9kOZFwDra/gEyg/TMDxU8nU5Z8hpk3LSo230zchvmtI=" + "hash": "sEFejL+leVdNnETsolnXo0ULT4L9/Gc/dxaSfdP7mGc=" } }, "is_incremental": false, @@ -549,7 +549,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html", - "hash": "V0Fn2XZxU7KbmU3j1TbVpn/FQ11RmJ7Gf90JMqdieHs=" + "hash": "D0yceJlQx8x8PCH0lfTBaDqQn6T4zQMozK2WQz8kw6Q=" } }, "is_incremental": false, diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index 8596daa..342480a 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -2750,22 +2750,6 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync nameWithType: StreamExtensions.EnumerateStringAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task{Stream},Func{Stream,Task{Stream}}) - name: FluentAsync(Task, Func>) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_FluentAsync_Task_Stream__Func_Stream_Task_Stream___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task{Stream},Func{Stream,Task{Stream}}) - name.vb: FluentAsync(Task(Of Stream), Func(Of Stream, Task(Of Stream))) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task, Func>) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync(Task(Of Stream), Func(Of Stream, Task(Of Stream))) - nameWithType: StreamExtensions.FluentAsync(Task, Func>) - nameWithType.vb: StreamExtensions.FluentAsync(Task(Of Stream), Func(Of Stream, Task(Of Stream))) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync* - name: FluentAsync - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_FluentAsync_ - commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync - isSpec: "True" - fullName: wan24.StreamSerializerExtensions.StreamExtensions.FluentAsync - nameWithType: StreamExtensions.FluentAsync - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) name: ReadAny(Stream, Nullable, ISerializerOptions) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAny_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ @@ -5854,6 +5838,47 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, ReadOnlyMemory, CancellationToken) nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream,System.Boolean,Func{Stream,Stream}) + name: WriteIf(Stream, Boolean, Func) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIf_Stream_System_Boolean_Func_Stream_Stream__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream,System.Boolean,Func{Stream,Stream}) + name.vb: WriteIf(Stream, Boolean, Func(Of Stream, Stream)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream, System.Boolean, Func) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream, System.Boolean, Func(Of Stream, Stream)) + nameWithType: StreamExtensions.WriteIf(Stream, Boolean, Func) + nameWithType.vb: StreamExtensions.WriteIf(Stream, Boolean, Func(Of Stream, Stream)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf* + name: WriteIf + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIf_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIf + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf + nameWithType: StreamExtensions.WriteIf +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream,System.Boolean,Func{Stream,Task{Stream}}) + name: WriteIfAsync(Stream, Boolean, Func>) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_Stream_System_Boolean_Func_Stream_Task_Stream___ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream,System.Boolean,Func{Stream,Task{Stream}}) + name.vb: WriteIfAsync(Stream, Boolean, Func(Of Stream, Task(Of Stream))) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream, System.Boolean, Func>) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream, System.Boolean, Func(Of Stream, Task(Of Stream))) + nameWithType: StreamExtensions.WriteIfAsync(Stream, Boolean, Func>) + nameWithType.vb: StreamExtensions.WriteIfAsync(Stream, Boolean, Func(Of Stream, Task(Of Stream))) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task{Stream},System.Boolean,Func{Stream,Task{Stream}}) + name: WriteIfAsync(Task, Boolean, Func>) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_Task_Stream__System_Boolean_Func_Stream_Task_Stream___ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task{Stream},System.Boolean,Func{Stream,Task{Stream}}) + name.vb: WriteIfAsync(Task(Of Stream), Boolean, Func(Of Stream, Task(Of Stream))) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task, System.Boolean, Func>) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task(Of Stream), System.Boolean, Func(Of Stream, Task(Of Stream))) + nameWithType: StreamExtensions.WriteIfAsync(Task, Boolean, Func>) + nameWithType.vb: StreamExtensions.WriteIfAsync(Task(Of Stream), Boolean, Func(Of Stream, Task(Of Stream))) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync* + name: WriteIfAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync + nameWithType: StreamExtensions.WriteIfAsync - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull* name: WriteIfNotNull href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull_ diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index ccd7e1f..e877a81 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -59,3 +59,7 @@ {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:44:21.2547443Z","message_severity":"warning","correlation_id":"6F515D44-206C-4AF6-9F67-CB40FB57CEB1.1.1.13"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:58:18.7332379Z","message_severity":"warning","correlation_id":"B1751265-F1C7-40E3-866A-4598735FCFC9.1.1.12"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T11:58:18.7392339Z","message_severity":"warning","correlation_id":"B1751265-F1C7-40E3-866A-4598735FCFC9.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T12:19:36.6990323Z","message_severity":"warning","correlation_id":"665B4E2D-D39D-4DCB-A2C9-61D2F9E193B1.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T12:19:36.7110627Z","message_severity":"warning","correlation_id":"665B4E2D-D39D-4DCB-A2C9-61D2F9E193B1.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T14:28:59.9695382Z","message_severity":"warning","correlation_id":"7C19EC07-93F2-43B3-AFA1-D9226DD93BCE.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T14:28:59.9755385Z","message_severity":"warning","correlation_id":"7C19EC07-93F2-43B3-AFA1-D9226DD93BCE.1.1.13"} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index 6106059..ec2de0a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -72,7 +72,7 @@ public static async Task WriteAnyAsync(this Stream stream, object obj, C [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyAsync(this Task stream, object obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAnyAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyAsync); /// /// Write any object @@ -131,6 +131,6 @@ public static async Task WriteAnyNullableAsync(this Stream stream, objec [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAnyNullableAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs index e2d53ba..0d9a7d5 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs @@ -56,7 +56,7 @@ public static Task WriteArrayAsync(this Stream stream, Array value, Canc [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteArrayAsync(this Task stream, Array value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteArrayAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteArrayAsync); /// /// Write @@ -95,7 +95,7 @@ public static Task WriteArrayNullableAsync(this Stream stream, Array? va [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteArrayNullableAsync(this Task stream, Array? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteArrayNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteArrayNullableAsync); /// /// Write @@ -179,7 +179,7 @@ public static Task WriteFixedArrayAsync(this Stream stream, Memory [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteFixedArrayAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteFixedArrayAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteFixedArrayAsync); /// /// Write @@ -211,7 +211,7 @@ public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyM [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteFixedArrayAsync(this Task stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteFixedArrayAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteFixedArrayAsync); /// /// Write @@ -242,6 +242,6 @@ public static Task WriteFixedArrayAsync(this Stream stream, Array value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteFixedArrayAsync(this Task stream, Array value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteFixedArrayAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteFixedArrayAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index b67fa47..bbe7f9e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -53,7 +53,7 @@ public static async Task WriteAsync(this Stream stream, bool value, Canc [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, bool value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -122,7 +122,7 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, C [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, bool? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -156,7 +156,7 @@ public static Task WriteAsync(this Stream stream, sbyte value, Cancellat [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, sbyte value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -187,7 +187,7 @@ public static Task WriteNullableAsync(this Stream stream, sbyte? value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, sbyte? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -213,13 +213,11 @@ public static Stream Write(this Stream stream, byte value) /// Value to write /// Cancellation token /// Stream -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 { await Task.Yield(); return Write(stream, value); @@ -235,7 +233,7 @@ public static async Task WriteAsync(this Stream stream, byte value, Canc [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, byte value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -266,7 +264,7 @@ public static Task WriteNullableAsync(this Stream stream, byte? value, C [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, byte? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -305,7 +303,7 @@ public static Task WriteAsync(this Stream stream, short value, Cancellat [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, short value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -336,7 +334,7 @@ public static Task WriteNullableAsync(this Stream stream, short? value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, short? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -375,7 +373,7 @@ public static Task WriteAsync(this Stream stream, ushort value, Cancella [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, ushort value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -406,7 +404,7 @@ public static Task WriteNullableAsync(this Stream stream, ushort? value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, ushort? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -445,7 +443,7 @@ public static Task WriteAsync(this Stream stream, int value, Cancellatio [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, int value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -476,7 +474,7 @@ public static Task WriteNullableAsync(this Stream stream, int? value, Ca [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, int? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -515,7 +513,7 @@ public static Task WriteAsync(this Stream stream, uint value, Cancellati [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, uint value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -546,7 +544,7 @@ public static Task WriteNullableAsync(this Stream stream, uint? value, C [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, uint? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -585,7 +583,7 @@ public static Task WriteAsync(this Stream stream, long value, Cancellati [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, long value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -616,7 +614,7 @@ public static Task WriteNullableAsync(this Stream stream, long? value, C [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, long? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -655,7 +653,7 @@ public static Task WriteAsync(this Stream stream, ulong value, Cancellat [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, ulong value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -686,7 +684,7 @@ public static Task WriteNullableAsync(this Stream stream, ulong? value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, ulong? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -725,7 +723,7 @@ public static Task WriteAsync(this Stream stream, float value, Cancellat [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, float value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -756,7 +754,7 @@ public static Task WriteNullableAsync(this Stream stream, float? value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, float? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -795,7 +793,7 @@ public static Task WriteAsync(this Stream stream, double value, Cancella [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, double value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -826,7 +824,7 @@ public static Task WriteNullableAsync(this Stream stream, double? value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, double? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write @@ -865,7 +863,7 @@ public static Task WriteAsync(this Stream stream, decimal value, Cancell [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAsync(this Task stream, decimal value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); /// /// Write @@ -896,7 +894,7 @@ public static Task WriteNullableAsync(this Stream stream, decimal? value [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNullableAsync(this Task stream, decimal? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); /// /// Write a nullable numeric value diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs index 2157992..9c1bf56 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs @@ -67,7 +67,7 @@ public static Task WriteBytesAsync(this Stream stream, Memory valu [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteBytesAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteBytesAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteBytesAsync); /// /// Write @@ -98,7 +98,7 @@ public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory WriteBytesAsync(this Task stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteBytesAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteBytesAsync); /// /// Write @@ -142,6 +142,6 @@ public static Task WriteBytesNullableAsync(this Stream stream, byte[]? v [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteBytesNullableAsync(this Task stream, byte[]? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteBytesNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteBytesNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index 18e8683..c3f742f 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -63,7 +63,7 @@ public static async Task WriteDictAsync(this Stream stream, IDictionary [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteDictAsync(this Task stream, IDictionary value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteDictAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteDictAsync); /// /// Write @@ -118,6 +118,6 @@ public static Task WriteDictNullableAsync(this Stream stream, IDictionar [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteDictNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteDictNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index 57fca8b..6a5ace3 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -78,7 +78,7 @@ public static async Task WriteEnumAsync(this Stream stream, T value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteEnumAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum - => FluentAsync(stream, (s) => WriteEnumAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumAsync); /// /// Write @@ -116,7 +116,7 @@ public static async Task WriteEnumAsync(this Stream stream, object value [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteEnumAsync(this Task stream, object value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteEnumAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumAsync); /// /// Write @@ -173,7 +173,7 @@ public static Task WriteEnumNullableAsync(this Stream stream, T? valu [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteEnumNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum - => FluentAsync(stream, (s) => WriteEnumNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumNullableAsync); /// /// Write @@ -201,6 +201,6 @@ public static Task WriteEnumNullableAsync(this Stream stream, object? va [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteEnumNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteEnumNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index d0b1a43..23b717e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -55,7 +55,7 @@ public static async Task WriteListAsync(this Stream stream, IList value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteListAsync(this Task stream, IList value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteListAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteListAsync); /// /// Write @@ -102,6 +102,6 @@ public static Task WriteListNullableAsync(this Stream stream, IList? val [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteListNullableAsync(this Task stream, IList? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteListNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteListNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs index 2f39115..6823a07 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -103,7 +103,7 @@ public static Task WriteNumberAsync(this Stream stream, T value, Canc [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible - => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberAsync); /// /// Write @@ -125,7 +125,7 @@ public static Task WriteNumberAsync(this Stream stream, object value, Ca [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberAsync(this Task stream, object value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNumberAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberAsync); /// /// Write @@ -241,7 +241,7 @@ public static Task WriteNumberNullableAsync(this Stream stream, T? va [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) where T : struct, IConvertible - => FluentAsync(stream, (s) => WriteNumberNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberNullableAsync); /// /// Write @@ -269,6 +269,6 @@ public static Task WriteNumberNullableAsync(this Stream stream, object? [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteNumberNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteNumberNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index 763d499..b477301 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -64,7 +64,7 @@ public static async Task WriteObjectAsync(this Stream stream, object obj [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteObjectAsync(this Task stream, object obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteObjectAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteObjectAsync); /// /// Write @@ -103,7 +103,7 @@ public static Task WriteObjectNullableAsync(this Stream stream, object? [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteObjectNullableAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteObjectNullableAsync); /// /// Write any object @@ -178,7 +178,7 @@ public static async Task WriteAnyObjectAsync(this Stream stream, object [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyObjectAsync(this Task stream, object obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAnyObjectAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyObjectAsync); /// /// Write any object @@ -217,6 +217,6 @@ public static Task WriteAnyObjectNullableAsync(this Stream stream, objec [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteAnyObjectNullableAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyObjectNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index cdc75e0..1cce478 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -90,7 +90,7 @@ public static Task WriteSerializedAsync(this Stream stream, IStreamSeria [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedAsync(this Task stream, IStreamSerializer obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteSerializedAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedAsync); /// /// Write @@ -122,7 +122,7 @@ public static Task WriteSerializedAsync(this Stream stream, T obj, Ca [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedAsync(this Task stream, T obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer - => FluentAsync(stream, (s) => WriteSerializedAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedAsync); /// /// Write @@ -154,7 +154,7 @@ public static Task WriteSerializedStructAsync(this Stream stream, T o [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedStructAsync(this Task stream, T obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer - => FluentAsync(stream, (s) => WriteSerializedStructAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedStructAsync); /// /// Write @@ -221,7 +221,7 @@ public static Task WriteSerializedNullableAsync(this Stream stream, IStr [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedNullableAsync(this Task stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteSerializedNullableAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedNullableAsync); /// /// Write @@ -250,7 +250,7 @@ public static Task WriteSerializedNullableAsync(this Stream stream, T [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedNullableAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer - => FluentAsync(stream, (s) => WriteSerializedNullableAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedNullableAsync); /// /// Write @@ -280,6 +280,6 @@ public static Task WriteSerializedNullableStructAsync(this Stream str [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializedNullableStructAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer - => FluentAsync(stream, (s) => WriteSerializedNullableStructAsync(s, obj, cancellationToken)); + => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedNullableStructAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs index d886a9b..ed6c9fc 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -120,7 +120,7 @@ public static Task WriteStreamAsync( int? chunkLength = null, CancellationToken cancellationToken = default ) - => FluentAsync(stream, (s) => WriteStreamAsync(s, source, pool, chunkLength, cancellationToken)); + => AsyncHelper.FluentAsync(stream, source, pool, chunkLength, cancellationToken, WriteStreamAsync); /// /// Write a stream @@ -164,6 +164,6 @@ public static Task WriteStreamNullableAsync( int? chunkLength = null, CancellationToken cancellationToken = default ) - => FluentAsync(stream, (s) => WriteStreamNullableAsync(s, source, pool, chunkLength, cancellationToken)); + => AsyncHelper.FluentAsync(stream, source, pool, chunkLength, cancellationToken, WriteStreamNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index 523b52b..03cdfb5 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -37,7 +37,7 @@ public static Task WriteStringAsync(this Stream stream, string value, Ca [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStringAsync(this Task stream, string value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteStringAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteStringAsync); /// /// Write @@ -68,7 +68,7 @@ public static Task WriteStringNullableAsync(this Stream stream, string? [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStringNullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteStringNullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteStringNullableAsync); /// /// Write UTF-16 (little endian) string @@ -99,7 +99,7 @@ public static Task WriteString16Async(this Stream stream, string value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString16Async(this Task stream, string value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteString16Async(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString16Async); /// /// Write UTF-16 (little endian) string @@ -130,7 +130,7 @@ public static Task WriteString16NullableAsync(this Stream stream, string [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString16NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteString16NullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString16NullableAsync); /// /// Write UTF-32 (little endian) string @@ -161,7 +161,7 @@ public static Task WriteString32Async(this Stream stream, string value, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString32Async(this Task stream, string value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteString32Async(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString32Async); /// /// Write UTF-32 (little endian) string @@ -192,7 +192,7 @@ public static Task WriteString32NullableAsync(this Stream stream, string [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteString32NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteString32NullableAsync(s, value, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString32NullableAsync); /// /// Write a string diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs index 07c311d..758be72 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs @@ -144,7 +144,7 @@ public static Task WriteStructAsync(this Stream stream, object value, bo [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructAsync(this Task stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteStructAsync(s, value, forceLittleEndian, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructAsync); /// /// Write a struct @@ -192,7 +192,7 @@ public static Task WriteStructAsync(this Stream stream, T value, bool [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructAsync(this Task stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) where T : struct - => FluentAsync(stream, (s) => WriteStructAsync(s, value, forceLittleEndian, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructAsync); /// /// Write a struct @@ -230,7 +230,7 @@ public static Task WriteStructNullableAsync( bool forceLittleEndian = true, CancellationToken cancellationToken = default ) - => FluentAsync(stream, (s) => WriteStructNullableAsync(s, value, forceLittleEndian, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructNullableAsync); /// /// Write a struct @@ -272,7 +272,7 @@ public static Task WriteStructNullableAsync( CancellationToken cancellationToken = default ) where T : struct - => FluentAsync(stream, (s) => WriteStructNullableAsync(s, value, forceLittleEndian, cancellationToken)); + => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructNullableAsync); /// /// Convert the endianess of structure fields diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index 97c4d12..00344c2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -85,7 +85,7 @@ public static async Task WriteSerializerVersionAsync(this Stream stream, [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteSerializerVersionAsync(this Task stream, CancellationToken cancellationToken = default) - => FluentAsync(stream, (s) => WriteSerializerVersionAsync(s, cancellationToken)); + => AsyncHelper.FluentAsync(stream, cancellationToken, WriteSerializerVersionAsync); /// /// Write a boolean flag if an object is not @@ -293,16 +293,43 @@ public static async Task WriteSerializedDataAsync( }); /// - /// Fluent API action executor + /// Write if a condition is /// - /// Stream task - /// Action to execute + /// Stream + /// Condition + /// Write action to execute, if the condition is /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task FluentAsync(Task task, Func> action) - => await action(await task.DynamicContext()).DynamicContext(); + public static Stream WriteIf(this Stream stream, bool condition, Func action) + => condition ? action(stream) : stream; + + /// + /// Write if a condition is + /// + /// Stream + /// Condition + /// Write action to execute, if the condition is + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteIfAsync(this Stream stream, bool condition, Func> action) + => condition ? await action(stream).DynamicContext() : stream; + + /// + /// Write if a condition is + /// + /// Stream + /// Condition + /// Write action to execute, if the condition is + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteIfAsync(this Task stream, bool condition, Func> action) + => AsyncHelper.FluentAsync(stream, async (s) => condition ? await action(s).DynamicContext() : s); } } diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index eb002bb..97b4543 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -7,6 +7,7 @@ using wan24.Core; //TODO char (de)serializer +//TODO Use ArgumentValidationHelper methods namespace wan24.StreamSerializerExtensions { diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs b/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs index 68c5aff..72895c4 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs @@ -19,7 +19,8 @@ public static class StreamSerializerAdapter public static int ReadSerializedObjectVersion(Stream stream, int serializerVersion, int objectVersion) { int res = stream.ReadNumber(serializerVersion); - if (res > objectVersion) throw new SerializerException($"Unsupported object version {res} (max. supported version is {objectVersion})"); + if (res > objectVersion) + throw new SerializerException($"Unsupported object version {res} (max. supported version is {objectVersion})", new InvalidDataException()); return res; } @@ -35,7 +36,8 @@ public static int ReadSerializedObjectVersion(Stream stream, int serializerVersi public static async Task ReadSerializedObjectVersionAsync(Stream stream, int serializerVersion, int objectVersion, CancellationToken cancellationToken = default) { int res = await stream.ReadNumberAsync(serializerVersion, cancellationToken: cancellationToken).DynamicContext(); - if (res > objectVersion) throw new SerializerException($"Unsupported object version {res} (max. supported version is {objectVersion})"); + if (res > objectVersion) + throw new SerializerException($"Unsupported object version {res} (max. supported version is {objectVersion})", new InvalidDataException()); return res; } } From db09608f64b8a8c550ab3dba18282bb14aba0908 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 18:40:49 +0200 Subject: [PATCH 08/17] Update --- ...SerializerExtensions.SerializerHelper.html | 8 +- ...SerializerExtensions.StreamExtensions.html | 152 +++++++++--------- ...mSerializer.AsyncDeserialize_Delegate.html | 2 +- ...eamSerializer.AsyncSerialize_Delegate.html | 2 +- ...StreamSerializer.Deserialize_Delegate.html | 2 +- ...alizer.FindAsyncDeserializer_Delegate.html | 2 +- ...rializer.FindAsyncSerializer_Delegate.html | 2 +- ...ializer.FindSyncDeserializer_Delegate.html | 2 +- ...erializer.FindSyncSerializer_Delegate.html | 2 +- ...nsions.StreamSerializer.Init_Delegate.html | 2 +- ...amSerializer.InstanceFactory_Delegate.html | 2 +- ...ns.StreamSerializer.LoadType_Delegate.html | 2 +- ...s.StreamSerializer.Serialize_Delegate.html | 2 +- ...SerializerExtensions.StreamSerializer.html | 52 +++--- docs/manifest.json | 28 ++-- src/Stream-Serializer-Extensions Docs/log.txt | 2 + .../StreamExtensions_Tests.String.cs | 9 +- .../AutoStreamSerializerConfig.cs | 2 +- .../Enumerator/StreamAsyncEnumeratorBase.cs | 4 +- .../Enumerator/StreamEnumeratorBase.cs | 4 +- .../SerializerHelper.cs | 6 +- .../StreamExtensions.Read.Any.cs | 20 +-- .../StreamExtensions.Read.Array.cs | 12 +- .../StreamExtensions.Read.Basic.cs | 10 +- .../StreamExtensions.Read.Bytes.cs | 4 +- .../StreamExtensions.Read.Dictionary.cs | 16 +- .../StreamExtensions.Read.Enum.cs | 8 +- .../StreamExtensions.Read.List.cs | 16 +- .../StreamExtensions.Read.Number.cs | 12 +- .../StreamExtensions.Read.Serialized.cs | 2 - .../StreamExtensions.Read.Stream.cs | 20 +-- .../StreamExtensions.Read.String.cs | 8 +- .../StreamExtensions.Write.Enum.cs | 4 +- .../StreamExtensions.Write.Serialized.cs | 2 - .../StreamExtensions.Write.Stream.cs | 4 +- .../StreamExtensions.Write.Struct.cs | 10 +- .../StreamSerializer.cs | 7 +- .../StreamSerializerAttribute.cs | 10 +- 38 files changed, 221 insertions(+), 233 deletions(-) diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html index fe9aa7e..4693e38 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -311,7 +311,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -568,7 +568,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -637,7 +637,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -961,7 +961,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsSerializerConstructor(ConstructorInfo, Boolean)

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index 88b385a..990ab46 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -2515,7 +2515,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadBool(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -2577,7 +2577,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBoolAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -2645,7 +2645,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBoolNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -2708,7 +2708,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadBoolNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -3113,7 +3113,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimal(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -3175,7 +3175,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimalAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -3243,7 +3243,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimalNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -3305,7 +3305,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDecimalNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4201,7 +4201,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadDouble(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4263,7 +4263,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDoubleAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -4331,7 +4331,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDoubleNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -4393,7 +4393,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadDoubleNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -5573,7 +5573,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadFloat(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -5635,7 +5635,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadFloatAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -5703,7 +5703,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadFloatNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -5765,7 +5765,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadFloatNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -5833,7 +5833,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -5895,7 +5895,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -5963,7 +5963,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -6025,7 +6025,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -6853,7 +6853,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadLong(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -6915,7 +6915,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadLongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -6983,7 +6983,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadLongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -7045,7 +7045,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadLongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -8342,7 +8342,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadOneByte(Stream, Nullable<Int32>)

    @@ -8399,7 +8399,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadOneByteAsync(Stream, Nullable<Int32>, CancellationToken)

    @@ -8462,7 +8462,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadOneByteNullable(Stream, Nullable<Int32>)

    @@ -8518,7 +8518,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadOneByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    @@ -8580,7 +8580,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadOneSByte(Stream, Nullable<Int32>)

    @@ -8637,7 +8637,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadOneSByteAsync(Stream, Nullable<Int32>, CancellationToken)

    @@ -8700,7 +8700,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadOneSByteNullable(Stream, Nullable<Int32>)

    @@ -8756,7 +8756,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadOneSByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    @@ -8818,7 +8818,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerialized<T>(Stream, Nullable<Int32>)

    @@ -8891,7 +8891,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9104,7 +9104,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedNullable<T>(Stream, Nullable<Int32>)

    @@ -9178,7 +9178,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9258,7 +9258,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedObject(Stream, Type, Nullable<Int32>)

    @@ -9320,7 +9320,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    @@ -9388,7 +9388,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadSerializedStruct<T>(Stream, Nullable<Int32>)

    @@ -9461,7 +9461,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9540,7 +9540,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructNullable<T>(Stream, Nullable<Int32>)

    @@ -9614,7 +9614,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadSerializedStructNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -9802,7 +9802,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -9864,7 +9864,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -9932,7 +9932,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -9994,7 +9994,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -11716,7 +11716,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadUInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -11778,7 +11778,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -11846,7 +11846,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -11908,7 +11908,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -11976,7 +11976,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULong(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -12038,7 +12038,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -12106,7 +12106,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -12168,7 +12168,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadULongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -12236,7 +12236,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -12298,7 +12298,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -12366,7 +12366,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    @@ -12428,7 +12428,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadUShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    @@ -22675,7 +22675,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerialized(Stream, IStreamSerializer)

    @@ -22732,7 +22732,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerialized<T>(Stream, T)

    @@ -22806,7 +22806,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

    @@ -22869,7 +22869,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedAsync(Task<Stream>, IStreamSerializer, CancellationToken)

    @@ -22932,7 +22932,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedAsync<T>(Stream, T, CancellationToken)

    @@ -23012,7 +23012,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedAsync<T>(Task<Stream>, T, CancellationToken)

    @@ -23236,7 +23236,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullable(Stream, IStreamSerializer)

    @@ -23293,7 +23293,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullable<T>(Stream, T)

    @@ -23367,7 +23367,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    @@ -23430,7 +23430,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync(Task<Stream>, IStreamSerializer, CancellationToken)

    @@ -23493,7 +23493,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync<T>(Stream, T, CancellationToken)

    @@ -23573,7 +23573,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableAsync<T>(Task<Stream>, T, CancellationToken)

    @@ -23653,7 +23653,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>)

    @@ -23727,7 +23727,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableStructAsync<T>(Stream, Nullable<T>, CancellationToken)

    @@ -23807,7 +23807,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedNullableStructAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    @@ -23887,7 +23887,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedStruct<T>(Stream, T)

    @@ -23961,7 +23961,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedStructAsync<T>(Stream, T, CancellationToken)

    @@ -24041,7 +24041,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    WriteSerializedStructAsync<T>(Task<Stream>, T, CancellationToken)

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html index bae28e1..02b471b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html @@ -164,7 +164,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html index 524cb63..f0b8dcf 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html @@ -151,7 +151,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html index 3e2738c..74985fa 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html @@ -158,7 +158,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html index 25329e4..c49bc36 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html index c9dee15..f8b2640 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html index c82e20c..5262f45 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html index 018652b..2aba6fb 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html index 36f92f8..fcd65bf 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html index bc7c209..bcbe11e 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html @@ -158,7 +158,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html index 0a7b82d..87e3344 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html index 5e44f08..88be371 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html @@ -130,7 +130,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html index 8504368..6bde62c 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -118,7 +118,7 @@

    Fields Improve this Doc - View Source + View Source

    AllowedTypes

    Allowed (non-array) types

    @@ -148,7 +148,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncDeserializer

    Deserializer

    @@ -178,7 +178,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncSerializer

    Serializer

    @@ -208,7 +208,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    InstanceFactories

    Type instance factories

    @@ -238,7 +238,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncDeserializer

    Deserializer

    @@ -268,7 +268,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncObject

    An object for thread locking

    @@ -298,7 +298,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncSerializer

    Serializer

    @@ -328,7 +328,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    VERSION

    Version number

    @@ -360,7 +360,7 @@

    Properties Improve this Doc - View Source + View Source

    BufferPool

    @@ -391,7 +391,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Version

    @@ -424,7 +424,7 @@

    Methods Improve this Doc - View Source + View Source

    CreateInstance(out ConstructorInfo, Type, Stream, Nullable<Int32>, ISerializerOptions)

    @@ -498,7 +498,7 @@
    Returns
    Improve this Doc - View Source + View Source

    CreateInstance<T>(out ConstructorInfo, Stream, Nullable<Int32>, ISerializerOptions)

    @@ -583,7 +583,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    FindAsyncDeserializer(Type)

    @@ -633,7 +633,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindAsyncSerializer(Type)

    @@ -683,7 +683,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDelegateType(Type, IEnumerable<Type>)

    @@ -739,7 +739,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDeserializer(Type)

    @@ -789,7 +789,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindSerializer(Type)

    @@ -839,7 +839,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsTypeAllowed(Type)

    @@ -889,7 +889,7 @@
    Returns
    Improve this Doc - View Source + View Source

    LoadType(String)

    @@ -941,7 +941,7 @@

    Events Improve this Doc - View Source + View Source

    OnFindAsyncDeserializer

    Raised when finding a deserializer

    @@ -971,7 +971,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindAsyncSerializer

    Raised when finding a serializer

    @@ -1001,7 +1001,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncDeserializer

    Raised when finding a deserializer

    @@ -1031,7 +1031,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncSerializer

    Raised when finding a serializer

    @@ -1061,7 +1061,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnInit

    Raised on initialization

    @@ -1091,7 +1091,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnLoadType

    Raised on loading a type

    @@ -1127,7 +1127,7 @@
    Event Type
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/manifest.json b/docs/manifest.json index ab027f7..bfbaeb9 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -369,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "QbSTYjO7Z6HVugDIGudmS9HkpVbqnsDshVPhv2h18BM=" + "hash": "BxhN2mUa00OMzmOA1k5tXL/bnWQ3TV0kFtPv+wodYhM=" } }, "is_incremental": false, @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "bhdyKldMwFHR9nLz25GDReq5VZwrJ1RSFEApIfLnjfw=" + "hash": "kDq+SgI7ItXn7++UDjhMXbZ8KctYMSeczK41W1lmKZ8=" } }, "is_incremental": false, @@ -405,7 +405,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html", - "hash": "qPZvZ+KgUEbwu0KjIGndhdacxy49P4r92ddI8uuZbho=" + "hash": "mrOGKjCO6W8l8iITGVc/qjLejvJ86FbDMKKL8Y7kPek=" } }, "is_incremental": false, @@ -417,7 +417,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html", - "hash": "DGPuBSJQSs4Ul6kVrsC4wboUE5qlAaym7Y86JD+W7X8=" + "hash": "Rp6oFXtMeNT6mtUaINk7Bj+ty6XzsyQ8w0ZqHBhkop8=" } }, "is_incremental": false, @@ -429,7 +429,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html", - "hash": "ySJlnNdPkBn3KeULgNwXcUoElnzPnySx75X4vijltA4=" + "hash": "ehmANa7LC7PxSWDFPFYQ8yrBnoIngMp1EvwcQVAr0kg=" } }, "is_incremental": false, @@ -441,7 +441,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html", - "hash": "k/jY6Kv7RWOK+kRc/Bf4i1B7u+6axa+sJlRedx2dj+o=" + "hash": "e5O3qGqFTCqnnXfF4m7Zoz+vt7/im7jM1uPpx7USTcA=" } }, "is_incremental": false, @@ -453,7 +453,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html", - "hash": "b9ldd6l1GkS1K7Ayj+EuL9vSStPnJSRG5EQ7a2ac0J8=" + "hash": "il7deFtJArYjlFnAGKTb6Yw01nTv/iqXF/J7iEAM1OU=" } }, "is_incremental": false, @@ -465,7 +465,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html", - "hash": "Jk6eLPV6bFsdH1vyq8LdH4AjayUanP5kOyVer74E/O0=" + "hash": "qa0zVSYW0zEx03DpfYBmF6zLaodn7+9gDoZ23yGUq5w=" } }, "is_incremental": false, @@ -477,7 +477,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html", - "hash": "eXGH5yr6pz/oh+Ml3Nk9gXy77Fe1neYGRHCIe2Pe3FQ=" + "hash": "p+2P3QgX2txo7VaFVnFfXgvSBeqFmkQB3MA8vno2J+o=" } }, "is_incremental": false, @@ -489,7 +489,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html", - "hash": "SqCDBhBSnuATYrLJ0Y52N9wTrQm73YkOjZgeFekNhbo=" + "hash": "19AR1BSTwKvUdxJfMqe2CaaxtNbxxT0nSvCECpSel+c=" } }, "is_incremental": false, @@ -501,7 +501,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html", - "hash": "ODhPTEYas6Q14p8YmO9hljsZQ7jhhCKqxii3DdOrHZY=" + "hash": "6oudk1XKyvZYgk1bkpdLVmHOmcjhQUU8Dkor2TUSo9c=" } }, "is_incremental": false, @@ -513,7 +513,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html", - "hash": "gjQidERgHEq7gCHhxEVMc8uUl2QEVnkbOcR6n8xe4uw=" + "hash": "MTyGBMI6j/1R3TUut1gW3WIcZL6gLVmveosh+Ng1Fg4=" } }, "is_incremental": false, @@ -525,7 +525,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html", - "hash": "xgC99PXwp0UMVBYj9mVa/vl0ri0DP3Fhn2lVQbhCplU=" + "hash": "DEIJU1gGfezRGpzwjKsNaZgcHhN4+ikh40l+xmPg8is=" } }, "is_incremental": false, @@ -537,7 +537,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "sEFejL+leVdNnETsolnXo0ULT4L9/Gc/dxaSfdP7mGc=" + "hash": "IKR/P/t8U4887UlFhEAiRV//kfPwgaf41Dk1KC9B0rs=" } }, "is_incremental": false, diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index e877a81..70b6caa 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -63,3 +63,5 @@ {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T12:19:36.7110627Z","message_severity":"warning","correlation_id":"665B4E2D-D39D-4DCB-A2C9-61D2F9E193B1.1.1.13"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T14:28:59.9695382Z","message_severity":"warning","correlation_id":"7C19EC07-93F2-43B3-AFA1-D9226DD93BCE.1.1.12"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T14:28:59.9755385Z","message_severity":"warning","correlation_id":"7C19EC07-93F2-43B3-AFA1-D9226DD93BCE.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T16:38:44.7736752Z","message_severity":"warning","correlation_id":"79978425-0FAE-437F-8AAE-B84BA646B741.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T16:38:44.7806759Z","message_severity":"warning","correlation_id":"79978425-0FAE-437F-8AAE-B84BA646B741.1.1.13"} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs index c4587a7..acb3cef 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs @@ -1,4 +1,5 @@ -using wan24.StreamSerializerExtensions; +using wan24.Core; +using wan24.StreamSerializerExtensions; namespace Stream_Serializer_Extensions_Tests { @@ -35,9 +36,8 @@ public void String_Tests() ms.SetLength(0); ms.Position = 0; - str = "abcdefäüößﻼ";//TODO Correct sample? + str = "abcdefäüöß\U0001F642"; ms.WriteString32(str); - Assert.AreEqual(((long)str.Length << 2) + 2, ms.Length); ms.Position = 0; Assert.AreEqual(str, ms.ReadString32()); Assert.AreEqual(ms.Length, ms.Position); @@ -88,9 +88,8 @@ public async Task StringAsync_Tests() ms.SetLength(0); ms.Position = 0; - str = "abcdefäüößﻼ";//TODO Correct sample? + str = "abcdefäüöß\U0001F642"; await ms.WriteString32Async(str); - Assert.AreEqual(((long)str.Length << 2) + 2, ms.Length); ms.Position = 0; Assert.AreEqual(str, await ms.ReadString32Async()); diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs index 5999cf8..ed59d1d 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs @@ -228,7 +228,7 @@ public void InitDefaultValues() { List? usedDefaultValue = null; if (DefaultValues == null) return usedDefaultValue; - if (defaultValueBits == null) throw new ArgumentNullException(nameof(defaultValueBits)); + ArgumentValidationHelper.EnsureValidArgument(nameof(defaultValueBits), defaultValueBits); usedDefaultValue = new(); try { diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs index 30ce695..2fedbfb 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs @@ -34,7 +34,7 @@ public abstract class StreamAsyncEnumeratorBase : DisposableBase, IAsyncEnume /// Cancellation token protected StreamAsyncEnumeratorBase(Stream stream, int? version = null, CancellationToken cancellationToken = default) : base() { - SerializerVersion = version ?? StreamSerializer.VERSION; + SerializerVersion = version ?? StreamSerializer.Version; Cancellation = cancellationToken; Stream = stream; } @@ -85,7 +85,7 @@ public static async IAsyncEnumerable EnumerateAsync(Stream strea where tEnumerator : StreamAsyncEnumeratorBase { Type type = typeof(tEnumerator); - if (type.IsAbstract) throw new ArgumentException("Non-abstract type required", nameof(tEnumerator)); + ArgumentValidationHelper.EnsureValidArgument(nameof(type), !type.IsAbstract, () => "Non-abstract type required"); StreamAsyncEnumeratorBase enumerator = Activator.CreateInstance(type, stream, version, cancellationToken) as StreamAsyncEnumeratorBase ?? throw new InvalidProgramException($"Failed to instance {type}"); await using (enumerator.DynamicContext()) diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs index 53da62b..00e1eff 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs @@ -33,7 +33,7 @@ public abstract class StreamEnumeratorBase : DisposableBase, IEnumerator /// Serializer version protected StreamEnumeratorBase(Stream stream, int? version = null) : base() { - SerializerVersion = version ?? StreamSerializer.VERSION; + SerializerVersion = version ?? StreamSerializer.Version; StartPosition = stream.CanSeek ? stream.Position : 0; Stream = stream; } @@ -94,7 +94,7 @@ protected override void Dispose(bool disposing) { } public static IEnumerable Enumerate(Stream stream, int? version = null) where tEnumerator : StreamEnumeratorBase { Type type = typeof(tEnumerator); - if (type.IsAbstract) throw new ArgumentException("Non-abstract type required", nameof(tEnumerator)); + ArgumentValidationHelper.EnsureValidArgument(nameof(tEnumerator), !type.IsAbstract, () => "Non-abstract type required"); using StreamEnumeratorBase enumerator = Activator.CreateInstance(type, stream, version) as StreamEnumeratorBase ?? throw new InvalidProgramException($"Failed to instance {type}"); while (enumerator.MoveNext()) yield return enumerator.Current; diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index 07f662d..66b78b7 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -246,7 +246,7 @@ public static (object Number, NumberTypes Type) GetNumberAndType(this T numbe #endif NumberTypes origin = GetNumberType(number), type; - ArgumentValidationHelper.EnsureValidArgument(nameof(number), origin != NumberTypes.None, "Not a supported numeric type"); + ArgumentValidationHelper.EnsureValidArgument(nameof(number), origin != NumberTypes.None, () => "Not a supported numeric type"); if (origin.IsZero() || origin.IsMinValue() || origin.IsMaxValue()) return (0, origin); object num; switch (origin.RemoveFlags()) @@ -613,9 +613,7 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV public static T ToObject(this byte[] bytes, bool includesSerializerVersion = true) where T : class, IStreamSerializer, new() { using MemoryStream ms = new(bytes); - int serializerVersion = StreamSerializer.VERSION; - if (includesSerializerVersion) serializerVersion = ms.ReadSerializerVersion(); - return ms.ReadSerialized(serializerVersion); + return ms.ReadSerialized(includesSerializerVersion ? ms.ReadSerializerVersion() : StreamSerializer.Version); } /// diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs index 00b6fd5..980e28d 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs @@ -105,7 +105,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default) + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default) ); case ObjectTypes.List: if (isEmpty) return Activator.CreateInstance(type!)!; @@ -116,7 +116,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default) + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default) ); case ObjectTypes.Dict: if (isEmpty) return Activator.CreateInstance(type!)!; @@ -127,8 +127,8 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION), - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION) + options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.Version), + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version) ); case ObjectTypes.Object: return ReadObject(stream, type!, version, options); @@ -137,7 +137,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp case ObjectTypes.Serializable: return ReadSerializedObject(stream, type!, version); case ObjectTypes.Stream: - Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( + Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.Version, default) ?? new FileStream( Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), FileMode.CreateNew, FileAccess.ReadWrite, @@ -266,7 +266,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default), + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default), cancellationToken ).DynamicContext(); case ObjectTypes.List: @@ -278,7 +278,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, default), + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default), cancellationToken ).DynamicContext(); case ObjectTypes.Dict: @@ -290,8 +290,8 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT pool: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), + options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.Version, cancellationToken), + options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, cancellationToken), cancellationToken ).DynamicContext(); case ObjectTypes.Object: @@ -302,7 +302,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT case ObjectTypes.Serializable: return await ReadSerializedObjectAsync(stream, type!, version, cancellationToken)!.DynamicContext(); case ObjectTypes.Stream: - Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.VERSION, default) ?? new FileStream( + Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.Version, default) ?? new FileStream( Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), FileMode.CreateNew, FileAccess.ReadWrite, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs index eb34446..6524179 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs @@ -65,7 +65,7 @@ public static Array ReadArray( ISerializerOptions? valueOptions = null ) { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type")); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, () => "Not an array type")); int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type elementType = type.GetElementType()!; @@ -135,7 +135,7 @@ public static async Task ReadArrayAsync( CancellationToken cancellationToken = default ) { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, "Not an array type")); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, () => "Not an array type")); int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type elementType = type.GetElementType()!; @@ -168,7 +168,7 @@ public static async Task ReadArrayAsync( ISerializerOptions? valueOptions = null ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -212,7 +212,7 @@ public static async Task ReadArrayAsync( ISerializerOptions? valueOptions = null ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -260,7 +260,7 @@ public static async Task ReadArrayAsync( CancellationToken cancellationToken = default ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -308,7 +308,7 @@ public static async Task ReadArrayAsync( CancellationToken cancellationToken = default ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs index eac3f33..2020ad0 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs @@ -3,8 +3,6 @@ using System.Runtime.CompilerServices; using wan24.Core; -//TODO Use Predicate? - namespace wan24.StreamSerializerExtensions { // Basic @@ -44,7 +42,7 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, #endif public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool? pool = null) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -79,7 +77,7 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, #endif public static async Task ReadBoolNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -681,7 +679,7 @@ CancellationToken cancellationToken where T : struct, IConvertible { pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -741,7 +739,7 @@ CancellationToken cancellationToken where T : struct, IConvertible { pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs index d734922..21e3069 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs @@ -127,7 +127,7 @@ public static (byte[] Value, int Length)? ReadBytesNullable( int maxLen = int.MaxValue ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -189,7 +189,7 @@ public static (byte[] Value, int Length)? ReadBytesNullable( CancellationToken cancellationToken = default ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs index 8c5468e..2ceacc7 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs @@ -75,7 +75,7 @@ public static IDictionary ReadDict( SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a dictionary type" + () => "Not a dictionary type" )); pool ??= StreamSerializer.BufferPool; int len = ReadNumber(stream, version, pool); @@ -158,7 +158,7 @@ public static async Task ReadDictAsync( SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a dictionary type" + () => "Not a dictionary type" )); pool ??= StreamSerializer.BufferPool; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); @@ -200,7 +200,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok where tKey : notnull { pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -246,10 +246,10 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a dictionary type" + () => "Not a dictionary type" )); pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -299,7 +299,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok where tKey : notnull { pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -353,10 +353,10 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a dictionary type" + () => "Not a dictionary type" )); pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs index 00f9c3b..2625aed 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs @@ -128,7 +128,7 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio #endif public static T? ReadEnumNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: { @@ -156,7 +156,7 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio #endif public static Enum? ReadEnumNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: { @@ -190,7 +190,7 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio public static async Task ReadEnumNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) where T : struct, Enum { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: { @@ -229,7 +229,7 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio CancellationToken cancellationToken = default ) { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs index b24c587..fbeb920 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs @@ -68,7 +68,7 @@ public static IList ReadList( SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a list type" + () => "Not a list type" )); int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); @@ -141,7 +141,7 @@ public static async Task ReadListAsync( SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a list type" + () => "Not a list type" )); int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); @@ -175,7 +175,7 @@ public static async Task ReadListAsync( ISerializerOptions? valueOptions = null ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -221,9 +221,9 @@ public static async Task ReadListAsync( SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a list type" + () => "Not a list type" )); - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -268,7 +268,7 @@ public static async Task ReadListAsync( CancellationToken cancellationToken = default ) { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -318,9 +318,9 @@ public static async Task ReadListAsync( SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), - "Not a list type" + () => "Not a list type" )); - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs index d59f31b..d530f6c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs @@ -44,7 +44,7 @@ public static object ReadNumber(this Stream stream, Type type, int? version = nu private static object ReadNumberInt(Stream stream, Type resType, int? version, NumberTypes? numberType, ArrayPool? pool) => SerializerException.Wrap(() => { - ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), "Not a valid number type"); + ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), () => "Not a valid number type"); byte[] data = numberType == null ? ReadSerializedData(stream, len: 1, pool) : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); try { @@ -187,7 +187,7 @@ CancellationToken cancellationToken ) => SerializerException.WrapAsync(async () => { - ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), "Not a valid number type"); + ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), () => "Not a valid number type"); byte[] data = numberType == null ? await ReadSerializedDataAsync(stream, len: 1, pool, cancellationToken).DynamicContext() : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); @@ -301,7 +301,7 @@ CancellationToken cancellationToken public static T? ReadNumberNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible => SerializerException.Wrap(() => { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch ((version ?? StreamSerializer.Version) & byte.MaxValue) { case 1: { @@ -335,7 +335,7 @@ CancellationToken cancellationToken public static object? ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) => SerializerException.Wrap(() => { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch ((version ?? StreamSerializer.Version) & byte.MaxValue) { case 1: { @@ -371,7 +371,7 @@ CancellationToken cancellationToken where T : struct, IConvertible => SerializerException.WrapAsync(async () => { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch ((version ?? StreamSerializer.Version) & byte.MaxValue) { case 1: { @@ -416,7 +416,7 @@ CancellationToken cancellationToken ) => SerializerException.WrapAsync(async () => { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch ((version ?? StreamSerializer.Version) & byte.MaxValue) { case 1: { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs index 86c6d0c..4083c46 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs @@ -5,8 +5,6 @@ using wan24.Core; using wan24.ObjectValidation; -//TODO Check use of StreamSerializer.VERSION/Version - namespace wan24.StreamSerializerExtensions { // Serialized diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs index 0dd0bd5..fb386d7 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs @@ -57,10 +57,10 @@ private static Stream ReadStreamInt( ) => SerializerException.Wrap(() => { - if (!target.CanWrite) throw new ArgumentException("Writable stream required", nameof(target)); - if (maxBufferSize != null && maxBufferSize.Value < 1) throw new ArgumentOutOfRangeException(nameof(maxBufferSize)); - if (minLen < 0) throw new ArgumentOutOfRangeException(nameof(minLen)); - if (maxLen < 0 || maxLen < minLen) throw new ArgumentOutOfRangeException(nameof(maxLen)); + ArgumentValidationHelper.EnsureValidArgument(nameof(target), target.CanWrite, () => "Writable stream required"); + if (maxBufferSize != null) ArgumentValidationHelper.EnsureValidArgument(nameof(maxBufferSize), 1, int.MaxValue, maxBufferSize.Value); + ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, int.MaxValue, minLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), 0, minLen, maxLen); len ??= stream.ReadNumber(version, pool); if (len == 0) { @@ -130,7 +130,7 @@ private static Stream ReadStreamInt( ) => SerializerException.Wrap(() => { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: { @@ -211,10 +211,10 @@ CancellationToken cancellationToken ) => SerializerException.WrapAsync(async () => { - if (!target.CanWrite) throw new ArgumentException("Writable stream required", nameof(target)); - if (maxBufferSize != null && maxBufferSize.Value < 1) throw new ArgumentOutOfRangeException(nameof(maxBufferSize)); - if (minLen < 0) throw new ArgumentOutOfRangeException(nameof(minLen)); - if (maxLen < 0 || maxLen < minLen) throw new ArgumentOutOfRangeException(nameof(maxLen)); + ArgumentValidationHelper.EnsureValidArgument(nameof(target), target.CanWrite, () => "Writable stream required"); + if (maxBufferSize != null) ArgumentValidationHelper.EnsureValidArgument(nameof(maxBufferSize), 1, int.MaxValue, maxBufferSize.Value); + ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, int.MaxValue, minLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), 0, minLen, maxLen); len ??= await stream.ReadNumberAsync(version, pool, cancellationToken).DynamicContext(); if (len == 0) { @@ -286,7 +286,7 @@ CancellationToken cancellationToken ) => SerializerException.WrapAsync(async () => { - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs index 5d08edc..7bfb740 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs @@ -214,7 +214,7 @@ public static Task ReadString32Async( #endif private static string ReadString(Stream stream, int? version, int minLen, int maxLen, ArrayPool? pool, Func action) { - version ??= StreamSerializer.VERSION; + version ??= StreamSerializer.Version; pool ??= StreamSerializer.BufferPool; int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); @@ -254,7 +254,7 @@ private static async Task ReadStringAsync( CancellationToken cancellationToken ) { - version ??= StreamSerializer.VERSION; + version ??= StreamSerializer.Version; pool ??= StreamSerializer.BufferPool; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); @@ -287,7 +287,7 @@ CancellationToken cancellationToken { pool ??= StreamSerializer.BufferPool; int? len; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: @@ -342,7 +342,7 @@ CancellationToken cancellationToken { pool ??= StreamSerializer.BufferPool; int? len; - switch ((version ??= StreamSerializer.VERSION) & byte.MaxValue)// Serializer version switch + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch { case 1: case 2: diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index 6a5ace3..6f6924a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -37,7 +37,7 @@ public static Stream WriteEnum(this Stream stream, T value) where T : struct, public static Stream WriteEnum(this Stream stream, object value) { Type enumType = value.GetType(); - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value")); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, () => "Not an enumeration value")); if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) return Write(stream, (byte)NumberTypes.Default); return WriteNumber(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType())); } @@ -94,7 +94,7 @@ public static Task WriteEnumAsync(this Task stream, T value, public static async Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = default) { Type enumType = value.GetType(); - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, "Not an enumeration value")); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, () => "Not an enumeration value")); if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) { await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index 1cce478..f6d5036 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -2,8 +2,6 @@ using System.Runtime.CompilerServices; using wan24.Core; -//TODO Write(Serialized/*) -> Write - namespace wan24.StreamSerializerExtensions { // Serialized diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs index ed6c9fc..9402ae2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -19,7 +19,7 @@ public static partial class StreamExtensions public static Stream WriteStream(this Stream stream, Stream source, ArrayPool? pool = null, int? chunkLength = null) => SerializerException.Wrap(() => { - if (chunkLength != null && chunkLength.Value < 1) throw new ArgumentOutOfRangeException(nameof(chunkLength)); + if (chunkLength != null) ArgumentValidationHelper.EnsureValidArgument(nameof(chunkLength), 1, int.MaxValue, chunkLength.Value); long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); WriteNumber(stream, len); if (len != 0) @@ -77,7 +77,7 @@ public static Task WriteStreamAsync( ) => SerializerException.WrapAsync(async () => { - if (chunkLength != null && chunkLength.Value < 1) throw new ArgumentOutOfRangeException(nameof(chunkLength)); + if (chunkLength != null) ArgumentValidationHelper.EnsureValidArgument(nameof(chunkLength), 1, int.MaxValue, chunkLength.Value); long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); if (len != 0) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs index 758be72..4ce31af 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs @@ -24,7 +24,7 @@ public static Stream WriteStruct(this Stream stream, object value, bool forceLit => SerializerException.Wrap(() => { Type structType = value.GetType(); - ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try @@ -56,7 +56,7 @@ public static Stream WriteStruct(this Stream stream, T value, bool forceLittl => SerializerException.Wrap(() => { Type structType = typeof(T); - ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try @@ -117,7 +117,7 @@ public static Task WriteStructAsync(this Stream stream, object value, bo => SerializerException.WrapAsync(() => { Type structType = value.GetType(); - ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try @@ -163,7 +163,7 @@ public static Task WriteStructAsync(this Stream stream, T value, bool => SerializerException.WrapAsync(() => { Type structType = typeof(T); - ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, "Not a structure"); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try @@ -282,7 +282,7 @@ public static Task WriteStructNullableAsync( /// Stream serializer attribute of the structure type public static void ConvertStructureEndianess(Type type, Memory data, StreamSerializerAttribute? attr = null) { - if (!type.IsValueType) throw new ArgumentException("Structure type required", nameof(type)); + ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsValueType, () => "Structure type required"); attr ??= type.GetCustomAttribute() ?? throw new ArgumentException($"{type} requires a {typeof(StreamSerializerAttribute)}", nameof(type)); Queue<(Type Type, Memory Data, StreamSerializerAttribute Attribute)> queue = new(); diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index 97b4543..413ad09 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -6,9 +6,6 @@ using System.Runtime; using wan24.Core; -//TODO char (de)serializer -//TODO Use ArgumentValidationHelper methods - namespace wan24.StreamSerializerExtensions { /// @@ -238,7 +235,6 @@ static StreamSerializer() new KeyValuePair(typeof(Enum),(s,t,v,o,ct) => s.ReadEnumAsync(t,v,cancellationToken: ct)), new KeyValuePair(typeof(Stream),(s,t,v,o,ct) => { - //TODO Should be asynchronous Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v,ct)?? new FileStream( Path.GetTempFileName(), FileMode.OpenOrCreate, @@ -253,7 +249,7 @@ static StreamSerializer() } catch { - res.Dispose(); + res.Dispose();//TODO Should be DisposeAsync throw; } }) @@ -273,7 +269,6 @@ static StreamSerializer() typeof(double), typeof(decimal), typeof(string), - typeof(char), typeof(IDictionary), typeof(IList), typeof(Stream) diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs index 82cd5a6..0b16ef1 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -22,7 +22,7 @@ public class StreamSerializerAttribute : Attribute /// Skip the property name checksum? public StreamSerializerAttribute(StreamSerializerModes mode = StreamSerializerModes.OptOut, int version = 0, bool skipPropertyNameChecksum = false) : base() { - if (mode == StreamSerializerModes.Auto) throw new ArgumentException($"Type serializer mode can't be {StreamSerializerModes.Auto}", nameof(mode)); + ArgumentValidationHelper.EnsureValidArgument(nameof(mode), mode != StreamSerializerModes.Auto, () => $"Type serializer mode can't be {StreamSerializerModes.Auto}"); Mode = mode; Version = version == 0 ? null : version; SkipPropertyNameChecksum = skipPropertyNameChecksum; @@ -172,8 +172,8 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position /// Stream to use for deserializing an embedded stream public virtual Stream? GetStream(object? obj, PropertyInfo? property, Stream stream, int version, CancellationToken cancellationToken = default) { - if (obj == null && property != null) throw new ArgumentNullException(nameof(obj)); - if (obj != null && property == null) throw new ArgumentNullException(nameof(property)); + if (obj == null) ArgumentValidationHelper.EnsureValidArgument(nameof(obj), property); + if (property == null) ArgumentValidationHelper.EnsureValidArgument(nameof(property), obj); if (StreamFactory == null) { if (StreamFactoryType == null) return null; @@ -335,7 +335,7 @@ public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? pro /// Value is included? public virtual bool IsIncluded(StreamSerializerModes mode, int version) { - if (mode == StreamSerializerModes.Auto) throw new ArgumentException($"Type stream serializer mode can't be {StreamSerializerModes.Auto}", nameof(mode)); + ArgumentValidationHelper.EnsureValidArgument(nameof(mode), mode != StreamSerializerModes.Auto, () => $"Type serializer mode can't be {StreamSerializerModes.Auto}"); return (version == 0 || (FromVersion == null && Version == null) || (FromVersion == null || version >= FromVersion) && (Version == null || version <= Version)) && ( (mode == StreamSerializerModes.OptOut && Mode.In(StreamSerializerModes.OptOut, StreamSerializerModes.Auto)) || @@ -357,7 +357,7 @@ public virtual bool IsIncluded(StreamSerializerModes mode, int version) /// Fields public virtual List GetNumericStructureFields(Type type) { - if (!type.IsValueType) throw new ArgumentException("Structure type required", nameof(type)); + ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsValueType, () => "Structure type required"); return NumericStructureFields ??= new(from fi in type.GetFieldsCached(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) where !fi.IsStatic && fi.GetCustomAttributeCached() is not null From 5e1bb4bc7c0224517fc44d4965db2a7f31e55e31 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 21:39:44 +0200 Subject: [PATCH 09/17] Update - Fixed missing `ObjectTypes.Byte` numeric object type determination --- ...SerializerExtensions.SerializerHelper.html | 26 +- ...SerializerExtensions.StreamExtensions.html | 42 +-- ...mSerializer.AsyncDeserialize_Delegate.html | 2 +- ...eamSerializer.AsyncSerialize_Delegate.html | 2 +- ...StreamSerializer.Deserialize_Delegate.html | 2 +- ...alizer.FindAsyncDeserializer_Delegate.html | 2 +- ...rializer.FindAsyncSerializer_Delegate.html | 2 +- ...ializer.FindSyncDeserializer_Delegate.html | 2 +- ...erializer.FindSyncSerializer_Delegate.html | 2 +- ...nsions.StreamSerializer.Init_Delegate.html | 2 +- ...amSerializer.InstanceFactory_Delegate.html | 2 +- ...ns.StreamSerializer.LoadType_Delegate.html | 2 +- ...s.StreamSerializer.Serialize_Delegate.html | 2 +- ...SerializerExtensions.StreamSerializer.html | 52 ++-- docs/manifest.json | 28 +- src/Stream-Serializer-Extensions Docs/log.txt | 2 + .../AutoStreamSerializer_Tests.cs | 265 ++++++++++++++++++ .../CustomStreamSerializer_Tests.cs | 102 +++++++ .../StreamExtensions_Tests.Any.cs | 173 ++++++++++++ .../StreamExtensions_Tests.Object.cs | 173 ++++++++++++ .../StreamSerializer_Tests.cs | 68 +++++ .../AutoStreamSerializerConfig.cs | 4 +- .../SerializerHelper.cs | 1 + .../StreamExtensions.Read.Object.cs | 29 +- .../StreamExtensions.Read.Stream.cs | 8 +- .../StreamExtensions.Write.Any.cs | 54 +--- .../StreamSerializer.cs | 6 +- .../StreamSerializerAttribute.cs | 4 +- 28 files changed, 910 insertions(+), 149 deletions(-) create mode 100644 src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs create mode 100644 src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html index 4693e38..0bbcece 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -118,7 +118,7 @@

    Methods Improve this Doc - View Source + View Source

    EnsureNotNull<T>(T)

    @@ -185,7 +185,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int32, Int32, Int32)

    @@ -248,7 +248,7 @@
    Returns
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int64, Int64, Int64)

    @@ -311,7 +311,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -380,7 +380,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetNumberAndType<T>(T)

    @@ -446,7 +446,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    GetNumberType<T>(T, Boolean)

    @@ -518,7 +518,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    GetObjectSerializerInfo(Object)

    @@ -568,7 +568,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -637,7 +637,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    @@ -961,7 +961,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsSerializerConstructor(ConstructorInfo, Boolean)

    @@ -1324,7 +1324,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToBytes(IStreamSerializer, Boolean)

    @@ -1381,7 +1381,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToObject<T>(Byte[], Boolean)

    @@ -1455,7 +1455,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ValidateDeserializedObject<T>(T)

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index 990ab46..924b4fd 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -1187,7 +1187,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObject(Stream, Type, Nullable<Int32>)

    @@ -1249,7 +1249,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObject<T>(Stream, Nullable<Int32>)

    @@ -1322,7 +1322,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadAnyObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    @@ -1390,7 +1390,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObjectAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -1469,7 +1469,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullable(Stream, Type, Nullable<Int32>)

    @@ -1532,7 +1532,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullable<T>(Stream, Nullable<Int32>)

    @@ -1606,7 +1606,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullableAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    @@ -1675,7 +1675,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadAnyObjectNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    @@ -7726,7 +7726,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadObject(Stream, Type, Nullable<Int32>, ISerializerOptions)

    @@ -7795,7 +7795,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadObject<T>(Stream, Nullable<Int32>, ISerializerOptions)

    @@ -7874,7 +7874,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadObjectAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -7949,7 +7949,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadObjectAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -8034,7 +8034,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadObjectNullable(Stream, Type, Nullable<Int32>, ISerializerOptions)

    @@ -8103,7 +8103,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadObjectNullable<T>(Stream, Nullable<Int32>, ISerializerOptions)

    @@ -8182,7 +8182,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ReadObjectNullableAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -8257,7 +8257,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadObjectNullableAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    @@ -13237,7 +13237,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyAsync(Stream, Object, CancellationToken)

    @@ -13300,7 +13300,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyAsync(Task<Stream>, Object, CancellationToken)

    @@ -13363,7 +13363,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyNullable(Stream, Object)

    @@ -13420,7 +13420,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyNullableAsync(Stream, Object, CancellationToken)

    @@ -13483,7 +13483,7 @@
    Returns
    Improve this Doc - View Source + View Source

    WriteAnyNullableAsync(Task<Stream>, Object, CancellationToken)

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html index 02b471b..28962a6 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html @@ -164,7 +164,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html index f0b8dcf..785a199 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html @@ -151,7 +151,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html index 74985fa..16fda57 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html @@ -158,7 +158,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html index c49bc36..9e7ed2d 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html index f8b2640..84a5ea1 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html index 5262f45..473fe89 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html index 2aba6fb..b8b9b60 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html index fcd65bf..93c6a88 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html index bcbe11e..cc6f0d5 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html @@ -158,7 +158,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html index 87e3344..ac894bc 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html index 88be371..ede0473 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html @@ -130,7 +130,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html index 6bde62c..2200c10 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -118,7 +118,7 @@

    Fields Improve this Doc - View Source + View Source

    AllowedTypes

    Allowed (non-array) types

    @@ -148,7 +148,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncDeserializer

    Deserializer

    @@ -178,7 +178,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncSerializer

    Serializer

    @@ -208,7 +208,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    InstanceFactories

    Type instance factories

    @@ -238,7 +238,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncDeserializer

    Deserializer

    @@ -268,7 +268,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncObject

    An object for thread locking

    @@ -298,7 +298,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncSerializer

    Serializer

    @@ -328,7 +328,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    VERSION

    Version number

    @@ -360,7 +360,7 @@

    Properties Improve this Doc - View Source + View Source

    BufferPool

    @@ -391,7 +391,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    Version

    @@ -424,7 +424,7 @@

    Methods Improve this Doc - View Source + View Source

    CreateInstance(out ConstructorInfo, Type, Stream, Nullable<Int32>, ISerializerOptions)

    @@ -498,7 +498,7 @@
    Returns
    Improve this Doc - View Source + View Source

    CreateInstance<T>(out ConstructorInfo, Stream, Nullable<Int32>, ISerializerOptions)

    @@ -583,7 +583,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    FindAsyncDeserializer(Type)

    @@ -633,7 +633,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindAsyncSerializer(Type)

    @@ -683,7 +683,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDelegateType(Type, IEnumerable<Type>)

    @@ -739,7 +739,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDeserializer(Type)

    @@ -789,7 +789,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindSerializer(Type)

    @@ -839,7 +839,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsTypeAllowed(Type)

    @@ -889,7 +889,7 @@
    Returns
    Improve this Doc - View Source + View Source

    LoadType(String)

    @@ -941,7 +941,7 @@

    Events Improve this Doc - View Source + View Source

    OnFindAsyncDeserializer

    Raised when finding a deserializer

    @@ -971,7 +971,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindAsyncSerializer

    Raised when finding a serializer

    @@ -1001,7 +1001,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncDeserializer

    Raised when finding a deserializer

    @@ -1031,7 +1031,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncSerializer

    Raised when finding a serializer

    @@ -1061,7 +1061,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnInit

    Raised on initialization

    @@ -1091,7 +1091,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnLoadType

    Raised on loading a type

    @@ -1127,7 +1127,7 @@
    Event Type
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/manifest.json b/docs/manifest.json index bfbaeb9..0603866 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -369,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "BxhN2mUa00OMzmOA1k5tXL/bnWQ3TV0kFtPv+wodYhM=" + "hash": "bzYSYWtx9n+/gEKgbfAHcL2ztykdHBez+ZyZYSLardU=" } }, "is_incremental": false, @@ -393,7 +393,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "kDq+SgI7ItXn7++UDjhMXbZ8KctYMSeczK41W1lmKZ8=" + "hash": "ubl/lGQyAw4PSIKiB+YX8+oEqN8ieKaxRphUJ8TCNJY=" } }, "is_incremental": false, @@ -405,7 +405,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html", - "hash": "mrOGKjCO6W8l8iITGVc/qjLejvJ86FbDMKKL8Y7kPek=" + "hash": "zO9lY/KRno3Nh4TpBrgvqd5WweZN3h8KpESJ4bNxhmg=" } }, "is_incremental": false, @@ -417,7 +417,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html", - "hash": "Rp6oFXtMeNT6mtUaINk7Bj+ty6XzsyQ8w0ZqHBhkop8=" + "hash": "GYKAMZCQ9Vhehwwz6kJGC+PV26D7WljWn9VEQ9X2J9U=" } }, "is_incremental": false, @@ -429,7 +429,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html", - "hash": "ehmANa7LC7PxSWDFPFYQ8yrBnoIngMp1EvwcQVAr0kg=" + "hash": "3ZvkMA731sGaikL4RUUM6bKG0vtP9NqjDRknomg2Aww=" } }, "is_incremental": false, @@ -441,7 +441,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html", - "hash": "e5O3qGqFTCqnnXfF4m7Zoz+vt7/im7jM1uPpx7USTcA=" + "hash": "66sEAXLLAldHDPu8IyVEc8tx/aczxvCYilmpsD+7IU8=" } }, "is_incremental": false, @@ -453,7 +453,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html", - "hash": "il7deFtJArYjlFnAGKTb6Yw01nTv/iqXF/J7iEAM1OU=" + "hash": "5LHGIxnKMHzA2x7Zt3huL9EqLZ7kq5szBLQDKSH1xkM=" } }, "is_incremental": false, @@ -465,7 +465,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html", - "hash": "qa0zVSYW0zEx03DpfYBmF6zLaodn7+9gDoZ23yGUq5w=" + "hash": "LzZhrQ+T7xDuPeChLzK1tLtYwzfs5ipSegKnDHID4FE=" } }, "is_incremental": false, @@ -477,7 +477,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html", - "hash": "p+2P3QgX2txo7VaFVnFfXgvSBeqFmkQB3MA8vno2J+o=" + "hash": "wHBwftCLQnDOXelEabdiWLVBgP0gTDmxHCTADlWT2O0=" } }, "is_incremental": false, @@ -489,7 +489,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html", - "hash": "19AR1BSTwKvUdxJfMqe2CaaxtNbxxT0nSvCECpSel+c=" + "hash": "R/np5q+A/k4GvOIgzMkmzQ1pQBc2g6jvpymvCUjBSMs=" } }, "is_incremental": false, @@ -501,7 +501,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html", - "hash": "6oudk1XKyvZYgk1bkpdLVmHOmcjhQUU8Dkor2TUSo9c=" + "hash": "cfAlpwTTWiPePl+7HHJX6Zd+EVDBtRDOWhVIkoWfXnI=" } }, "is_incremental": false, @@ -513,7 +513,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html", - "hash": "MTyGBMI6j/1R3TUut1gW3WIcZL6gLVmveosh+Ng1Fg4=" + "hash": "DCPKZCxwDhDmYJ/Ur2QaMxmbdKsUwAxfTf+afSqpFXY=" } }, "is_incremental": false, @@ -525,7 +525,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html", - "hash": "DEIJU1gGfezRGpzwjKsNaZgcHhN4+ikh40l+xmPg8is=" + "hash": "l9ZnWLUNsCGv3yKm0owT3R1F3yu8eAu8QVF13AsxTII=" } }, "is_incremental": false, @@ -537,7 +537,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "IKR/P/t8U4887UlFhEAiRV//kfPwgaf41Dk1KC9B0rs=" + "hash": "iy+uUx4jyOlY7UD4xKnCfMBsi9PsqX1MKChU2F3LBMs=" } }, "is_incremental": false, diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index 70b6caa..91f522e 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -65,3 +65,5 @@ {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T14:28:59.9755385Z","message_severity":"warning","correlation_id":"7C19EC07-93F2-43B3-AFA1-D9226DD93BCE.1.1.13"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T16:38:44.7736752Z","message_severity":"warning","correlation_id":"79978425-0FAE-437F-8AAE-B84BA646B741.1.1.12"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T16:38:44.7806759Z","message_severity":"warning","correlation_id":"79978425-0FAE-437F-8AAE-B84BA646B741.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T19:38:43.4156498Z","message_severity":"warning","correlation_id":"095E99A7-DCA0-4549-B0CC-CC884F14B1B9.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T19:38:43.4266824Z","message_severity":"warning","correlation_id":"095E99A7-DCA0-4549-B0CC-CC884F14B1B9.1.1.13"} diff --git a/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs new file mode 100644 index 0000000..2a80943 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs @@ -0,0 +1,265 @@ +using System.Security.Cryptography; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + [TestClass] + public class AutoStreamSerializer_Tests + { + [TestMethod] + public void AutoSerializer_Tests() + { + using MemoryStream ms = new(); + using MemoryStream stream = new(); + stream.Write(RandomNumberGenerator.GetBytes(200000)); + stream.Position = 0; + using TestObject5 test5 = new() + { + AValue = true, + BValue = true, + Stream = stream, + ZValue = true + }; + using MemoryStream stream_a = new(); + stream_a.Write(RandomNumberGenerator.GetBytes(200000)); + stream_a.Position = 0; + using TestObject5a test5a = new() + { + AValue = true, + BValue = true, + Stream = stream_a, + ZValue = true + }; + using TestObject5b test5b = new() + { + AValue = true, + BValue = true, + ZValue = true + }; + ms.WriteSerialized(test5) + .WriteSerialized(test5a) + .WriteSerialized(test5b); + ms.Position = 0; + { + Assert.AreEqual(stream.Length, stream.Position); + using TestObject5 test5_2 = ms.ReadSerialized(); + using Stream? stream2 = test5_2.Stream; + Assert.IsTrue(test5_2.AValue); + Assert.IsFalse(test5_2.BValue); + Assert.IsInstanceOfType(stream2); + Assert.IsFalse(test5_2.ZValue); + Assert.AreEqual(stream.Length, stream2.Length); + byte[] buffer = new byte[stream.Length]; + stream2.Position = 0; + Assert.AreEqual(buffer.Length, stream2.Read(buffer)); + Assert.IsTrue(stream.ToArray().SequenceEqual(buffer)); + } + { + Assert.AreEqual(stream_a.Length, stream_a.Position); + using TestObject5a test5_2 = ms.ReadSerialized(); + using Stream? stream2 = test5_2.Stream; + Assert.IsTrue(test5_2.AValue); + Assert.IsFalse(test5_2.BValue); + Assert.IsInstanceOfType(stream2); + Assert.IsTrue(test5_2.ZValue); + Assert.AreEqual(stream.Length, stream2.Length); + byte[] buffer = new byte[stream.Length]; + stream2.Position = 0; + Assert.AreEqual(buffer.Length, stream2.Read(buffer)); + Assert.IsTrue(stream_a.ToArray().SequenceEqual(buffer)); + } + { + using TestObject5b test5_2 = ms.ReadSerialized(); + using Stream? stream2 = test5_2.Stream; + Assert.IsTrue(test5_2.AValue); + Assert.IsFalse(test5_2.BValue); + Assert.IsNull(stream2); + Assert.IsTrue(test5_2.ZValue); + } + } + + [TestMethod] + public async Task AutoSerializerAsync_Tests() + { + using MemoryStream ms = new(); + using MemoryStream stream = new(); + stream.Write(RandomNumberGenerator.GetBytes(200000)); + stream.Position = 0; + using TestObject5 test5 = new() + { + AValue = true, + BValue = true, + Stream = stream, + ZValue = true + }; + using MemoryStream stream_a = new(); + stream_a.Write(RandomNumberGenerator.GetBytes(200000)); + stream_a.Position = 0; + using TestObject5a test5a = new() + { + AValue = true, + BValue = true, + Stream = stream_a, + ZValue = true + }; + using TestObject5b test5b = new() + { + AValue = true, + BValue = true, + ZValue = true + }; + await ms.WriteSerializedAsync(test5) + .WriteSerializedAsync(test5a) + .WriteSerializedAsync(test5b); + ms.Position = 0; + { + Assert.AreEqual(stream.Length, stream.Position); + using TestObject5 test5_2 = await ms.ReadSerializedAsync(); + using Stream? stream2 = test5_2.Stream; + Assert.IsTrue(test5_2.AValue); + Assert.IsFalse(test5_2.BValue); + Assert.IsInstanceOfType(stream2); + Assert.IsFalse(test5_2.ZValue); + Assert.AreEqual(stream.Length, stream2.Length); + byte[] buffer = new byte[stream.Length]; + stream2.Position = 0; + Assert.AreEqual(buffer.Length, stream2.Read(buffer)); + Assert.IsTrue(stream.ToArray().SequenceEqual(buffer)); + } + { + Assert.AreEqual(stream_a.Length, stream_a.Position); + using TestObject5a test5_2 = await ms.ReadSerializedAsync(); + using Stream? stream2 = test5_2.Stream; + Assert.IsTrue(test5_2.AValue); + Assert.IsFalse(test5_2.BValue); + Assert.IsInstanceOfType(stream2); + Assert.IsTrue(test5_2.ZValue); + Assert.AreEqual(stream.Length, stream2.Length); + byte[] buffer = new byte[stream.Length]; + stream2.Position = 0; + Assert.AreEqual(buffer.Length, stream2.Read(buffer)); + Assert.IsTrue(stream_a.ToArray().SequenceEqual(buffer)); + } + { + using TestObject5b test5_2 = await ms.ReadSerializedAsync(); + using Stream? stream2 = test5_2.Stream; + Assert.IsTrue(test5_2.AValue); + Assert.IsFalse(test5_2.BValue); + Assert.IsNull(stream2); + Assert.IsTrue(test5_2.ZValue); + } + } + + [TestMethod] + public void OptOut_Tests() + { + using MemoryStream ms = new(); + ms.WriteAnyObject(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObject(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObject(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }); + ms.Position = 0; + { + TestObject3 temp = ms.ReadAnyObject(); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3a temp = ms.ReadAnyObject(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3b temp = ms.ReadAnyObject(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsFalse(temp.Field3); + } + } + + [TestMethod] + public async Task OptOutAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAnyObjectAsync(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObjectAsync(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObjectAsync(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }); + ms.Position = 0; + { + TestObject3 temp = await ms.ReadAnyObjectAsync(); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3a temp = await ms.ReadAnyObjectAsync(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3b temp = await ms.ReadAnyObjectAsync(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsFalse(temp.Field3); + } + } + + [TestMethod] + public void OptIn_Tests() + { + using MemoryStream ms = new(); + ms.WriteAnyObject(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObject(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObject(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }); + ms.Position = 0; + { + TestObject4 temp = ms.ReadAnyObject(); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject4a temp = ms.ReadAnyObject(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject4b temp = ms.ReadAnyObject(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsFalse(temp.Field3); + } + } + + [TestMethod] + public async Task OptInAsync_Tests() + { + using MemoryStream ms = new(); + await ms.WriteAnyObjectAsync(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObjectAsync(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }) + .WriteAnyObjectAsync(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }); + ms.Position = 0; + { + TestObject4 temp = await ms.ReadAnyObjectAsync(); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject4a temp = await ms.ReadAnyObjectAsync(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject4b temp = await ms.ReadAnyObjectAsync(); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsFalse(temp.Field3); + } + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs new file mode 100644 index 0000000..10663e3 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs @@ -0,0 +1,102 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + [TestClass] + public class CustomStreamSerializer_Tests + { + private int AsyncDeserializer; + + [TestMethod] + public void Custom_Tests() + { + int syncSerializer = 0, + asyncSerializer = 0, + syncDeserializer = 0; + AsyncDeserializer = 0; + StreamSerializer.SyncSerializer[typeof(TestObject)] = (s, v) => + { + syncSerializer++; + s.Write(((TestObject)v!).Value); + }; + StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (s, v, ct) => + { + asyncSerializer++; + await s.WriteAsync(((TestObject)v!).Value, ct); + }; + StreamSerializer.SyncDeserializer[typeof(TestObject)] = (s, t, v, o) => + { + syncDeserializer++; + return new TestObject() { Value = s.ReadBool() }; + }; + StreamSerializer.AsyncDeserializer[typeof(TestObject)] = DeserializeTestObject; + try + { + using MemoryStream ms = new(); + ms.WriteObject(new TestObject() { Value = true }); + ms.Position = 0; + Assert.IsTrue(ms.ReadObject().Value); + Assert.AreEqual(1, syncSerializer); + Assert.AreEqual(0, asyncSerializer); + Assert.AreEqual(1, syncDeserializer); + Assert.AreEqual(0, AsyncDeserializer); + } + finally + { + StreamSerializer.SyncSerializer.Remove(typeof(TestObject), out _); + StreamSerializer.AsyncSerializer.Remove(typeof(TestObject), out _); + StreamSerializer.SyncDeserializer.Remove(typeof(TestObject), out _); + StreamSerializer.AsyncDeserializer.Remove(typeof(TestObject), out _); + } + } + + [TestMethod] + public async Task CustomAsync_Tests() + { + int syncSerializer = 0, + asyncSerializer = 0, + syncDeserializer = 0; + AsyncDeserializer = 0; + StreamSerializer.SyncSerializer[typeof(TestObject)] = (s, v) => + { + syncSerializer++; + s.Write(((TestObject)v!).Value); + }; + StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (s, v, ct) => + { + asyncSerializer++; + await s.WriteAsync(((TestObject)v!).Value, ct); + }; + StreamSerializer.SyncDeserializer[typeof(TestObject)] = (s, t, v, o) => + { + syncDeserializer++; + return new TestObject() { Value = s.ReadBool() }; + }; + StreamSerializer.AsyncDeserializer[typeof(TestObject)] = DeserializeTestObject; + try + { + using MemoryStream ms = new(); + await ms.WriteObjectAsync(new TestObject() { Value = true }); + ms.Position = 0; + Assert.IsTrue((await ms.ReadObjectAsync()).Value); + Assert.AreEqual(0, syncSerializer); + Assert.AreEqual(1, asyncSerializer); + Assert.AreEqual(0, syncDeserializer); + Assert.AreEqual(1, AsyncDeserializer); + } + finally + { + StreamSerializer.SyncSerializer.Remove(typeof(TestObject), out _); + StreamSerializer.AsyncSerializer.Remove(typeof(TestObject), out _); + StreamSerializer.SyncDeserializer.Remove(typeof(TestObject), out _); + StreamSerializer.AsyncDeserializer.Remove(typeof(TestObject), out _); + } + } + + private async Task DeserializeTestObject(Stream stream, Type type, int version, ISerializerOptions? options, CancellationToken cancellationToken) + { + AsyncDeserializer++; + return new TestObject() { Value = await stream.ReadBoolAsync(version, cancellationToken: cancellationToken) }; + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs new file mode 100644 index 0000000..6bf4dd9 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs @@ -0,0 +1,173 @@ +using System.Collections; +using wan24.Core; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Any_Tests() + { + StreamExtensions.AnyObjectAttributeRequired = false; + try + { + using MemoryStream ms = new(); + using MemoryStream test = new(); + test.Write(new byte[] { 1, 2, 3 }); + test.Position = 0; + (object Object, Action Comparer)[] data = new (object Object, Action Comparer)[] + { + (true, (a,b)=>Assert.AreEqual(a,b)), + ((sbyte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((byte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((short)1234, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ushort)short.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123456, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((uint)int.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (12345678901L, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ulong)long.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123f, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123d, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123m, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (Array.Empty(), (a,b)=>CompareArray((Array)a,(Array)b)), + (string.Empty, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (new bool[]{true,false}, (a,b)=>CompareArray((Array)a,(Array)b)), + (new List(){true,false}, (a,b)=>CompareList((IList)a,(IList)b)), + (new Dictionary(){{0,true},{1,false}}, (a,b)=>CompareDict((IDictionary)a,(IDictionary)b)), + (TestEnum.Zero, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (test, (a,b)=> + { + Assert.IsTrue(b is Stream,a.GetType().ToString()); + using Stream stream=(Stream)b; + stream.Position=0; + Assert.AreEqual(test.Length,stream.Length,a.GetType().ToString()); + byte[] temp=new byte[3]; + Assert.AreEqual(temp.Length,stream.Read(temp),a.GetType().ToString()); + Assert.IsTrue(test.ToArray().SequenceEqual(temp),a.GetType().ToString()); + }), + (new TestObject2(){Value=true}, (a,b)=> + { + TestObject2 toa=(a as TestObject2)!; + Assert.IsTrue(b is TestObject2,a.GetType().ToString()); + TestObject2 tob=(b as TestObject2)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }), + (new TestObject(){Value=true}, (a,b)=> + { + TestObject toa=(a as TestObject)!; + Assert.IsTrue(b is TestObject,a.GetType().ToString()); + TestObject tob=(b as TestObject)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }) + }; + object b; + for (int i = 0; i < data.Length; i++) + { + var info = data[i]; + Logging.WriteInfo(info.Object.GetType().ToString()); + ms.WriteAny(info.Object); + ms.Position = 0; + b = ms.ReadAny(); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + ms.WriteAnyNullable(true); + ms.Position = 0; + Assert.AreEqual(true, ms.ReadAnyNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteAnyNullable(null); + ms.Position = 0; + Assert.IsNull(ms.ReadAnyNullable()); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = true; + } + } + + [TestMethod] + public async Task AnyAsync_Tests() + { + StreamExtensions.AnyObjectAttributeRequired = false; + try + { + using MemoryStream ms = new(); + using MemoryStream test = new(); + test.Write(new byte[] { 1, 2, 3 }); + test.Position = 0; + (object Object, Action Comparer)[] data = new (object Object, Action Comparer)[] + { + (true, (a,b)=>Assert.AreEqual(a,b)), + ((sbyte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((byte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((short)1234, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ushort)short.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123456, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((uint)int.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (12345678901L, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ulong)long.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123f, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123d, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123m, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (Array.Empty(), (a,b)=>CompareArray((Array)a,(Array)b)), + (string.Empty, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (new bool[]{true,false}, (a,b)=>CompareArray((Array)a,(Array)b)), + (new List(){true,false}, (a,b)=>CompareList((IList)a,(IList)b)), + (new Dictionary(){{0,true},{1,false}}, (a,b)=>CompareDict((IDictionary)a,(IDictionary)b)), + (TestEnum.Zero, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (test, (a,b)=> + { + Assert.IsTrue(b is Stream,a.GetType().ToString()); + using Stream stream=(Stream)b; + stream.Position=0; + Assert.AreEqual(test.Length,stream.Length,a.GetType().ToString()); + byte[] temp=new byte[3]; + Assert.AreEqual(temp.Length,stream.Read(temp),a.GetType().ToString()); + Assert.IsTrue(test.ToArray().SequenceEqual(temp),a.GetType().ToString()); + }), + (new TestObject2(){Value=true}, (a,b)=> + { + TestObject2 toa=(a as TestObject2)!; + Assert.IsTrue(b is TestObject2,a.GetType().ToString()); + TestObject2 tob=(b as TestObject2)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }), + (new TestObject(){Value=true}, (a,b)=> + { + TestObject toa=(a as TestObject)!; + Assert.IsTrue(b is TestObject,a.GetType().ToString()); + TestObject tob=(b as TestObject)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }) + }; + object b; + for (int i = 0; i < data.Length; i++) + { + var info = data[i]; + Logging.WriteInfo(info.Object.GetType().ToString()); + await ms.WriteAnyAsync(info.Object); + ms.Position = 0; + b = await ms.ReadAnyAsync(); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + await ms.WriteAnyNullableAsync(true); + ms.Position = 0; + Assert.AreEqual(true, await ms.ReadAnyNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteAnyNullableAsync(null); + ms.Position = 0; + Assert.IsNull(await ms.ReadAnyNullableAsync()); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = true; + } + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs new file mode 100644 index 0000000..8fb2846 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs @@ -0,0 +1,173 @@ +using System.Collections; +using wan24.Core; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Object_Tests() + { + StreamExtensions.AnyObjectAttributeRequired = false; + try + { + using MemoryStream ms = new(); + using MemoryStream test = new(); + test.Write(new byte[] { 1, 2, 3 }); + test.Position = 0; + (object Object, Action Comparer)[] data = new (object Object, Action Comparer)[] + { + (true, (a,b)=>Assert.AreEqual(a,b)), + ((sbyte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((byte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((short)1234, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ushort)short.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123456, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((uint)int.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (12345678901L, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ulong)long.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123f, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123d, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123m, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (Array.Empty(), (a,b)=>CompareArray((Array)a,((dynamic)b).Item1)), + (string.Empty, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (new bool[]{true,false}, (a,b)=>CompareArray((Array)a,(Array)b)), + (new List(){true,false}, (a,b)=>CompareList((IList)a,(IList)b)), + (new Dictionary(){{0,true},{1,false}}, (a,b)=>CompareDict((IDictionary)a,(IDictionary)b)), + (TestEnum.Zero, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (test, (a,b)=> + { + Assert.IsTrue(b is Stream,a.GetType().ToString()); + using Stream stream=(Stream)b; + stream.Position=0; + Assert.AreEqual(test.Length,stream.Length,a.GetType().ToString()); + byte[] temp=new byte[3]; + Assert.AreEqual(temp.Length,stream.Read(temp),a.GetType().ToString()); + Assert.IsTrue(test.ToArray().SequenceEqual(temp),a.GetType().ToString()); + }), + (new TestObject2(){Value=true}, (a,b)=> + { + TestObject2 toa=(a as TestObject2)!; + Assert.IsTrue(b is TestObject2,a.GetType().ToString()); + TestObject2 tob=(b as TestObject2)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }), + (new TestObject(){Value=true}, (a,b)=> + { + TestObject toa=(a as TestObject)!; + Assert.IsTrue(b is TestObject,a.GetType().ToString()); + TestObject tob=(b as TestObject)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }) + }; + object b; + for (int i = 0; i < data.Length; i++) + { + var info = data[i]; + Logging.WriteInfo(info.Object.GetType().ToString()); + ms.WriteObject(info.Object); + ms.Position = 0; + b = ms.ReadObject(info.Object.GetType()); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + ms.WriteObjectNullable(true); + ms.Position = 0; + Assert.AreEqual(true, ms.ReadObjectNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteObjectNullable(null); + ms.Position = 0; + Assert.IsNull(ms.ReadObjectNullable(typeof(bool))); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = true; + } + } + + [TestMethod] + public async Task ObjectAsync_Tests() + { + StreamExtensions.AnyObjectAttributeRequired = false; + try + { + using MemoryStream ms = new(); + using MemoryStream test = new(); + test.Write(new byte[] { 1, 2, 3 }); + test.Position = 0; + (object Object, Action Comparer)[] data = new (object Object, Action Comparer)[] + { + (true, (a,b)=>Assert.AreEqual(a,b)), + ((sbyte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((byte)123, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((short)1234, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ushort)short.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123456, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((uint)int.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (12345678901L, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + ((ulong)long.MaxValue+1, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123f, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123d, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (123m, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (Array.Empty(), (a,b)=>CompareArray((Array)a,((dynamic)b).Item1)), + (string.Empty, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (new bool[]{true,false}, (a,b)=>CompareArray((Array)a,(Array)b)), + (new List(){true,false}, (a,b)=>CompareList((IList)a,(IList)b)), + (new Dictionary(){{0,true},{1,false}}, (a,b)=>CompareDict((IDictionary)a,(IDictionary)b)), + (TestEnum.Zero, (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())), + (test, (a,b)=> + { + Assert.IsTrue(b is Stream,a.GetType().ToString()); + using Stream stream=(Stream)b; + stream.Position=0; + Assert.AreEqual(test.Length,stream.Length,a.GetType().ToString()); + byte[] temp=new byte[3]; + Assert.AreEqual(temp.Length,stream.Read(temp),a.GetType().ToString()); + Assert.IsTrue(test.ToArray().SequenceEqual(temp),a.GetType().ToString()); + }), + (new TestObject2(){Value=true}, (a,b)=> + { + TestObject2 toa=(a as TestObject2)!; + Assert.IsTrue(b is TestObject2,a.GetType().ToString()); + TestObject2 tob=(b as TestObject2)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }), + (new TestObject(){Value=true}, (a,b)=> + { + TestObject toa=(a as TestObject)!; + Assert.IsTrue(b is TestObject,a.GetType().ToString()); + TestObject tob=(b as TestObject)!; + Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); + }) + }; + object b; + for (int i = 0; i < data.Length; i++) + { + var info = data[i]; + Logging.WriteInfo(info.Object.GetType().ToString()); + await ms.WriteObjectAsync(info.Object); + ms.Position = 0; + b = await ms.ReadObjectAsync(info.Object.GetType()); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + await ms.WriteObjectNullableAsync(true); + ms.Position = 0; + Assert.AreEqual(true, await ms.ReadObjectNullableAsync()); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteObjectNullableAsync(null); + ms.Position = 0; + Assert.IsNull(await ms.ReadObjectNullableAsync(typeof(bool))); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = true; + } + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs new file mode 100644 index 0000000..959453c --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs @@ -0,0 +1,68 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + [TestClass] + public class StreamSerializer_Tests + { + [TestMethod] + public void CustomVersion_Tests() + { + StreamSerializer.Version = StreamSerializer.VERSION | (1 << 8); + try + { + using MemoryStream ms = new(); + ms.WriteSerializerVersion(); + ms.Position = 0; + int temp = ms.ReadSerializerVersion(); + Assert.AreEqual(StreamSerializer.Version, temp); + Assert.AreEqual(1, temp >> 8); + } + finally + { + StreamSerializer.Version = StreamSerializer.VERSION; + } + } + + [TestMethod] + public async Task CustomVersionAsync_Tests() + { + StreamSerializer.Version = StreamSerializer.VERSION | (1 << 8); + try + { + using MemoryStream ms = new(); + await ms.WriteSerializerVersionAsync(); + ms.Position = 0; + int temp = await ms.ReadSerializerVersionAsync(); + Assert.AreEqual(StreamSerializer.Version, temp); + Assert.AreEqual(1, temp >> 8); + } + finally + { + StreamSerializer.Version = StreamSerializer.VERSION; + } + } + + [TestMethod] + public void IsTypeAllowed_Tests() + { + Assert.IsFalse(StreamSerializer.IsTypeAllowed(typeof(StreamSerializer_Tests))); + StreamSerializer.AllowedTypes.Add(typeof(StreamSerializer_Tests)); + try + { + Assert.IsTrue(StreamSerializer.IsTypeAllowed(typeof(StreamSerializer_Tests))); + } + finally + { + StreamSerializer.AllowedTypes.TryTake(out _); + } + Assert.IsFalse(StreamSerializer.IsTypeAllowed(typeof(TestObject))); + Assert.IsTrue(StreamSerializer.IsTypeAllowed(typeof(TestObject2))); + Assert.IsTrue(StreamSerializer.IsTypeAllowed(typeof(TestObject2[]))); + Assert.IsFalse(StreamSerializer.IsTypeAllowed(typeof(Array))); + Assert.IsTrue(StreamSerializer.IsTypeAllowed(typeof(List))); + Assert.IsFalse(StreamSerializer.IsTypeAllowed(typeof(List))); + Assert.IsTrue(StreamSerializer.IsTypeAllowed(typeof(FileStream))); + } + } +} diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs index ed59d1d..109a4f0 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs @@ -232,7 +232,7 @@ public void InitDefaultValues() usedDefaultValue = new(); try { - Bitmap bits = new(defaultValueBits); + Bitmap bits = new(defaultValueBits!); PropertyInfoExt pi; for (int i = 0, len = properties.Length; i < len; i++) { @@ -250,7 +250,7 @@ public void InitDefaultValues() } finally { - StreamSerializer.BufferPool.Return(defaultValueBits); + StreamSerializer.BufferPool.Return(defaultValueBits!); } return usedDefaultValue; } diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index 66b78b7..81b30b7 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -115,6 +115,7 @@ public static class SerializerHelper #endif public static bool IsNumber(this ObjectTypes type) => type.RemoveFlags() switch { + ObjectTypes.Byte => true, ObjectTypes.Short => true, ObjectTypes.Int => true, ObjectTypes.Long => true, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs index 69a8264..05a95d0 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs @@ -1,5 +1,4 @@ using System.ComponentModel.DataAnnotations; -using System.Reflection; using System.Runtime; using System.Runtime.CompilerServices; using System.Text; @@ -27,9 +26,9 @@ public static T ReadObject(this Stream stream, int? version = null, ISerializ => SerializerException.Wrap(() => { if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) return (T)ReadSerializedObject(stream, typeof(T), version); - StreamSerializer.Deserialize_Delegate deserializer = StreamSerializer.FindDeserializer(typeof(T)) - ?? throw new SerializerException($"No deserializer found for {typeof(T)}"); - return (T)(deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{typeof(T)} deserialized to NULL")); + return StreamSerializer.FindDeserializer(typeof(T)) is StreamSerializer.Deserialize_Delegate deserializer + ? (T)(deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{typeof(T)} deserialized to NULL")) + : (T)ReadAnyObject(stream, typeof(T), version); }); /// @@ -48,9 +47,9 @@ public static object ReadObject(this Stream stream, Type type, int? version = nu => SerializerException.Wrap(() => { if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); - StreamSerializer.Deserialize_Delegate deserializer = StreamSerializer.FindDeserializer(type) - ?? throw new SerializerException($"No deserializer found for {type}"); - return deserializer(stream, type, version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{type} deserialized to NULL"); + return StreamSerializer.FindDeserializer(type) is StreamSerializer.Deserialize_Delegate deserializer + ? (deserializer(stream, type, version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{type} deserialized to NULL")) + : ReadAnyObject(stream, type, version); }); /// @@ -72,7 +71,9 @@ public static Task ReadObjectAsync(this Stream stream, int? version = null if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) return (T)await ReadSerializedObjectAsync(stream, typeof(T), version, cancellationToken).DynamicContext(); if (StreamSerializer.FindAsyncDeserializer(typeof(T)) is not StreamSerializer.AsyncDeserialize_Delegate deserializer) - return ReadObject(stream, version, options); + return StreamSerializer.FindDeserializer(typeof(T)) is not null + ? ReadObject(stream, version, options) + : (T)ReadAnyObject(stream, typeof(T), version); Task task = deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options, cancellationToken); await task.DynamicContext(); return task.GetResult(); @@ -92,10 +93,10 @@ public static Task ReadObjectAsync(this Stream stream, int? version = null [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static Task ReadObjectAsync( - this Stream stream, - Type type, - int? version = null, - ISerializerOptions? options = null, + this Stream stream, + Type type, + int? version = null, + ISerializerOptions? options = null, CancellationToken cancellationToken = default ) => SerializerException.WrapAsync(async () => @@ -103,7 +104,9 @@ public static Task ReadObjectAsync( if (typeof(IStreamSerializer).IsAssignableFrom(type)) return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); if (StreamSerializer.FindAsyncDeserializer(type) is not StreamSerializer.AsyncDeserialize_Delegate deserializer) - return ReadObject(stream, type, version, options); + return StreamSerializer.FindDeserializer(type) is not null + ? ReadObject(stream, type, version, options) + : ReadAnyObject(stream, type, version); Task task = deserializer(stream, type, version ?? StreamSerializer.Version, options, cancellationToken); await task.DynamicContext(); return task.GetResult(type); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs index fb386d7..c72b35b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs @@ -59,8 +59,8 @@ private static Stream ReadStreamInt( { ArgumentValidationHelper.EnsureValidArgument(nameof(target), target.CanWrite, () => "Writable stream required"); if (maxBufferSize != null) ArgumentValidationHelper.EnsureValidArgument(nameof(maxBufferSize), 1, int.MaxValue, maxBufferSize.Value); - ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, int.MaxValue, minLen); - ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), 0, minLen, maxLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, long.MaxValue, minLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), minLen, long.MaxValue, maxLen); len ??= stream.ReadNumber(version, pool); if (len == 0) { @@ -213,8 +213,8 @@ CancellationToken cancellationToken { ArgumentValidationHelper.EnsureValidArgument(nameof(target), target.CanWrite, () => "Writable stream required"); if (maxBufferSize != null) ArgumentValidationHelper.EnsureValidArgument(nameof(maxBufferSize), 1, int.MaxValue, maxBufferSize.Value); - ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, int.MaxValue, minLen); - ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), 0, minLen, maxLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, long.MaxValue, minLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), minLen, long.MaxValue, maxLen); len ??= await stream.ReadNumberAsync(version, pool, cancellationToken).DynamicContext(); if (len == 0) { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index ec2de0a..64bd222 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -22,16 +22,10 @@ public static Stream WriteAny(this Stream stream, object obj) (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); Write(stream, (byte)objType); if (writeType) WriteString(stream, type.ToString()); - if (writeObject) - if (objType.IsNumber()) - { - WriteNumber(stream, obj); - } - else - { - WriteObject(stream, obj); - } - return stream; + if (!writeObject) return stream; + return objType.IsNumber() + ? WriteNumber(stream, obj) + : WriteObject(stream, obj); } /// @@ -50,16 +44,10 @@ public static async Task WriteAnyAsync(this Stream stream, object obj, C (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); if (writeType) await WriteStringAsync(stream, type.ToString(), cancellationToken).DynamicContext(); - if (writeObject) - if (objType.IsNumber()) - { - await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext(); - } - else - { - await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); - } - return stream; + if (!writeObject) return stream; + return objType.IsNumber() + ? await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext() + : await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); } /// @@ -85,17 +73,7 @@ public static Task WriteAnyAsync(this Task stream, object obj, C [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static Stream WriteAnyNullable(this Stream stream, object? obj) - { - if (obj == null) - { - Write(stream, (byte)ObjectTypes.Null); - } - else - { - WriteAny(stream, obj); - } - return stream; - } + => obj == null ? Write(stream, (byte)ObjectTypes.Null) : WriteAny(stream, obj); /// /// Write any object @@ -109,17 +87,9 @@ public static Stream WriteAnyNullable(this Stream stream, object? obj) [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - { - if (obj == null) - { - await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); - } - return stream; - } + => obj == null + ? await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext() + : await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); /// /// Write any object diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index 413ad09..76d82f3 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -5,6 +5,7 @@ using System.Runtime.CompilerServices; using System.Runtime; using wan24.Core; +using System.Diagnostics; namespace wan24.StreamSerializerExtensions { @@ -403,6 +404,9 @@ public static Type LoadType(string name) /// Is allowed? public static bool IsTypeAllowed(Type type) { + if (type == typeof(List)) Debugger.Break(); + // Deny abstract types + if (type.IsAbstract || type.IsInterface) return false; // Allow all enumeration types if (type.IsEnum) return true; // Get the final element type of an array type @@ -411,7 +415,7 @@ public static bool IsTypeAllowed(Type type) // Allow registered allowed types or serializable types if (AllowedTypes.Contains(finalType) || typeof(IStreamSerializer).IsAssignableFrom(finalType)) return true; // Validate generic type arguments also (btw. no risk for an endless recursion here) - if (finalType.IsGenericType) foreach (Type gta in finalType.GetGenericArguments()) if (IsTypeAllowed(gta)) return false; + if (finalType.IsGenericType) foreach (Type gta in finalType.GetGenericArguments()) if (!IsTypeAllowed(gta)) return false; // Allow inheriting types if (AllowedTypes.Any(t => t.IsAssignableFrom(finalType))) return true; // Deny diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs index 0b16ef1..8a6d072 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -172,8 +172,8 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position /// Stream to use for deserializing an embedded stream public virtual Stream? GetStream(object? obj, PropertyInfo? property, Stream stream, int version, CancellationToken cancellationToken = default) { - if (obj == null) ArgumentValidationHelper.EnsureValidArgument(nameof(obj), property); - if (property == null) ArgumentValidationHelper.EnsureValidArgument(nameof(property), obj); + if (obj == null) ArgumentValidationHelper.EnsureValidArgument(nameof(obj), property == null); + if (property == null) ArgumentValidationHelper.EnsureValidArgument(nameof(property), obj == null); if (StreamFactory == null) { if (StreamFactoryType == null) return null; From af35fef789c5cd105299ee23fbf927de4313501a Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 21:42:54 +0200 Subject: [PATCH 10/17] Update Stream-Serializer-Extensions.csproj --- .../Stream-Serializer-Extensions.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj index 0c7623c..57fc492 100644 --- a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj +++ b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj @@ -34,7 +34,7 @@ - + From cf5b8a1fcdef6a14dbddd825367ba7dd74b93d58 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 22:24:15 +0200 Subject: [PATCH 11/17] Update --- README.md | 61 ++++++--- ...Extensions.AutoStreamSerializerBase-1.html | 45 ++++++- ...tensions.AutoStreamSerializerConfig-1.html | 2 +- ...erExtensions.AutoStreamSerializerInfo.html | 8 +- ...erExtensions.DefaultSerializerOptions.html | 8 +- ....DisposableAutoStreamSerializerBase-1.html | 96 +++++++++++++- ...nsions.DisposableStreamSerializerBase.html | 99 +++++++++++++- ...numerator.StreamAsyncEnumeratorBase-1.html | 94 ++++++++++++- ...ons.Enumerator.StreamEnumeratorBase-1.html | 94 ++++++++++++- ...merator.StreamNumberAsyncEnumerator-1.html | 85 +++++++++++- ...s.Enumerator.StreamNumberEnumerator-1.html | 85 +++++++++++- ...tor.StreamSerializerAsyncEnumerator-1.html | 85 +++++++++++- ...umerator.StreamSerializerEnumerator-1.html | 85 +++++++++++- ...numerator.StreamStringAsyncEnumerator.html | 85 +++++++++++- ...ons.Enumerator.StreamStringEnumerator.html | 85 +++++++++++- ...xtensions.IAutoStreamSerializerConfig.html | 2 +- ...rializerExtensions.ISerializerOptions.html | 4 +- ...SerializerExtensions.SerializerHelper.html | 18 +-- ...lizerExtensions.SerializerOptionsBase.html | 12 +- ...rExtensions.StreamSerializerAttribute.html | 36 ++--- ...alizerExtensions.StreamSerializerBase.html | 48 ++++++- docs/index.html | 47 ++++--- docs/manifest.json | 42 +++--- docs/xrefmap.yml | 125 ++++++++---------- .../index.md | 61 ++++++--- src/Stream-Serializer-Extensions Docs/log.txt | 4 + src/Stream-Serializer-Extensions/README.md | 61 ++++++--- 27 files changed, 1217 insertions(+), 260 deletions(-) diff --git a/README.md b/README.md index b53b42e..d4c928f 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,27 @@ The built in serializer supports binary serialization of - possibly any other objects with a parameterless public constructor - streams +and exports an asynchronous fluent API for writing operations, too. + **NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. It's possible to override the build in serializers, and to add custom type serializers, too. +Using an attribute for your types and their properties you can make them +binary serializable with backward compatibility, easily. + +The serializer is designed to produce only a minimum of absolutely required +overhead, which sometimes can result in even less data, too (compared to +usually used serialization methods). + +The API is fully synchronous and asynchronous - you choose depending on the +used stream type. + +Cold storage of serialized sequences can be challenging. Using the build in +sequencer versioning you can ensure that a sequence can be deserialized at any +time after a component was updated. + ## Methods The `Write` and `WriteAsync` methods will be extended with supported types, @@ -77,7 +93,8 @@ The `WriteNumber*` and `ReadNumber*` methods will find the best matching serialization method for a given number. For example, if you give an Int32 value which could be fit into an UInt16, the value will be converted for serialization, and you can save one byte (because the methods will store the -used numeric type in an extra byte). +used numeric type in an extra byte). There's also a chance to end up with only +a single byte when serializing a `decimal`, if the value was zero, for example. **NOTE**: All numbers will be serialized using little endian. @@ -91,7 +108,8 @@ When deserializing an embedded stream using generic read-methods (like `ReadObject` or `ReadAny`), a temporary `FileStream` will be created, which will delete the temporary file when disposing. You can define a stream factory using `StreamSerializerAttribute.StreamFactoryType` and -`StreamSerializerAttribute.StreamFactoryMethod`. +`StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom +`StreamSerializerAttribute` and override the `GetStream` method. ## Structure serialization @@ -118,9 +136,14 @@ only: - No object referencing fields - Fixed length contents +**CAUTION**: If the structure changes, it can't be deserialized using +`Marshal` anymre. For cold storage consider to implement +`IStreamSerializerVersion` and use `WriteSerializedStruct*` and +`ReadSerializedStruct*` instead. + **TIP**: A structure may implement the `IStreamSerializer` inferface and be -written using the `WriteSerialized*` methods. For reading you can use the -`ReadSerializedStruct*` methods. +written using the `WriteSerializedStruct*` methods. For reading you can use +the `ReadSerializedStruct*` methods. ## Custom serializer @@ -329,23 +352,6 @@ public class YourType : StreamSerializerBase } ``` -When deserializing using the `ReadAny*` methods, the target type needs to be -loaded from the environment. You can add your own type loading handler using -the `StreamSerializer.OnLoadType` event. The library uses the `wan24-Core` -NuGet package. If you want to use the `wan24-Core` type helper for loading -types: - -```cs -StreamSerializer.OnInit += (e) => StreamSerializer.OnLoadType += (s, e) => -{ - if(e.Type != null) return; - e.Type = TypeHelper.Instance.GetType(e.Name); -}; -``` - -**CAUTION**: By adding the `wan24-Core` type helper like this, any type may be -deserialized, which ~~may be~~ is a security issue! - When using the `StreamSerializerBase` base class, you can also give a value for the parameter `objectVersion` to the base constructor to enable object versioning. This makes it possible that newer object versions are able to @@ -381,6 +387,19 @@ access the versioning information of an object, you can use the optional `IStreamSerializerVersion` interface, which is implemented by `StreamSerializerBase`, too. +### Type instance factory + +When deserializing an object which implements the `IStreamSerializer` +interface, but needs a special construction, you can register an instance +factory: + +```cs +StreamSerializer.InstanceFactories[typeof(YourType)] = (type, stream, version, options) => +{ + // Return the deserialized instance here +}; +``` + ## Deserializer limitations When deserializing variable length objects (like arrays or strings), you can diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html index 976baa0..960b276 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html @@ -79,11 +79,14 @@

    Inheritance
    System.Object
    - -
    AutoStreamSerializerBase<T>
    +
    wan24.ObjectValidation.ValidatableObjectBase
    + +
    AutoStreamSerializerBase<T>
    Implements
    +
    wan24.ObjectValidation.IObjectValidatable
    +
    System.ComponentModel.DataAnnotations.IValidatableObject
    @@ -114,12 +117,42 @@
    Inherited Members
    +
    + wan24.ObjectValidation.ValidatableObjectBase.Validate(System.ComponentModel.DataAnnotations.ValidationContext) +
    +
    + wan24.ObjectValidation.ValidatableObjectBase.System.ComponentModel.DataAnnotations.IValidatableObject.Validate(System.ComponentModel.DataAnnotations.ValidationContext) +
    +
    + wan24.ObjectValidation.ValidatableObjectBase.ObjectValidatable(wan24.ObjectValidation.IObjectValidatable) +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class AutoStreamSerializerBase<T> : StreamSerializerBase, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : AutoStreamSerializerBase<T>
    +
    public abstract class AutoStreamSerializerBase<T> : StreamSerializerBase, IObjectValidatable, IValidatableObject, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : AutoStreamSerializerBase<T>
    Type Parameters
    @@ -422,6 +455,12 @@
    Returns

    Implements

    +
    + wan24.ObjectValidation.IObjectValidatable +
    +
    + System.ComponentModel.DataAnnotations.IValidatableObject +
    diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html index d9c6b27..188a0a8 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html @@ -257,7 +257,7 @@
    Property Value
    - OrderedDictionary<System.String, AutoStreamSerializerInfo> + wan24.Core.OrderedDictionary<System.String, AutoStreamSerializerInfo> diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html index b5ed7c5..4b20d00 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html @@ -115,13 +115,13 @@

    Constructors

    | - Improve this Doc + Improve this Doc View Source -

    AutoStreamSerializerInfo(PropertyInfoExt)

    +

    AutoStreamSerializerInfo(PropertyInfoExt)

    Constructor

    @@ -140,7 +140,7 @@
    Parameters
    - PropertyInfoExt + wan24.Core.PropertyInfoExt property

    Property

    @@ -330,7 +330,7 @@
    Property Value
    - PropertyInfoExt + wan24.Core.PropertyInfoExt diff --git a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html index f169486..4fe7dcc 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html @@ -138,19 +138,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc View Source -

    DefaultSerializerOptions(Nullable<PropertyInfoExt>, StreamSerializerAttribute)

    +

    DefaultSerializerOptions(PropertyInfoExt, StreamSerializerAttribute)

    Constructor

    Declaration
    -
    public DefaultSerializerOptions(PropertyInfoExt? property, StreamSerializerAttribute attr = null)
    +
    public DefaultSerializerOptions(PropertyInfoExt property, StreamSerializerAttribute attr = null)
    Parameters
    @@ -163,7 +163,7 @@
    Parameters
    - + diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html index 272540d..cd34127 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html @@ -79,12 +79,17 @@

    Inheritance
    System.Object
    - -
    DisposableAutoStreamSerializerBase<T>
    +
    wan24.Core.DisposableBase
    + +
    DisposableAutoStreamSerializerBase<T>
    Implements
    -
    IObjectValidatable
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    +
    wan24.ObjectValidation.IObjectValidatable
    +
    System.ComponentModel.DataAnnotations.IValidatableObject
    @@ -115,12 +120,81 @@
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.Dispose(System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class DisposableAutoStreamSerializerBase<T> : DisposableStreamSerializerBase, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : DisposableAutoStreamSerializerBase<T>
    +
    public abstract class DisposableAutoStreamSerializerBase<T> : DisposableStreamSerializerBase, IDisposableObject, IDisposable, IAsyncDisposable, IObjectValidatable, IValidatableObject, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : DisposableAutoStreamSerializerBase<T>
    Type Parameters
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt property

    Target property

    @@ -423,7 +497,19 @@
    Returns

    Implements

    - IObjectValidatable + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    +
    + wan24.ObjectValidation.IObjectValidatable +
    +
    + System.ComponentModel.DataAnnotations.IValidatableObject
    IAutoStreamSerializer diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html index 29ddd75..7355e39 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html @@ -79,20 +79,97 @@

    Inheritance
    System.Object
    -
    DisposableStreamSerializerBase
    - +
    wan24.Core.DisposableBase
    +
    DisposableStreamSerializerBase
    +
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    -
    IObjectValidatable
    +
    wan24.ObjectValidation.IObjectValidatable
    +
    System.ComponentModel.DataAnnotations.IValidatableObject
    +
    +
    +
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.Dispose(System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class DisposableStreamSerializerBase : DisposableBase, IStreamSerializerVersion, IStreamSerializer
    +
    public abstract class DisposableStreamSerializerBase : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable, IStreamSerializerVersion, IStreamSerializer, IObjectValidatable, IValidatableObject

    Constructors

    @@ -686,6 +763,15 @@
    Returns

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    @@ -693,7 +779,10 @@

    Implements

    IStreamSerializer
    - IObjectValidatable + wan24.ObjectValidation.IObjectValidatable +
    +
    + System.ComponentModel.DataAnnotations.IValidatableObject

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html index 86635d9..85e1290 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html @@ -79,20 +79,93 @@

    Inheritance
    System.Object
    -
    StreamAsyncEnumeratorBase<T>
    - - - +
    wan24.Core.DisposableBase
    +
    StreamAsyncEnumeratorBase<T>
    + + +
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    IAsyncEnumerator<T>
    +
    +
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class StreamAsyncEnumeratorBase<T> : DisposableBase
    +
    public abstract class StreamAsyncEnumeratorBase<T> : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable
    Type Parameters
    @@ -346,6 +419,8 @@
    Parameters
    +
    Overrides
    +
    wan24.Core.DisposableBase.Dispose(System.Boolean)
    | Improve this Doc @@ -488,6 +563,15 @@
    Returns

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    IAsyncEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html index aeca1d7..e9576dd 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html @@ -79,20 +79,93 @@

    Inheritance
    System.Object
    -
    StreamEnumeratorBase<T>
    - - - +
    wan24.Core.DisposableBase
    +
    StreamEnumeratorBase<T>
    + + +
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    System.Collections.IEnumerator<T>
    +
    +
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class StreamEnumeratorBase<T> : DisposableBase
    +
    public abstract class StreamEnumeratorBase<T> : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable
    Type Parameters
    @@ -340,6 +413,8 @@
    Parameters
    +
    Overrides
    +
    wan24.Core.DisposableBase.Dispose(System.Boolean)
    | Improve this Doc @@ -523,6 +598,15 @@
    Returns

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    System.Collections.IEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html index 697b54f..39ac32e 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html @@ -79,11 +79,15 @@

    Inheritance
    System.Object
    - -
    StreamNumberAsyncEnumerator<T>
    +
    wan24.Core.DisposableBase
    + +
    StreamNumberAsyncEnumerator<T>
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    IAsyncEnumerator<T>
    @@ -112,12 +116,78 @@
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamNumberAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T> where T : struct, IConvertible
    +
    public class StreamNumberAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : struct, IConvertible
    Type Parameters
    @@ -304,6 +374,15 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<T>.ReadObjectAsync()

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    IAsyncEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html index 46e5ef2..4c3c0c3 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html @@ -79,11 +79,15 @@

    Inheritance
    System.Object
    - -
    StreamNumberEnumerator<T>
    +
    wan24.Core.DisposableBase
    + +
    StreamNumberEnumerator<T>
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    System.Collections.IEnumerator<T>
    @@ -118,12 +122,78 @@
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamNumberEnumerator<T> : StreamEnumeratorBase<T> where T : struct, IConvertible
    +
    public class StreamNumberEnumerator<T> : StreamEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : struct, IConvertible
    Type Parameters
    @@ -298,6 +368,15 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<T>.ReadObject()

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    System.Collections.IEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html index b478949..6d0159a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html @@ -79,11 +79,15 @@

    Inheritance
    System.Object
    - -
    StreamSerializerAsyncEnumerator<T>
    +
    wan24.Core.DisposableBase
    + +
    StreamSerializerAsyncEnumerator<T>
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    IAsyncEnumerator<T>
    @@ -112,12 +116,78 @@
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamSerializerAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T> where T : class, IStreamSerializer
    +
    public class StreamSerializerAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : class, IStreamSerializer
    Type Parameters
    @@ -220,6 +290,15 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<T>.ReadObjectAsync()

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    IAsyncEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html index 1570f13..9891c53 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html @@ -79,11 +79,15 @@

    Inheritance
    System.Object
    - -
    StreamSerializerEnumerator<T>
    +
    wan24.Core.DisposableBase
    + +
    StreamSerializerEnumerator<T>
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    System.Collections.IEnumerator<T>
    @@ -115,12 +119,78 @@
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamSerializerEnumerator<T> : StreamEnumeratorBase<T> where T : class, IStreamSerializer
    +
    public class StreamSerializerEnumerator<T> : StreamEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : class, IStreamSerializer
    Type Parameters
    @@ -251,6 +321,15 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<T>.ReadObject()

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    System.Collections.IEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html index e2a501d..d7eaf48 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html @@ -79,11 +79,15 @@

    Inheritance
    System.Object
    - -
    StreamStringAsyncEnumerator
    +
    wan24.Core.DisposableBase
    + +
    StreamStringAsyncEnumerator
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    IAsyncEnumerator<System.String>
    @@ -112,12 +116,78 @@
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase<string>
    +
    public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase<string>, IDisposableObject, IDisposable, IAsyncDisposable

    Constructors

    @@ -360,6 +430,15 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<System.String>.ReadObjectAsync()

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    IAsyncEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html index 5dedae0..4cd8301 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html @@ -79,11 +79,15 @@

    Inheritance
    System.Object
    -
    StreamEnumeratorBase<System.String>
    -
    StreamStringEnumerator
    +
    wan24.Core.DisposableBase
    +
    StreamEnumeratorBase<System.String>
    +
    StreamStringEnumerator
    Implements
    +
    wan24.Core.IDisposableObject
    +
    System.IDisposable
    +
    System.IAsyncDisposable
    System.Collections.IEnumerator<System.String>
    @@ -118,12 +122,78 @@
    Inherited Members
    +
    + wan24.Core.DisposableBase.DisposeSyncObject +
    +
    + wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) +
    +
    + wan24.Core.DisposableBase.DisposeCore() +
    +
    + wan24.Core.DisposableBase.DisposeAttributes() +
    +
    + wan24.Core.DisposableBase.DisposeAttributesAsync() +
    +
    + wan24.Core.DisposableBase.Dispose() +
    +
    + wan24.Core.DisposableBase.DisposeAsync() +
    +
    + wan24.Core.DisposableBase.IsDisposing +
    +
    + wan24.Core.DisposableBase.IsDisposed +
    +
    + wan24.Core.DisposableBase.OnDisposing +
    +
    + wan24.Core.DisposableBase.OnDisposed +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamStringEnumerator : StreamEnumeratorBase<string>
    +
    public class StreamStringEnumerator : StreamEnumeratorBase<string>, IDisposableObject, IDisposable, IAsyncDisposable

    Constructors

    @@ -354,6 +424,15 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<System.String>.ReadObject()

    Implements

    +
    + wan24.Core.IDisposableObject +
    +
    + System.IDisposable +
    +
    + System.IAsyncDisposable +
    System.Collections.IEnumerator<>
    diff --git a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html index a55d782..bcfb239 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html +++ b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html @@ -172,7 +172,7 @@
    Property Value
    - + diff --git a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html index 8bcfdf2..cc4f02e 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html @@ -129,7 +129,7 @@

    Declaration
    -
    PropertyInfoExt? Property { get; }
    +
    PropertyInfoExt Property { get; }
    Property Value
    OrderedDictionary<System.String, AutoStreamSerializerInfo>wan24.Core.OrderedDictionary<System.String, AutoStreamSerializerInfo>
    @@ -141,7 +141,7 @@
    Property Value
    - + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html index 0bbcece..72705a2 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -308,13 +308,13 @@
    Returns
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt
    | - Improve this Doc + Improve this Doc View Source -

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    +

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get the key serializer options

    @@ -334,7 +334,7 @@
    Parameters
    - PropertyInfoExt + wan24.Core.PropertyInfoExt pi

    Property

    @@ -565,13 +565,13 @@
    Returns
    | - Improve this Doc + Improve this Doc View Source -

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    +

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get the serializer options

    @@ -591,7 +591,7 @@
    Parameters
    - PropertyInfoExt + wan24.Core.PropertyInfoExt pi

    Property

    @@ -634,13 +634,13 @@
    Returns
    | - Improve this Doc + Improve this Doc View Source -

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    +

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get the value serializer options

    @@ -660,7 +660,7 @@
    Parameters
    - PropertyInfoExt + wan24.Core.PropertyInfoExt pi

    Property

    diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html index 7c3e491..6b4995a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html @@ -120,19 +120,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc View Source -

    SerializerOptionsBase(Nullable<PropertyInfoExt>, StreamSerializerAttribute)

    +

    SerializerOptionsBase(PropertyInfoExt, StreamSerializerAttribute)

    Constructor

    Declaration
    -
    protected SerializerOptionsBase(PropertyInfoExt? property, StreamSerializerAttribute attr = null)
    +
    protected SerializerOptionsBase(PropertyInfoExt property, StreamSerializerAttribute attr = null)
    Parameters
    @@ -145,7 +145,7 @@
    Parameters
    - + @@ -205,7 +205,7 @@

    Declaration
    -
    public PropertyInfoExt? Property { get; }
    +
    public PropertyInfoExt Property { get; }
    Property Value
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt property

    Target property

    @@ -217,7 +217,7 @@
    Property Value
    - + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html index e665399..106cd6b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html @@ -944,19 +944,19 @@

    Methods

    | - Improve this Doc + Improve this Doc View Source -

    CreateSerializerOptions(Nullable<Type>, Nullable<PropertyInfoExt>)

    +

    CreateSerializerOptions(Nullable<Type>, PropertyInfoExt)

    Create serializer options

    Declaration
    -
    protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfoExt? property)
    +
    protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfoExt property)
    Parameters
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt
    @@ -975,7 +975,7 @@
    Parameters
    - + @@ -1000,19 +1000,19 @@
    Returns
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt property

    Property

    | - Improve this Doc + Improve this Doc View Source -

    GetKeySerializerOptions(Nullable<PropertyInfoExt>, Stream, Int32, CancellationToken)

    +

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get key serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt property, Stream stream, int version, CancellationToken cancellationToken = null)
    Parameters
    @@ -1025,7 +1025,7 @@
    Parameters
    - + @@ -1166,7 +1166,7 @@
    Returns
    - + @@ -1174,19 +1174,19 @@
    Returns
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt property

    Target property

    IEnumerable<PropertyInfoExt>IEnumerable<wan24.Core.PropertyInfoExt>

    Properties

    | - Improve this Doc + Improve this Doc View Source -

    GetSerializerOptions(Nullable<PropertyInfoExt>, Stream, Int32, CancellationToken)

    +

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt property, Stream stream, int version, CancellationToken cancellationToken = null)
    Parameters
    @@ -1199,7 +1199,7 @@
    Parameters
    - + @@ -1366,19 +1366,19 @@
    Returns
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt property

    Target property

    | - Improve this Doc + Improve this Doc View Source -

    GetValueSerializerOptions(Nullable<PropertyInfoExt>, Stream, Int32, CancellationToken)

    +

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    Get value serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt property, Stream stream, int version, CancellationToken cancellationToken = null)
    Parameters
    @@ -1391,7 +1391,7 @@
    Parameters
    - + @@ -1482,7 +1482,7 @@
    Returns
    - + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html index b412260..a1d201b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html @@ -79,19 +79,55 @@

    Inheritance
    System.Object
    -
    StreamSerializerBase
    - +
    wan24.ObjectValidation.ValidatableObjectBase
    +
    StreamSerializerBase
    +
    Implements
    +
    wan24.ObjectValidation.IObjectValidatable
    +
    System.ComponentModel.DataAnnotations.IValidatableObject
    +
    +
    Inherited Members
    +
    + wan24.ObjectValidation.ValidatableObjectBase.Validate(System.ComponentModel.DataAnnotations.ValidationContext) +
    +
    + wan24.ObjectValidation.ValidatableObjectBase.System.ComponentModel.DataAnnotations.IValidatableObject.Validate(System.ComponentModel.DataAnnotations.ValidationContext) +
    +
    + wan24.ObjectValidation.ValidatableObjectBase.ObjectValidatable(wan24.ObjectValidation.IObjectValidatable) +
    +
    + System.Object.Equals(System.Object) +
    +
    + System.Object.Equals(System.Object, System.Object) +
    +
    + System.Object.GetHashCode() +
    +
    + System.Object.GetType() +
    +
    + System.Object.MemberwiseClone() +
    +
    + System.Object.ReferenceEquals(System.Object, System.Object) +
    +
    + System.Object.ToString() +
    +
    Namespace: wan24.StreamSerializerExtensions
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class StreamSerializerBase : ValidatableObjectBase, IStreamSerializerVersion, IStreamSerializer
    +
    public abstract class StreamSerializerBase : ValidatableObjectBase, IObjectValidatable, IValidatableObject, IStreamSerializerVersion, IStreamSerializer

    Constructors

    @@ -685,6 +721,12 @@
    Returns
    System.Nullable<PropertyInfoExt>wan24.Core.PropertyInfoExt property

    Target property

    IEnumerable<PropertyInfoExt>IEnumerable<wan24.Core.PropertyInfoExt>

    Properties

    Implements

    +
    + wan24.ObjectValidation.IObjectValidatable +
    +
    + System.ComponentModel.DataAnnotations.IValidatableObject +
    diff --git a/docs/index.html b/docs/index.html index bf930a9..59d9425 100644 --- a/docs/index.html +++ b/docs/index.html @@ -79,9 +79,20 @@

    Stream-Serializer-Extensions

  • possibly any other objects with a parameterless public constructor
  • streams
  • +

    and exports an asynchronous fluent API for writing operations, too.

    NOTE: Arrays, lists and dictionaries with nullable values aren't supported.

    It's possible to override the build in serializers, and to add custom type serializers, too.

    +

    Using an attribute for your types and their properties you can make them +binary serializable with backward compatibility, easily.

    +

    The serializer is designed to produce only a minimum of absolutely required +overhead, which sometimes can result in even less data, too (compared to +usually used serialization methods).

    +

    The API is fully synchronous and asynchronous - you choose depending on the +used stream type.

    +

    Cold storage of serialized sequences can be challenging. Using the build in +sequencer versioning you can ensure that a sequence can be deserialized at any +time after a component was updated.

    Methods

    The Write and WriteAsync methods will be extended with supported types, while serializing some types is being done with specialized methods:

    @@ -197,7 +208,8 @@

    Number serialization

    serialization method for a given number. For example, if you give an Int32 value which could be fit into an UInt16, the value will be converted for serialization, and you can save one byte (because the methods will store the -used numeric type in an extra byte).

    +used numeric type in an extra byte). There's also a chance to end up with only +a single byte when serializing a decimal, if the value was zero, for example.

    NOTE: All numbers will be serialized using little endian.

    Embedded streams

    Using WriteStream* and ReadStream* you can embed a stream in serialized @@ -207,7 +219,8 @@

    Embedded streams

    ReadObject or ReadAny), a temporary FileStream will be created, which will delete the temporary file when disposing. You can define a stream factory using StreamSerializerAttribute.StreamFactoryType and -StreamSerializerAttribute.StreamFactoryMethod.

    +StreamSerializerAttribute.StreamFactoryMethod. Or you create a custom +StreamSerializerAttribute and override the GetStream method.

    Structure serialization

    The WriteStruct* methods use Marshal for structure serialization, which produce little or big endian bits depending on the processors endianess. To @@ -231,9 +244,13 @@

    Structure serialization

  • No object referencing fields
  • Fixed length contents
  • +

    CAUTION: If the structure changes, it can't be deserialized using +Marshal anymre. For cold storage consider to implement +IStreamSerializerVersion and use WriteSerializedStruct* and +ReadSerializedStruct* instead.

    TIP: A structure may implement the IStreamSerializer inferface and be -written using the WriteSerialized* methods. For reading you can use the -ReadSerializedStruct* methods.

    +written using the WriteSerializedStruct* methods. For reading you can use +the ReadSerializedStruct* methods.

    Custom serializer

    Using the StreamSerializerAttribute attribute

    The type needs to have a constructor without parameters. Properties with a @@ -412,19 +429,6 @@

    Using the IStreamSerializer } } -

    When deserializing using the ReadAny* methods, the target type needs to be -loaded from the environment. You can add your own type loading handler using -the StreamSerializer.OnLoadType event. The library uses the wan24-Core -NuGet package. If you want to use the wan24-Core type helper for loading -types:

    -
    StreamSerializer.OnInit += (e) => StreamSerializer.OnLoadType += (s, e) =>
    -{
    -    if(e.Type != null) return;
    -    e.Type = TypeHelper.Instance.GetType(e.Name);
    -};
    -
    -

    CAUTION: By adding the wan24-Core type helper like this, any type may be -deserialized, which may be is a security issue!

    When using the StreamSerializerBase base class, you can also give a value for the parameter objectVersion to the base constructor to enable object versioning. This makes it possible that newer object versions are able to @@ -456,6 +460,15 @@

    Using the IStreamSerializer access the versioning information of an object, you can use the optional IStreamSerializerVersion interface, which is implemented by StreamSerializerBase, too.

    +

    Type instance factory

    +

    When deserializing an object which implements the IStreamSerializer +interface, but needs a special construction, you can register an instance +factory:

    +
    StreamSerializer.InstanceFactories[typeof(YourType)] = (type, stream, version, options) => 
    +{
    +    // Return the deserialized instance here
    +};
    +

    Deserializer limitations

    When deserializing variable length objects (like arrays or strings), you can limit the allowed number of items/bytes (or request a minimum count) using the diff --git a/docs/manifest.json b/docs/manifest.json index 0603866..d4a1552 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -33,7 +33,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html", - "hash": "ftSUCO9iHO5QbPabthTJMWEWfJpnAJMRVDYzUxuDEss=" + "hash": "p+uJLHBub4s8Jni6VJ06NX0CTbZLaiVYYe00/Bc8KAI=" } }, "is_incremental": false, @@ -45,7 +45,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html", - "hash": "ZseFcf9PEmJ2YNJvfiCnXTrtgB8jIpDGWOr66cvIF0s=" + "hash": "ui1sjd+JXcXHTh2WmFSQKfASt/ZsueNnwff5/OTYT5Q=" } }, "is_incremental": false, @@ -105,7 +105,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html", - "hash": "2ia8UHV4TUekW6Gnponk6U2Odwveh+exkl/aZjv4uUg=" + "hash": "qan1z4Zx57yKv/jn368b122mOvCJPQp+crSurw6pKu4=" } }, "is_incremental": false, @@ -117,7 +117,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html", - "hash": "YG3P7zzDXhBzY+UXmFvCpi/tVrFTsBCNv/wC+1b1rro=" + "hash": "aHvRheGFQeXy1ByUb74ciFLIC4e2aMlqNI2FhpGKaQ8=" } }, "is_incremental": false, @@ -129,7 +129,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html", - "hash": "z/l9ZUOMevhDeJGO1Q3CAeKk47/SzQjPB9RRHgk8eHw=" + "hash": "ynuU4umgv1hoea1tBKcTTQU3m+TGfOz88lNEwcaibzo=" } }, "is_incremental": false, @@ -141,7 +141,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html", - "hash": "kJd0jtJud/64A3UlxhHitpaejeeHC7d+Xg7/9aBm1vg=" + "hash": "hAY1bQL7/QGl6W6+yjHSVHfJmqWgl72FnCYPwMTn9ow=" } }, "is_incremental": false, @@ -153,7 +153,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html", - "hash": "tF7RVBibixrrqgyT6uCg0C3vM0KOmwaxRFaNLF35z+0=" + "hash": "qm8gL1UJUYLZqaL0bYP1lwS42DFKqWgDdzxOfYYl+nc=" } }, "is_incremental": false, @@ -165,7 +165,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html", - "hash": "M89eGonTKnEpwPTfKjAMkJa3WMbXCA/+/HRdWmeE4PA=" + "hash": "gETYdceUhc13wSzL0wVGAAKf8iq5G7/ulyyjep8skXE=" } }, "is_incremental": false, @@ -177,7 +177,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html", - "hash": "SrC5YWfKXtZdubLkvr6keewq47CiAe8Ew/F8eRgl1Js=" + "hash": "IFw190HtUhWZU13+mK/8h5PpVSkXbiXUa4ToLSxoOto=" } }, "is_incremental": false, @@ -189,7 +189,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html", - "hash": "g3zwKwAlypqwygZsFfjbwAeRiY42+RhvSeMgoRdNvQY=" + "hash": "jjDSxOhNEn5D11dW343GD0DK9qkpRDvQpHvbJcoClK0=" } }, "is_incremental": false, @@ -201,7 +201,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html", - "hash": "oMsywutPug5X2r1dFT4LGbah+KOi2fFTP5pqCCD3v2Q=" + "hash": "r6h7CxZgN8/l+DCx1SS2HeYY2AVqv6WdoyOT2U/qMl8=" } }, "is_incremental": false, @@ -213,7 +213,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html", - "hash": "I1qVCsduwYmE9r+bKRq3sDx/iqimIatE27mlLJQ1E8g=" + "hash": "m0NFLnh4lvu4OpVLsNIEwRzq3LBrM+vhQgeeoGHGHBY=" } }, "is_incremental": false, @@ -225,7 +225,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html", - "hash": "RE8FteBfXrxQ6L/KA0y7Ukv7F67bl6+87jJ6Tpd+fH8=" + "hash": "yxJCGaoHo84C+7D1+Wy5CmQq9xCKumfmIWEEdjPFXio=" } }, "is_incremental": false, @@ -237,7 +237,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html", - "hash": "nU9xeo5eG0oxjWFmGySrmnBGQrfxfDHn0i7pcXn3xYY=" + "hash": "Kb6G394V1KGVrDnGcvha+h1v9aoHK6iPoDykwL9BPqY=" } }, "is_incremental": false, @@ -273,7 +273,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html", - "hash": "anexlR2VqaIdMNfELvHgbDrX+LeeA5GKNls+JcyHktM=" + "hash": "QO04XM0xocFPy2kt2FoN7NJPEQwbAcBSOHLtaCY8ifA=" } }, "is_incremental": false, @@ -285,7 +285,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ISerializerOptions.html", - "hash": "jvUfIrC8hMLVFBRd7jRw3JlKMdi++qfD0BmwHPlvhPE=" + "hash": "OHaH2DkPccQabcwbej/hxKyzarDhJJXJe5eB4LzWKqQ=" } }, "is_incremental": false, @@ -369,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "bzYSYWtx9n+/gEKgbfAHcL2ztykdHBez+ZyZYSLardU=" + "hash": "7mYI5IcEr0DYE7XqrwB8DvHQj6SL+VgeytjwIganwgI=" } }, "is_incremental": false, @@ -381,7 +381,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html", - "hash": "dodbqIduzfXVlaoksmwEBCyrWOh4sr7LTn54RQVHBco=" + "hash": "Iakecs5Y5ySpUlrDy+R5Q/4YE88X1MJRBdgc30DiOeo=" } }, "is_incremental": false, @@ -585,7 +585,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html", - "hash": "TorZnMb+npT1sju+s1iog40mq+QmI6fI/AzzWr1gfnk=" + "hash": "FVOplBMbmVEF5KE57CIIu26q3+qu71EfETzYkVAM9/o=" } }, "is_incremental": false, @@ -597,7 +597,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerBase.html", - "hash": "DMsrqzvJdcSCAJUC/e8+c4Zxdfmott0wBccKzeXM1Cg=" + "hash": "D+8qcLEuYeVfN+cV7h8zVpI0pIelwiJLteUO3AJWJnI=" } }, "is_incremental": false, @@ -669,7 +669,7 @@ "output": { ".html": { "relative_path": "index.html", - "hash": "5MFSMr8Kd/304qSCF8Rxpq9BsAVJQBq8137W2w8ozA8=" + "hash": "2DdveuRYACsmjo0DQokaO14jZx1PHZVP5qlQor8Sc4I=" } }, "is_incremental": false, diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index 342480a..12a9c25 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -322,11 +322,11 @@ references: commentId: T:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo nameWithType: AutoStreamSerializerInfo -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(PropertyInfoExt) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(wan24.Core.PropertyInfoExt) name: AutoStreamSerializerInfo(PropertyInfoExt) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo__ctor_PropertyInfoExt_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(PropertyInfoExt) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AutoStreamSerializerInfo(PropertyInfoExt) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo__ctor_wan24_Core_PropertyInfoExt_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(wan24.Core.PropertyInfoExt) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AutoStreamSerializerInfo(wan24.Core.PropertyInfoExt) nameWithType: AutoStreamSerializerInfo.AutoStreamSerializerInfo(PropertyInfoExt) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor* name: AutoStreamSerializerInfo @@ -520,15 +520,12 @@ references: commentId: T:wan24.StreamSerializerExtensions.DefaultSerializerOptions fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions nameWithType: DefaultSerializerOptions -- uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name: DefaultSerializerOptions(Nullable, StreamSerializerAttribute) - href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_StreamSerializerAttribute_ - commentId: M:wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name.vb: DefaultSerializerOptions(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) - fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(System.Nullable, wan24.StreamSerializerExtensions.StreamSerializerAttribute) - fullName.vb: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.StreamSerializerAttribute) - nameWithType: DefaultSerializerOptions.DefaultSerializerOptions(Nullable, StreamSerializerAttribute) - nameWithType.vb: DefaultSerializerOptions.DefaultSerializerOptions(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) +- uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name: DefaultSerializerOptions(PropertyInfoExt, StreamSerializerAttribute) + href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_wan24_Core_PropertyInfoExt_wan24_StreamSerializerExtensions_StreamSerializerAttribute_ + commentId: M:wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) + fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(wan24.Core.PropertyInfoExt, wan24.StreamSerializerExtensions.StreamSerializerAttribute) + nameWithType: DefaultSerializerOptions.DefaultSerializerOptions(PropertyInfoExt, StreamSerializerAttribute) - uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor* name: DefaultSerializerOptions href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_ @@ -2224,11 +2221,11 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureValidLength nameWithType: SerializerHelper.EnsureValidLength -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) name: GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt, Stream, System.Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) nameWithType: SerializerHelper.GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions* name: GetKeySerializerOptions @@ -2282,11 +2279,11 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectSerializerInfo nameWithType: SerializerHelper.GetObjectSerializerInfo -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) name: GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt, Stream, System.Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) nameWithType: SerializerHelper.GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions* name: GetSerializerOptions @@ -2295,11 +2292,11 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions nameWithType: SerializerHelper.GetSerializerOptions -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) name: GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt, Stream, System.Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) nameWithType: SerializerHelper.GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions* name: GetValueSerializerOptions @@ -2501,15 +2498,12 @@ references: commentId: T:wan24.StreamSerializerExtensions.SerializerOptionsBase fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase nameWithType: SerializerOptionsBase -- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name: SerializerOptionsBase(Nullable, StreamSerializerAttribute) - href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_StreamSerializerAttribute_ - commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name.vb: SerializerOptionsBase(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) - fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(System.Nullable, wan24.StreamSerializerExtensions.StreamSerializerAttribute) - fullName.vb: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.StreamSerializerAttribute) - nameWithType: SerializerOptionsBase.SerializerOptionsBase(Nullable, StreamSerializerAttribute) - nameWithType.vb: SerializerOptionsBase.SerializerOptionsBase(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name: SerializerOptionsBase(PropertyInfoExt, StreamSerializerAttribute) + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_wan24_Core_PropertyInfoExt_wan24_StreamSerializerExtensions_StreamSerializerAttribute_ + commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(wan24.Core.PropertyInfoExt, wan24.StreamSerializerExtensions.StreamSerializerAttribute) + nameWithType: SerializerOptionsBase.SerializerOptionsBase(PropertyInfoExt, StreamSerializerAttribute) - uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor* name: SerializerOptionsBase href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_ @@ -7631,15 +7625,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamSerializerAttribute nameWithType: StreamSerializerAttribute.StreamSerializerAttribute -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Nullable{PropertyInfoExt}) - name: CreateSerializerOptions(Nullable, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_System_Nullable_Type__System_Nullable_PropertyInfoExt__ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Nullable{PropertyInfoExt}) - name.vb: CreateSerializerOptions(Nullable(Of Type), Nullable(Of PropertyInfoExt)) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable(Of Type), System.Nullable(Of PropertyInfoExt)) - nameWithType: StreamSerializerAttribute.CreateSerializerOptions(Nullable, Nullable) - nameWithType.vb: StreamSerializerAttribute.CreateSerializerOptions(Nullable(Of Type), Nullable(Of PropertyInfoExt)) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},wan24.Core.PropertyInfoExt) + name: CreateSerializerOptions(Nullable, PropertyInfoExt) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_System_Nullable_Type__wan24_Core_PropertyInfoExt_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},wan24.Core.PropertyInfoExt) + name.vb: CreateSerializerOptions(Nullable(Of Type), PropertyInfoExt) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable, wan24.Core.PropertyInfoExt) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable(Of Type), wan24.Core.PropertyInfoExt) + nameWithType: StreamSerializerAttribute.CreateSerializerOptions(Nullable, PropertyInfoExt) + nameWithType.vb: StreamSerializerAttribute.CreateSerializerOptions(Nullable(Of Type), PropertyInfoExt) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions* name: CreateSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_ @@ -7660,15 +7654,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.FromVersion nameWithType: StreamSerializerAttribute.FromVersion -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) - name: GetKeySerializerOptions(Nullable, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_System_Nullable_PropertyInfoExt__Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) - name.vb: GetKeySerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable, Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable(Of PropertyInfoExt), Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetKeySerializerOptions(Nullable, Stream, Int32, CancellationToken) - nameWithType.vb: StreamSerializerAttribute.GetKeySerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + name: GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) + nameWithType: StreamSerializerAttribute.GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions* name: GetKeySerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_ @@ -7705,15 +7696,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetReadProperties nameWithType: StreamSerializerAttribute.GetReadProperties -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) - name: GetSerializerOptions(Nullable, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_System_Nullable_PropertyInfoExt__Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) - name.vb: GetSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable, Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable(Of PropertyInfoExt), Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetSerializerOptions(Nullable, Stream, Int32, CancellationToken) - nameWithType.vb: StreamSerializerAttribute.GetSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + name: GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) + nameWithType: StreamSerializerAttribute.GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions* name: GetSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_ @@ -7747,15 +7735,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetUseDefaultValue nameWithType: StreamSerializerAttribute.GetUseDefaultValue -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) - name: GetValueSerializerOptions(Nullable, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_System_Nullable_PropertyInfoExt__Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable{PropertyInfoExt},Stream,System.Int32,CancellationToken) - name.vb: GetValueSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable, Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable(Of PropertyInfoExt), Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetValueSerializerOptions(Nullable, Stream, Int32, CancellationToken) - nameWithType.vb: StreamSerializerAttribute.GetValueSerializerOptions(Nullable(Of PropertyInfoExt), Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + name: GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) + nameWithType: StreamSerializerAttribute.GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions* name: GetValueSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_ diff --git a/src/Stream-Serializer-Extensions Docs/index.md b/src/Stream-Serializer-Extensions Docs/index.md index b53b42e..d4c928f 100644 --- a/src/Stream-Serializer-Extensions Docs/index.md +++ b/src/Stream-Serializer-Extensions Docs/index.md @@ -18,11 +18,27 @@ The built in serializer supports binary serialization of - possibly any other objects with a parameterless public constructor - streams +and exports an asynchronous fluent API for writing operations, too. + **NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. It's possible to override the build in serializers, and to add custom type serializers, too. +Using an attribute for your types and their properties you can make them +binary serializable with backward compatibility, easily. + +The serializer is designed to produce only a minimum of absolutely required +overhead, which sometimes can result in even less data, too (compared to +usually used serialization methods). + +The API is fully synchronous and asynchronous - you choose depending on the +used stream type. + +Cold storage of serialized sequences can be challenging. Using the build in +sequencer versioning you can ensure that a sequence can be deserialized at any +time after a component was updated. + ## Methods The `Write` and `WriteAsync` methods will be extended with supported types, @@ -77,7 +93,8 @@ The `WriteNumber*` and `ReadNumber*` methods will find the best matching serialization method for a given number. For example, if you give an Int32 value which could be fit into an UInt16, the value will be converted for serialization, and you can save one byte (because the methods will store the -used numeric type in an extra byte). +used numeric type in an extra byte). There's also a chance to end up with only +a single byte when serializing a `decimal`, if the value was zero, for example. **NOTE**: All numbers will be serialized using little endian. @@ -91,7 +108,8 @@ When deserializing an embedded stream using generic read-methods (like `ReadObject` or `ReadAny`), a temporary `FileStream` will be created, which will delete the temporary file when disposing. You can define a stream factory using `StreamSerializerAttribute.StreamFactoryType` and -`StreamSerializerAttribute.StreamFactoryMethod`. +`StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom +`StreamSerializerAttribute` and override the `GetStream` method. ## Structure serialization @@ -118,9 +136,14 @@ only: - No object referencing fields - Fixed length contents +**CAUTION**: If the structure changes, it can't be deserialized using +`Marshal` anymre. For cold storage consider to implement +`IStreamSerializerVersion` and use `WriteSerializedStruct*` and +`ReadSerializedStruct*` instead. + **TIP**: A structure may implement the `IStreamSerializer` inferface and be -written using the `WriteSerialized*` methods. For reading you can use the -`ReadSerializedStruct*` methods. +written using the `WriteSerializedStruct*` methods. For reading you can use +the `ReadSerializedStruct*` methods. ## Custom serializer @@ -329,23 +352,6 @@ public class YourType : StreamSerializerBase } ``` -When deserializing using the `ReadAny*` methods, the target type needs to be -loaded from the environment. You can add your own type loading handler using -the `StreamSerializer.OnLoadType` event. The library uses the `wan24-Core` -NuGet package. If you want to use the `wan24-Core` type helper for loading -types: - -```cs -StreamSerializer.OnInit += (e) => StreamSerializer.OnLoadType += (s, e) => -{ - if(e.Type != null) return; - e.Type = TypeHelper.Instance.GetType(e.Name); -}; -``` - -**CAUTION**: By adding the `wan24-Core` type helper like this, any type may be -deserialized, which ~~may be~~ is a security issue! - When using the `StreamSerializerBase` base class, you can also give a value for the parameter `objectVersion` to the base constructor to enable object versioning. This makes it possible that newer object versions are able to @@ -381,6 +387,19 @@ access the versioning information of an object, you can use the optional `IStreamSerializerVersion` interface, which is implemented by `StreamSerializerBase`, too. +### Type instance factory + +When deserializing an object which implements the `IStreamSerializer` +interface, but needs a special construction, you can register an instance +factory: + +```cs +StreamSerializer.InstanceFactories[typeof(YourType)] = (type, stream, version, options) => +{ + // Return the deserialized instance here +}; +``` + ## Deserializer limitations When deserializing variable length objects (like arrays or strings), you can diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index 91f522e..8180310 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -67,3 +67,7 @@ {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T16:38:44.7806759Z","message_severity":"warning","correlation_id":"79978425-0FAE-437F-8AAE-B84BA646B741.1.1.13"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T19:38:43.4156498Z","message_severity":"warning","correlation_id":"095E99A7-DCA0-4549-B0CC-CC884F14B1B9.1.1.12"} {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T19:38:43.4266824Z","message_severity":"warning","correlation_id":"095E99A7-DCA0-4549-B0CC-CC884F14B1B9.1.1.13"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T20:23:13.6916229Z","message_severity":"warning","correlation_id":"48430F40-D597-4AC2-9272-B977A0DB3AA7.1.1.12"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T20:23:13.69762Z","message_severity":"warning","correlation_id":"48430F40-D597-4AC2-9272-B977A0DB3AA7.1.1.13"} +{"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs","line":"73","date_time":"2023-06-25T20:23:17.4205791Z","message_severity":"warning","correlation_id":"48430F40-D597-4AC2-9272-B977A0DB3AA7.1.1.18"} +{"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs","line":"84","date_time":"2023-06-25T20:23:17.4205791Z","message_severity":"warning","correlation_id":"48430F40-D597-4AC2-9272-B977A0DB3AA7.1.1.19"} diff --git a/src/Stream-Serializer-Extensions/README.md b/src/Stream-Serializer-Extensions/README.md index b53b42e..d4c928f 100644 --- a/src/Stream-Serializer-Extensions/README.md +++ b/src/Stream-Serializer-Extensions/README.md @@ -18,11 +18,27 @@ The built in serializer supports binary serialization of - possibly any other objects with a parameterless public constructor - streams +and exports an asynchronous fluent API for writing operations, too. + **NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. It's possible to override the build in serializers, and to add custom type serializers, too. +Using an attribute for your types and their properties you can make them +binary serializable with backward compatibility, easily. + +The serializer is designed to produce only a minimum of absolutely required +overhead, which sometimes can result in even less data, too (compared to +usually used serialization methods). + +The API is fully synchronous and asynchronous - you choose depending on the +used stream type. + +Cold storage of serialized sequences can be challenging. Using the build in +sequencer versioning you can ensure that a sequence can be deserialized at any +time after a component was updated. + ## Methods The `Write` and `WriteAsync` methods will be extended with supported types, @@ -77,7 +93,8 @@ The `WriteNumber*` and `ReadNumber*` methods will find the best matching serialization method for a given number. For example, if you give an Int32 value which could be fit into an UInt16, the value will be converted for serialization, and you can save one byte (because the methods will store the -used numeric type in an extra byte). +used numeric type in an extra byte). There's also a chance to end up with only +a single byte when serializing a `decimal`, if the value was zero, for example. **NOTE**: All numbers will be serialized using little endian. @@ -91,7 +108,8 @@ When deserializing an embedded stream using generic read-methods (like `ReadObject` or `ReadAny`), a temporary `FileStream` will be created, which will delete the temporary file when disposing. You can define a stream factory using `StreamSerializerAttribute.StreamFactoryType` and -`StreamSerializerAttribute.StreamFactoryMethod`. +`StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom +`StreamSerializerAttribute` and override the `GetStream` method. ## Structure serialization @@ -118,9 +136,14 @@ only: - No object referencing fields - Fixed length contents +**CAUTION**: If the structure changes, it can't be deserialized using +`Marshal` anymre. For cold storage consider to implement +`IStreamSerializerVersion` and use `WriteSerializedStruct*` and +`ReadSerializedStruct*` instead. + **TIP**: A structure may implement the `IStreamSerializer` inferface and be -written using the `WriteSerialized*` methods. For reading you can use the -`ReadSerializedStruct*` methods. +written using the `WriteSerializedStruct*` methods. For reading you can use +the `ReadSerializedStruct*` methods. ## Custom serializer @@ -329,23 +352,6 @@ public class YourType : StreamSerializerBase } ``` -When deserializing using the `ReadAny*` methods, the target type needs to be -loaded from the environment. You can add your own type loading handler using -the `StreamSerializer.OnLoadType` event. The library uses the `wan24-Core` -NuGet package. If you want to use the `wan24-Core` type helper for loading -types: - -```cs -StreamSerializer.OnInit += (e) => StreamSerializer.OnLoadType += (s, e) => -{ - if(e.Type != null) return; - e.Type = TypeHelper.Instance.GetType(e.Name); -}; -``` - -**CAUTION**: By adding the `wan24-Core` type helper like this, any type may be -deserialized, which ~~may be~~ is a security issue! - When using the `StreamSerializerBase` base class, you can also give a value for the parameter `objectVersion` to the base constructor to enable object versioning. This makes it possible that newer object versions are able to @@ -381,6 +387,19 @@ access the versioning information of an object, you can use the optional `IStreamSerializerVersion` interface, which is implemented by `StreamSerializerBase`, too. +### Type instance factory + +When deserializing an object which implements the `IStreamSerializer` +interface, but needs a special construction, you can register an instance +factory: + +```cs +StreamSerializer.InstanceFactories[typeof(YourType)] = (type, stream, version, options) => +{ + // Return the deserialized instance here +}; +``` + ## Deserializer limitations When deserializing variable length objects (like arrays or strings), you can From 09ce0115908b507807564b314e73b2235289c3b4 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 25 Jun 2023 22:31:46 +0200 Subject: [PATCH 12/17] Update Stream-Serializer-Extensions.sln --- src/Stream-Serializer-Extensions.sln | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Stream-Serializer-Extensions.sln b/src/Stream-Serializer-Extensions.sln index 8743947..e6dda9a 100644 --- a/src/Stream-Serializer-Extensions.sln +++ b/src/Stream-Serializer-Extensions.sln @@ -39,14 +39,10 @@ Global {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Trunk|Any CPU.ActiveCfg = Trunk|Any CPU {7E29CC27-3AB4-4CEC-A32E-1E94607C5924}.Trunk|Any CPU.Build.0 = Trunk|Any CPU {F8293296-B214-4304-B87A-D954AD821BC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8293296-B214-4304-B87A-D954AD821BC8}.Debug|Any CPU.Build.0 = Debug|Any CPU {F8293296-B214-4304-B87A-D954AD821BC8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8293296-B214-4304-B87A-D954AD821BC8}.Release|Any CPU.Build.0 = Release|Any CPU {F8293296-B214-4304-B87A-D954AD821BC8}.Trunk|Any CPU.ActiveCfg = Debug|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Debug|Any CPU.Build.0 = Debug|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Release|Any CPU.Build.0 = Release|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Trunk|Any CPU.ActiveCfg = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution From 765adc3b1760860293265b2f92ac2c2c42dead04 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 2 Jul 2023 12:21:52 +0200 Subject: [PATCH 13/17] Update * Removed `ArrayPool` arguments from most of the (reading) methods (`StreamSerializer.BufferPool` will be used everywhere instead) + Added `ISerializerOptions.Key/ValueOptions`, `ISerializerOptions.Serializer` and `ISerializerOptions.IsNullable` + Added `StreamExtensions.Read/WriteItem(Async)` + Added `StreamExtensions.Read/WriteAnyItemHeader(Async)` + Added `WriteAny*` method overloads which allow skipping the header writing + Added `SerializerTypes` + Added `Type` extensions `SerializerHelper.GetItemSerializerInfo` and `SerializerHelper.GetItemDeserializerInfo` + Added `Type` extensions `SerializerHelper.FindSerializer` and `SerializerHelper.FindDeserializer` + Added `SerializerHelper.RequiresTypeName` for `ObjectType` + Added `SerializerHelper.RequiresObjectWriting` for `ObjectType` + Added `SerializerHelper.EnsureCorrectObjectType` for `ObjectType` + Added `StreamSerializerAttribute.Serializer` + Optimized array/list/dictionary/object writing/reading for most of the supported key/value/object types + Added support for nullable array/list/dictionary values + Added `SerializerOptionsFluentExtensions` + Added `SerializerHelper.GetObjectType` extension for `Type` + Added `SerializerHelper.IsGeneric` extension for `ObjectTypes` + Added `Type` writing/reading methods and `SerializedTypeInfo` --- README.md | 23 +- .../ITestObject.cs | 7 + .../StreamExtensions_Tests.Any.cs | 6 +- .../StreamExtensions_Tests.Array.cs | 143 ++++- .../StreamExtensions_Tests.Dict.cs | 2 +- .../StreamExtensions_Tests.List.cs | 2 +- .../StreamExtensions_Tests.Type.cs | 88 +++ .../TestObject.cs | 4 +- .../TestObject2.cs | 4 +- .../TestObject3.cs | 4 +- .../TestObject4.cs | 4 +- .../TestObject5.cs | 25 + .../TestStruct.cs | 4 +- .../AutoStreamSerializerBase.cs | 3 +- .../AutoStreamSerializerConfig.cs | 3 +- .../AutoStreamSerializerInfo.cs | 18 +- .../DefaultSerializerOptions.cs | 3 + .../ISerializerOptions.cs | 16 + .../ObjectTypes.cs | 50 +- src/Stream-Serializer-Extensions/README.md | 23 +- .../SerializedTypeInfo.cs | 431 +++++++++++++ .../SerializerHelper.cs | 262 +++++++- .../SerializerOptionsBase.cs | 12 + .../SerializerOptionsFluentExtensions.cs | 34 ++ .../SerializerTypes.cs | 73 +++ .../StreamExtensions.Read.Any.cs | 118 +++- .../StreamExtensions.Read.Array.cs | 200 +----- .../StreamExtensions.Read.Basic.cs | 8 +- .../StreamExtensions.Read.Dictionary.cs | 456 +++++++++++++- .../StreamExtensions.Read.FixedArray.cs | 573 ++++++++++++++++++ .../StreamExtensions.Read.Items.cs | 392 ++++++++++++ .../StreamExtensions.Read.List.cs | 276 ++++++++- .../StreamExtensions.Read.Object.cs | 355 +++++++++-- .../StreamExtensions.Read.Serialized.cs | 32 + .../StreamExtensions.Read.Stream.cs | 2 +- .../StreamExtensions.Read.Type.cs | 167 +++++ .../StreamExtensions.Read.cs | 8 + .../StreamExtensions.Write.Any.cs | 187 +++++- .../StreamExtensions.Write.Array.cs | 181 +----- .../StreamExtensions.Write.Basic.cs | 8 +- .../StreamExtensions.Write.Dictionary.cs | 357 ++++++++++- .../StreamExtensions.Write.FixedArray.cs | 410 +++++++++++++ .../StreamExtensions.Write.Items.cs | 389 ++++++++++++ .../StreamExtensions.Write.List.cs | 212 ++++++- .../StreamExtensions.Write.Object.cs | 114 +++- .../StreamExtensions.Write.String.cs | 2 +- .../StreamExtensions.Write.Type.cs | 77 +++ .../StreamExtensions.Write.cs | 4 + .../StreamSerializer.cs | 170 +++--- .../StreamSerializerAttribute.cs | 5 + 50 files changed, 5276 insertions(+), 671 deletions(-) create mode 100644 src/Stream-Serializer-Extensions Tests/ITestObject.cs create mode 100644 src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs create mode 100644 src/Stream-Serializer-Extensions/SerializedTypeInfo.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerTypes.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs diff --git a/README.md b/README.md index d4c928f..5f5c1e1 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,10 @@ The built in serializer supports binary serialization of - structures - possibly any other objects with a parameterless public constructor - streams +- CLR type informations and exports an asynchronous fluent API for writing operations, too. -**NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. - It's possible to override the build in serializers, and to add custom type serializers, too. @@ -145,6 +144,26 @@ only: written using the `WriteSerializedStruct*` methods. For reading you can use the `ReadSerializedStruct*` methods. +## CLR type information serialization + +CLR type informations support + +- normal types (also abstract and interface types) +- generic types (or type definitions) +- array types (with array rank) + +Internal the serializer uses a `SerializedTypeInfo` instance. + +```cs +stream.Write(typeof(Dictionary)); +stream.Position = 0; +Type type = stream.ReadType(); +Assert.AreEqual(typeof(Dictionary), type); +``` + +Use the `ReadSerializableType*` methods to ensure a serializer supported CLR +type. + ## Custom serializer ### Using the `StreamSerializerAttribute` attribute diff --git a/src/Stream-Serializer-Extensions Tests/ITestObject.cs b/src/Stream-Serializer-Extensions Tests/ITestObject.cs new file mode 100644 index 0000000..8f82bb3 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/ITestObject.cs @@ -0,0 +1,7 @@ +namespace Stream_Serializer_Extensions_Tests +{ + public interface ITestObject + { + bool CompareWith(ITestObject other); + } +} diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs index 6bf4dd9..f9158d9 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs @@ -59,7 +59,8 @@ public void Any_Tests() Assert.IsTrue(b is TestObject,a.GetType().ToString()); TestObject tob=(b as TestObject)!; Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); - }) + }), + (typeof(Type), (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())) }; object b; for (int i = 0; i < data.Length; i++) @@ -141,7 +142,8 @@ public async Task AnyAsync_Tests() Assert.IsTrue(b is TestObject,a.GetType().ToString()); TestObject tob=(b as TestObject)!; Assert.AreEqual(toa.Value, tob.Value,a.GetType().ToString()); - }) + }), + (typeof(Type), (a,b)=>Assert.AreEqual(a,b,a.GetType().ToString())) }; object b; for (int i = 0; i < data.Length; i++) diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs index 426d4df..914a242 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs @@ -1,4 +1,8 @@ -using wan24.StreamSerializerExtensions; +using Microsoft.Extensions.Primitives; +using System.Collections; +using System.Security.Cryptography; +using wan24.Core; +using wan24.StreamSerializerExtensions; namespace Stream_Serializer_Extensions_Tests { @@ -8,27 +12,87 @@ public partial class StreamExtensions_Tests public void Array_Tests() { using MemoryStream ms = new(); - bool[] arr = new bool[] { true, false }; - ms.WriteArray(arr); - ms.Position = 0; - CompareArray(arr, ms.ReadArray()); - arr = Array.Empty(); - ms.SetLength(0); - ms.Position = 0; - ms.WriteArray(arr); - Assert.AreEqual(1L, ms.Length); - ms.SetLength(0); - ms.Position = 0; - ms.WriteArrayNullable(null); - Assert.AreEqual(1L, ms.Length); - ms.Position = 0; - Assert.IsNull(ms.ReadArrayNullable()); - ms.SetLength(0); - ms.Position = 0; - ms.WriteArrayNullable(arr); - Assert.AreEqual(1L, ms.Length); - ms.Position = 0; - Assert.IsNotNull(ms.ReadArrayNullable()); + { + bool[] arr = new bool[] { true, false }; + ms.WriteArray(arr); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + CompareArray(arr, ms.ReadArray()); + arr = Array.Empty(); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArray(arr); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArrayNullable(null); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadArrayNullable()); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArrayNullable(arr); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(ms.ReadArrayNullable()); + } + foreach (bool nullable in new bool[] { false, true }) + { + Logging.WriteInfo($"Nullable values: {nullable}"); + using TestObject5 test = new(); + using MemoryStream testMs = new(); + byte[] testData = RandomNumberGenerator.GetBytes(200000); + testMs.Write(testData); + testMs.Position = 0; + test.Stream = testMs; + object?[] arr = new object?[] + { + nullable ? null : false, + true, + 0, + (sbyte)123, + (byte)123, + (short)123, + (ushort)123, + 123, + 123, + 123, + (uint)123, + (long)123, + (ulong)123, + (float)123, + (double)123, + (decimal)123, + string.Empty, + "test", + Array.Empty(), + new byte[]{1,2,3 }, + Array.Empty(), + new int[]{1,2,3 }, + new List(), + new List(){1,2,3}, + new Dictionary(), + new Dictionary(){ { true.ToString(), 1 },{ false.ToString(), 0 } }, + new TestObject(), + new TestObject2(), + new TestObject3(), + new TestObject4(), + test, + new TestStruct() + }; + try + { + ms.SetLength(0); + ms.Position = 0; + ms.WriteArray(arr, valuesNullable: nullable); + ms.Position = 0; + CompareArray(arr, ms.ReadArray(valuesNullable: nullable)); + } + finally + { + foreach (object? o in arr) (o as IDisposable)?.Dispose(); + } + } } [TestMethod] @@ -37,6 +101,7 @@ public async Task ArrayAsync_Tests() using MemoryStream ms = new(); bool[] arr = new bool[] { true, false }; await ms.WriteArrayAsync(arr); + Assert.AreEqual(4L, ms.Length); ms.Position = 0; CompareArray(arr, await ms.ReadArrayAsync()); arr = Array.Empty(); @@ -61,7 +126,39 @@ public async Task ArrayAsync_Tests() private static void CompareArray(Array a, Array b) { Assert.AreEqual(a.Length, b.Length); - for (int i = 0; i < a.Length; i++) Assert.AreEqual(a.GetValue(i), b.GetValue(i)); + for (int i = 0; i < a.Length; i++) CompareObjects(a.GetValue(i), b.GetValue(i)); + } + + private static void CompareObjects(object? ao, object? bo) + { + if (ao is ITestObject ato) + { + ITestObject? bto = bo as ITestObject; + Assert.IsNotNull(bto); + Assert.IsTrue(ato.CompareWith(bto)); + } + else if (ao is Array aao) + { + Array? bao = bo as Array; + Assert.IsNotNull(bao); + CompareArray(aao, bao); + } + else if (ao is IDictionary ado) + { + IDictionary? bdo = bo as IDictionary; + Assert.IsNotNull(bdo); + CompareDict(ado, bdo); + } + else if (ao is IList alo) + { + IList? blo = bo as IList; + Assert.IsNotNull(blo); + CompareList(alo, blo); + } + else + { + Assert.AreEqual(ao, bo); + } } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs index 09d7b1d..a7c33e8 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs @@ -73,7 +73,7 @@ private static void CompareDict(IDictionary a, IDictionary b) foreach (object key in a.Keys) { Assert.IsTrue(b.Contains(key)); - Assert.AreEqual(a[key], b[key]); + CompareObjects(a[key], b[key]); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs index 7a6c64d..507b9c2 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs @@ -70,7 +70,7 @@ public async Task ListAsync_Tests() private static void CompareList(IList a, IList b) { Assert.AreEqual(a.Count, b.Count); - for (int i = 0; i < a.Count; i++) Assert.AreEqual(a[i], b[i]); + for (int i = 0; i < a.Count; i++) CompareObjects(a[i], b[i]); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs new file mode 100644 index 0000000..2374e96 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs @@ -0,0 +1,88 @@ +using wan24.Core; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Type_Tests() + { + using MemoryStream ms = new(); + foreach (Type type in new Type[] + { + typeof(bool), + typeof(bool[]), + typeof(bool[,]), + typeof(List), + typeof(Dictionary), + typeof(List<>), + typeof(Dictionary<,>), + typeof(IDisposable), + typeof(Stream), + typeof(StreamExtensions_Tests) + }) + { + Logging.WriteInfo($"Type {type} ({new SerializedTypeInfo(type)})"); + ms.SetLength(0); + ms.Position = 0; + ms.Write(type); + ms.Position = 0; + Assert.AreEqual(type, ms.ReadType()); + } + foreach (Type? type in new Type?[] + { + typeof(bool), + null + }) + { + Logging.WriteInfo($"Type {type?.ToString() ?? "NULL"}"); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(type); + ms.Position = 0; + Assert.AreEqual(type, ms.ReadTypeNullable()); + } + } + + [TestMethod] + public async Task TypeAsync_Tests() + { + using MemoryStream ms = new(); + foreach (Type type in new Type[] + { + typeof(bool), + typeof(bool[]), + typeof(bool[,]), + typeof(List), + typeof(Dictionary), + typeof(List<>), + typeof(Dictionary<,>), + typeof(IDisposable), + typeof(Stream), + typeof(StreamExtensions_Tests) + }) + { + Logging.WriteInfo($"Type {type} ({new SerializedTypeInfo(type)})"); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteAsync(type); + ms.Position = 0; + Assert.AreEqual(type, await ms.ReadTypeAsync()); + } + foreach (Type? type in new Type?[] + { + typeof(bool), + null + }) + { + Logging.WriteInfo($"Type {type?.ToString() ?? "NULL"}"); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(type); + ms.Position = 0; + Assert.AreEqual(type, await ms.ReadTypeNullableAsync()); + } + } + } +} diff --git a/src/Stream-Serializer-Extensions Tests/TestObject.cs b/src/Stream-Serializer-Extensions Tests/TestObject.cs index 1b2c86b..7707de4 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject.cs @@ -1,8 +1,10 @@ namespace Stream_Serializer_Extensions_Tests { // Testing automatic serialization - internal class TestObject + internal class TestObject : ITestObject { public bool Value { get; set; } + + public virtual bool CompareWith(ITestObject other) => other is TestObject obj && Value == obj.Value; } } diff --git a/src/Stream-Serializer-Extensions Tests/TestObject2.cs b/src/Stream-Serializer-Extensions Tests/TestObject2.cs index 8f62d3f..65e33b7 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject2.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject2.cs @@ -4,7 +4,7 @@ namespace Stream_Serializer_Extensions_Tests { // Testing StreamSerializerBase - internal class TestObject2 : StreamSerializerBase + internal class TestObject2 : StreamSerializerBase, ITestObject { public TestObject2() : base(1) { } @@ -12,6 +12,8 @@ public TestObject2(Stream stream, int version) : base(stream, version, 1) { } public bool Value { get; set; } + public virtual bool CompareWith(ITestObject other) => other is TestObject2 obj && Value == obj.Value; + protected override void Serialize(Stream stream) => stream.Write(Value); protected override async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) diff --git a/src/Stream-Serializer-Extensions Tests/TestObject3.cs b/src/Stream-Serializer-Extensions Tests/TestObject3.cs index 49b814d..b5a91d8 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject3.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject3.cs @@ -4,7 +4,7 @@ namespace Stream_Serializer_Extensions_Tests { // Testing customized opt-out serialization (object version 1, Field2 should be excluded) [StreamSerializer(version: 1)] - internal class TestObject3 + internal class TestObject3 : ITestObject { public TestObject3() { } @@ -18,5 +18,7 @@ public TestObject3() { } // Excluded from object version 3+ (included until object version 2) [StreamSerializer(0, 2)] public bool Field3 { get; set; } + + public virtual bool CompareWith(ITestObject other) => other is TestObject3 obj && Field1 == obj.Field1 && Field2 == obj.Field2 && Field3 == obj.Field3; } } diff --git a/src/Stream-Serializer-Extensions Tests/TestObject4.cs b/src/Stream-Serializer-Extensions Tests/TestObject4.cs index d1ba48c..a6594ac 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject4.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject4.cs @@ -4,7 +4,7 @@ namespace Stream_Serializer_Extensions_Tests { // Testing customized opt-in serialization (object version 1, Field2 should be excluded) [StreamSerializer(StreamSerializerModes.OptIn, version: 1)] - internal class TestObject4 + internal class TestObject4 : ITestObject { public TestObject4() { } @@ -19,5 +19,7 @@ public TestObject4() { } // Included until object version 2 (excluded from object version 3+) [StreamSerializer(0, 2)] public bool Field3 { get; set; } + + public virtual bool CompareWith(ITestObject other) => other is TestObject4 obj && Field1 == obj.Field1 && Field2 == obj.Field2 && Field3 == obj.Field3; } } diff --git a/src/Stream-Serializer-Extensions Tests/TestObject5.cs b/src/Stream-Serializer-Extensions Tests/TestObject5.cs index 904def5..00bd061 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject5.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject5.cs @@ -28,6 +28,31 @@ protected TestObject5() : base() { } [StreamSerializer(0)] public bool AValue { get; set; } + public virtual bool CompareWith(ITestObject other) + { + if(other is TestObject5 obj && ZValue == obj.ZValue && BValue == obj.BValue && AValue == obj.AValue) + { + if (Stream != null) + { + Assert.IsNotNull(obj.Stream); + Assert.AreEqual(Stream.Length, obj.Stream.Length); + Stream.Position = 0; + byte[] temp1 = new byte[Stream.Length], + temp2 = new byte[temp1.Length]; + Assert.AreEqual(temp1.Length, Stream.Read(temp1)); + obj.Stream.Position = 0; + Assert.AreEqual(temp2.Length, obj.Stream.Read(temp2)); + Assert.IsTrue(temp1.SequenceEqual(temp2)); + } + else + { + Assert.IsNull(obj.Stream); + } + return true; + } + return false; + } + protected override void Dispose(bool disposing) => Stream?.Dispose(); } } diff --git a/src/Stream-Serializer-Extensions Tests/TestStruct.cs b/src/Stream-Serializer-Extensions Tests/TestStruct.cs index d391358..e6dca9d 100644 --- a/src/Stream-Serializer-Extensions Tests/TestStruct.cs +++ b/src/Stream-Serializer-Extensions Tests/TestStruct.cs @@ -1,11 +1,13 @@ namespace Stream_Serializer_Extensions_Tests { - public readonly record struct TestStruct + public readonly record struct TestStruct : ITestObject { public readonly bool Value; public TestStruct() => Value = false; public TestStruct(bool value) => Value = value; + + public bool CompareWith(ITestObject other) => other is TestStruct obj && Value == obj.Value; } } diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs index adc873c..bca58bb 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs @@ -18,7 +18,8 @@ public abstract class AutoStreamSerializerBase : StreamSerializerBase, IAutoS /// static AutoStreamSerializerBase() { - if (typeof(T).GetCustomAttribute() == null) throw new InvalidProgramException($"{typeof(T)} needs a {typeof(StreamSerializerAttribute)}"); + if (typeof(T).GetCustomAttribute() == null) + throw new InvalidProgramException($"{typeof(T)} needs a {typeof(StreamSerializerAttribute)}"); } /// diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs index 109a4f0..c134a04 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs @@ -1,4 +1,5 @@ -using System.Reflection; +using System.Buffers; +using System.Reflection; using wan24.Core; namespace wan24.StreamSerializerExtensions diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs index d06bf25..fd45c6a 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs @@ -15,7 +15,7 @@ public AutoStreamSerializerInfo(PropertyInfoExt property) { Property = property; IsNullable = property.Property.IsNullable(); - Attribute = property.Property.GetCustomAttributeCached() + Attribute = property.Property.GetCustomAttributeCached() ?? throw new ArgumentException($"Missing {typeof(StreamSerializerAttribute)}", nameof(property)); } @@ -72,7 +72,7 @@ public void Serialize(IAutoStreamSerializerConfig config, T obj, Stream strea else { stream.WriteObject( - Property.Getter!(obj) + Property.Getter!(obj) ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()) ); } @@ -91,7 +91,8 @@ public void Serialize(IAutoStreamSerializerConfig config, T obj, Stream strea /// Object /// Stream /// Cancellation token - public async Task SerializeAsync(IAutoStreamSerializerConfig config, T obj, Stream stream, CancellationToken cancellationToken) where T : IAutoStreamSerializer + public async Task SerializeAsync(IAutoStreamSerializerConfig config, T obj, Stream stream, CancellationToken cancellationToken) + where T : IAutoStreamSerializer { if (AsyncSerializer == null) { @@ -102,7 +103,8 @@ public async Task SerializeAsync(IAutoStreamSerializerConfig config, T obj, S else { await stream.WriteObjectAsync( - Property.Getter!(obj) ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()), + Property.Getter!(obj) + ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()), cancellationToken ).DynamicContext(); } @@ -169,7 +171,13 @@ public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, /// Object /// Value to serialize /// Stream - public delegate void Serializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object? value, Stream stream); + public delegate void Serializer_Delegate( + IAutoStreamSerializerConfig config, + AutoStreamSerializerInfo info, + IAutoStreamSerializer obj, + object? value, + Stream stream + ); /// /// Delegate for a serializer diff --git a/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs b/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs index 332b3c2..cedafc5 100644 --- a/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs +++ b/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs @@ -15,3 +15,6 @@ public class DefaultSerializerOptions : SerializerOptionsBase public DefaultSerializerOptions(PropertyInfoExt? property, StreamSerializerAttribute? attr = null) : base(property, attr) { } } } + +//TODO Use EnsureConnectType +//TODO Nullable parameter for array/list/dictionary reading diff --git a/src/Stream-Serializer-Extensions/ISerializerOptions.cs b/src/Stream-Serializer-Extensions/ISerializerOptions.cs index 7da4db9..235842f 100644 --- a/src/Stream-Serializer-Extensions/ISerializerOptions.cs +++ b/src/Stream-Serializer-Extensions/ISerializerOptions.cs @@ -16,6 +16,22 @@ public interface ISerializerOptions /// StreamSerializerAttribute Attribute { get; } /// + /// Serializer type + /// + SerializerTypes? Serializer { get; set; } + /// + /// Is the value nullable? + /// + bool IsNullable { get; set; } + /// + /// Key serializer options + /// + ISerializerOptions? KeyOptions { get; set; } + /// + /// Value serializer options + /// + ISerializerOptions? ValueOptions { get; set; } + /// /// Get the minimum length /// /// Default value diff --git a/src/Stream-Serializer-Extensions/ObjectTypes.cs b/src/Stream-Serializer-Extensions/ObjectTypes.cs index ed22c25..eefa054 100644 --- a/src/Stream-Serializer-Extensions/ObjectTypes.cs +++ b/src/Stream-Serializer-Extensions/ObjectTypes.cs @@ -14,6 +14,12 @@ public enum ObjectTypes : byte /// Boolean (boolean ) /// Bool = 1, +#pragma warning disable CA1069 // Double value + /// + /// + /// + True = 1, +#pragma warning restore CA1069 // Double value /// /// Byte /// @@ -79,16 +85,56 @@ public enum ObjectTypes : byte /// Struct = 17, /// + /// String UTF-16 + /// + String16 = 18, + /// + /// String UTF-32 + /// + String32 = 19, + /// + /// + /// + ClrType = 20, + /// + /// Using the object type from the cache, or the object from the object cache (if this flag is being used alone) + /// + Cached = 32, + /// /// Unsigned number /// Unsigned = 64, +#pragma warning disable CA1069 // Double value /// - /// Empty (or zero or boolean ) + /// No array rank + /// + NoRank = 64, +#pragma warning restore CA1069 // Double value + /// + /// Empty (or zero or boolean ; or enumeration termination or last item type, if this flag is being used alone) /// Empty = 128, +#pragma warning disable CA1069 // Double value + /// + /// + /// + False = 128, + /// + /// Use the last item type + /// + LastItemType = 128, + /// + /// Enumeration termination + /// + Break = 128, + /// + /// Generic type + /// + Generic = 128, +#pragma warning restore CA1069 // Double value /// /// All flags /// - FLAGS = Unsigned | Empty + FLAGS = Unsigned | Empty | Cached } } diff --git a/src/Stream-Serializer-Extensions/README.md b/src/Stream-Serializer-Extensions/README.md index d4c928f..5f5c1e1 100644 --- a/src/Stream-Serializer-Extensions/README.md +++ b/src/Stream-Serializer-Extensions/README.md @@ -17,11 +17,10 @@ The built in serializer supports binary serialization of - structures - possibly any other objects with a parameterless public constructor - streams +- CLR type informations and exports an asynchronous fluent API for writing operations, too. -**NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. - It's possible to override the build in serializers, and to add custom type serializers, too. @@ -145,6 +144,26 @@ only: written using the `WriteSerializedStruct*` methods. For reading you can use the `ReadSerializedStruct*` methods. +## CLR type information serialization + +CLR type informations support + +- normal types (also abstract and interface types) +- generic types (or type definitions) +- array types (with array rank) + +Internal the serializer uses a `SerializedTypeInfo` instance. + +```cs +stream.Write(typeof(Dictionary)); +stream.Position = 0; +Type type = stream.ReadType(); +Assert.AreEqual(typeof(Dictionary), type); +``` + +Use the `ReadSerializableType*` methods to ensure a serializer supported CLR +type. + ## Custom serializer ### Using the `StreamSerializerAttribute` attribute diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs new file mode 100644 index 0000000..f099e83 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs @@ -0,0 +1,431 @@ +using System.ComponentModel.DataAnnotations; +using System.Text; +using wan24.Core; +using wan24.ObjectValidation; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Serialized type informations + /// + public sealed class SerializedTypeInfo : ValidatableObjectBase, IStreamSerializerVersion + { + /// + /// Object version + /// + public const int VERSION = 1; + + /// + /// Recursion level (used to avoid a forced endless recursion using a manipulated byte sequence) + /// + private int Recursion = 0; + /// + /// CLR type + /// + private Type? ClrType = null; + /// + /// As string + /// + private string? AsString = null; + /// + /// Serialized object version + /// + private int? SerializedObjectVersion = null; + /// + /// Serializer version + /// + private int? SerializerVersion = null; + + /// + /// Constructor + /// + public SerializedTypeInfo() : base() { } + + /// + /// Constructor + /// + /// Type + public SerializedTypeInfo(Type type) : base() + { + ClrType = type; + ObjectType = type.GetObjectType(); + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = $"{type.Namespace}.{type.Name}"; + break; + } + if (type.IsGenericType) + { + if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + IsGenericTypeDefinition = type.IsGenericTypeDefinition; + if (IsGenericTypeDefinition) + { + GenericParameterCount = type.GetGenericArguments().Length; + } + else + { + GenericParameters = type.GetGenericArgumentsCached() + .Select(t => new SerializedTypeInfo(t) { Recursion = Recursion + 1 }) + .ToArray(); + } + } + else if (type.IsArray) + { + if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + ElementType = new(type.GetElementType()!) { Recursion = Recursion + 1 }; + ArrayRank = type.GetArrayRank(); + } + } + + /// + /// Object type + /// + public ObjectTypes ObjectType { get; private set; } + + /// + /// Name + /// + [StringLength(short.MaxValue, MinimumLength = 1)] + public string? Name { get; private set; } + + /// + /// Is a generic type definition? + /// + public bool IsGenericTypeDefinition { get; private set; } + + /// + /// Generic parameters + /// + [CountLimit(sbyte.MaxValue)] + public SerializedTypeInfo[] GenericParameters { get; private set; } = Array.Empty(); + + /// + /// Generic parameter count of a generic type definition + /// + [Range(0, sbyte.MaxValue)] + public int GenericParameterCount { get; private set; } + + /// + /// Array element type + /// + public SerializedTypeInfo? ElementType { get; private set; } + + /// + /// Array rank + /// + [Range(0, byte.MaxValue)] + public int ArrayRank { get; private set; } + + /// + /// Determine if the type is serializable + /// + public bool IsSerializable => StreamSerializer.IsTypeAllowed(ToClrType()); + + /// + int? IStreamSerializerVersion.ObjectVersion => VERSION; + + /// + int? IStreamSerializerVersion.SerializedObjectVersion => SerializedObjectVersion; + + /// + int? IStreamSerializerVersion.SerializerVersion => SerializerVersion; + + /// + /// Get as CLR type + /// + /// CLR type + public Type ToClrType() => ClrType ??= TypeHelper.Instance.GetType(ToString()) ?? throw new TypeLoadException($"{ToString()} is not available"); + + /// + /// Get as serializabe type (ensures, that the type can be (de)serialized) + /// + /// Serializable type + public Type ToSerializableType() => ClrType == null + ? ClrType = StreamSerializer.LoadType(ToString()) + : StreamSerializer.IsTypeAllowed(ClrType) + ? ClrType + : throw new SerializerException($"Failed to load type \"{ToString()}\""); + + /// + public void Serialize(Stream stream) + { + stream.WriteNumberNullable(VERSION) + .Write((byte)ObjectType); + if (Name != null) stream.WriteString(Name); + if (ObjectType.IsGeneric()) + { + int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Length; + stream.Write((sbyte)(IsGenericTypeDefinition ? -len : len)); + if (!IsGenericTypeDefinition) for (int i = 0; i < len; stream.WriteSerialized(GenericParameters[i]), i++) ; + } + else if (ObjectType.IsArray()) + { + stream.WriteSerialized(ElementType!); + if (!ObjectType.IsNotRanked()) stream.Write((byte)(ArrayRank - 1)); + } + } + + /// + public async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) + { + await stream.WriteNumberNullableAsync(VERSION, cancellationToken).DynamicContext(); + await stream.WriteAsync((byte)ObjectType, cancellationToken).DynamicContext(); + if (Name != null) await stream.WriteStringAsync(Name, cancellationToken).DynamicContext(); + if (ObjectType.IsGeneric()) + { + int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Length; + await stream.WriteAsync((sbyte)(IsGenericTypeDefinition ? -len : len), cancellationToken).DynamicContext(); + if (!IsGenericTypeDefinition) + for (int i = 0; i < len; i++) + await stream.WriteSerializedAsync(GenericParameters[i], cancellationToken).DynamicContext(); + } + else if (ObjectType.IsArray()) + { + await stream.WriteSerializedAsync(ElementType!, cancellationToken).DynamicContext(); + if (!ObjectType.IsNotRanked()) await stream.WriteAsync((byte)(ArrayRank - 1), cancellationToken).DynamicContext(); + } + } + + /// + public void Deserialize(Stream stream, int version) + { + SerializerVersion = version; + if (ObjectType == ObjectTypes.Null) + { + SerializedObjectVersion = stream.ReadNumberNullable(version) ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); + if (SerializedObjectVersion > VERSION) + throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); + ObjectType = (ObjectTypes)stream.ReadOneByte(version); + } + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = stream.ReadString(version, minLen: 1, maxLen: short.MaxValue); + break; + } + if (ObjectType.IsGeneric()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + int len = stream.ReadOneSByte(version); + IsGenericTypeDefinition = len < 0; + if (len < 0) len = -len; + SerializerHelper.EnsureValidLength(len, 1); + if (IsGenericTypeDefinition) + { + GenericParameterCount = len; + } + else + { + GenericParameters = new SerializedTypeInfo[len]; + for (int i = 0; i < len; i++) + { + GenericParameters[i] = new() + { + Recursion = Recursion + 1 + }; + GenericParameters[i].Deserialize(stream, version); + } + } + } + else if (ObjectType.IsArray()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + ElementType = new() + { + Recursion = Recursion + 1 + }; + ElementType.Deserialize(stream, version); + if (!ObjectType.IsNotRanked()) + { + ArrayRank = stream.ReadOneByte() + 1; + if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); + } + else + { + ArrayRank = 1; + } + } + } + + /// + public async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) + { + SerializerVersion = version; + if (ObjectType == ObjectTypes.Null) + { + SerializedObjectVersion = await stream.ReadNumberNullableAsync(version, cancellationToken: cancellationToken).DynamicContext() + ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); + if (SerializedObjectVersion > VERSION) + throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); + ObjectType = (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext(); + } + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = await stream.ReadStringAsync(version, minLen: 1, maxLen: short.MaxValue, cancellationToken: cancellationToken).DynamicContext(); + break; + } + if (ObjectType.IsGeneric()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + int len = await stream.ReadOneSByteAsync(version, cancellationToken).DynamicContext(); + IsGenericTypeDefinition = len < 0; + if (len < 0) len = -len; + SerializerHelper.EnsureValidLength(len, 1); + if (IsGenericTypeDefinition) + { + GenericParameterCount = len; + } + else + { + GenericParameters = new SerializedTypeInfo[len]; + for (int i = 0; i < len; i++) + { + GenericParameters[i] = new() + { + Recursion = Recursion + 1 + }; + await GenericParameters[i].DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + } + } + } + else if (ObjectType.IsArray()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + ElementType = new() + { + Recursion = Recursion + 1 + }; + await ElementType.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + if (!ObjectType.IsNotRanked()) + { + ArrayRank = await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() + 1; + if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); + } + else + { + ArrayRank = 1; + } + } + } + + /// + public override string ToString() + { + string ToStringInt() + { + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Bool: return typeof(bool).ToString(); + case ObjectTypes.Byte: return ObjectType.IsUnsigned() ? typeof(byte).ToString() : typeof(sbyte).ToString(); + case ObjectTypes.Short: return ObjectType.IsUnsigned() ? typeof(ushort).ToString() : typeof(short).ToString(); + case ObjectTypes.Int: return ObjectType.IsUnsigned() ? typeof(uint).ToString() : typeof(int).ToString(); + case ObjectTypes.Long: return ObjectType.IsUnsigned() ? typeof(ulong).ToString() : typeof(long).ToString(); + case ObjectTypes.Float: return typeof(float).ToString(); + case ObjectTypes.Double: return typeof(double).ToString(); + case ObjectTypes.Decimal: return typeof(decimal).ToString(); + case ObjectTypes.Bytes: return typeof(byte[]).ToString(); + case ObjectTypes.String: return typeof(string).ToString(); + case ObjectTypes.Array: return $"{ElementType ?? throw new InvalidDataException("Missing array element type")}[{(ArrayRank <= 1 ? string.Empty : new string(Enumerable.Repeat(',', ArrayRank - 1).ToArray()))}]"; + case ObjectTypes.Dict: + return IsGenericTypeDefinition + ? $"{typeof(Dictionary<,>).Namespace}.{typeof(Dictionary<,>).Name}" + : typeof(Dictionary<,>).MakeGenericType(GenericParameters.Select(i => i.ToClrType()).ToArray()).ToString(); + case ObjectTypes.List: + return IsGenericTypeDefinition + ? $"{typeof(List<>).Namespace}.{typeof(List<>).Name}" + : typeof(List<>).MakeGenericType(GenericParameters.Select(i => i.ToClrType()).ToArray()).ToString(); + } + if (Name == null) throw new InvalidDataException($"Missing type name for {ObjectType}"); + if (!ObjectType.IsGeneric()) return Name; + if (IsGenericTypeDefinition) return $"{Name}`{GenericParameters.Length}"; + StringBuilder sb = new($"{Name}`{GenericParameters.Length}["); + foreach (SerializedTypeInfo i in GenericParameters) + { + sb.Append(i.ToString()); + sb.Append(','); + } + sb.Remove(sb.Length - 1, 1); + sb.Append(']'); + return sb.ToString(); + } + return AsString ??= ToStringInt(); + } + + /// + /// Cast as + /// + /// Info + public static implicit operator Type(SerializedTypeInfo info) => info.ToClrType(); + + /// + /// Cast as serializable flag + /// + /// Info + public static implicit operator bool(SerializedTypeInfo info) => info.IsSerializable; + + /// + /// Cast as serialized data + /// + /// Info + public static implicit operator byte[](SerializedTypeInfo info) => info.ToBytes(); + + /// + /// Cast from serialized data + /// + /// Data + public static implicit operator SerializedTypeInfo(byte[] data) => data.ToObject(); + + /// + /// Deserialize with a pre-red object version (and type) + /// + /// Stream + /// Serializer version + /// Object version + /// Object type + /// Instance + public static SerializedTypeInfo From(Stream stream, int version, int objVersion, ObjectTypes objType = ObjectTypes.Null) + { + SerializedTypeInfo res = new() + { + SerializedObjectVersion = objVersion, + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)stream.ReadOneByte(version) : objType + }; + res.Deserialize(stream, version); + return res; + } + + /// + /// Deserialize with a pre-red object version (and type) + /// + /// Stream + /// Serializer version + /// Object version + /// Object type + /// Cancellation token + /// Instance + public static async Task FromAsync( + Stream stream, + int version, + int objVersion, + ObjectTypes objType = ObjectTypes.Null, + CancellationToken cancellationToken = default + ) + { + SerializedTypeInfo res = new() + { + SerializedObjectVersion = objVersion, + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() : objType + }; + await res.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + return res; + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index 81b30b7..73d0b41 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -7,6 +7,8 @@ using wan24.Core; using wan24.ObjectValidation; +//TODO Write/read enumerables + namespace wan24.StreamSerializerExtensions { /// @@ -104,6 +106,42 @@ public static class SerializerHelper [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsUnsigned(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Unsigned); + /// + /// Is cached? + /// + /// Type + /// Cached? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsCached(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Cached); + + /// + /// Is generic? + /// + /// Type + /// Generic? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsGeneric(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Generic); + + /// + /// Is an array? + /// + /// Type + /// An array? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsArray(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Array); + + /// + /// Is not ranked? + /// + /// Type + /// Not ranked? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsNotRanked(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.NoRank); + /// /// Is a number? /// @@ -125,6 +163,43 @@ public static class SerializerHelper _ => false }; + /// + /// Determine if a type name is required + /// + /// Type + /// Is required? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool RequiresTypeName(this ObjectTypes type) => type.RemoveFlags() switch + { + ObjectTypes.Array => true, + ObjectTypes.List => true, + ObjectTypes.Dict => true, + ObjectTypes.Object => true, + ObjectTypes.Serializable => true, + ObjectTypes.ClrType => true, + _ => false + }; + + /// + /// Does the type require to write the serialized object? + /// + /// Type + /// Is required? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool RequiresObjectWriting(this ObjectTypes type) => type switch + { + ObjectTypes.Null => false, + ObjectTypes.Bool => false, + ObjectTypes.Cached => false, + _ => !type.ContainsAnyFlag(ObjectTypes.Bool, ObjectTypes.Empty) + }; + /// /// Get the type of a number /// @@ -409,6 +484,7 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje string => ObjectTypes.String, byte[] => ObjectTypes.Bytes, Stream => ObjectTypes.Stream, + Type => ObjectTypes.ClrType, IStreamSerializer => ObjectTypes.Serializable, _ => ObjectTypes.Null }; @@ -499,6 +575,8 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje case ObjectTypes.Serializable: writeType = true; break; + case ObjectTypes.ClrType: + break; case ObjectTypes.Bytes: if (((byte[])obj).Length == 0) { @@ -525,11 +603,12 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje /// /// Value type /// Value + /// Argument value /// Non-null value [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T EnsureNotNull(T? value) - => value ?? throw new SerializerException($"Argument {nameof(value)} is NULL", new ArgumentNullException(nameof(value))); + public static T EnsureNotNull(T? value, string? name = null) + => value ?? throw new SerializerException($"Argument {name ?? nameof(value)} is NULL", new ArgumentNullException(name ?? nameof(value))); /// /// Ensure a valid length @@ -672,5 +751,184 @@ public static bool IsSerializerConstructor(this ConstructorInfo ci, bool require pis[1].ParameterType == typeof(int) && (!requireAttribute || ci.GetCustomAttributeCached() is not null); } + + /// + /// Get item serialization informations from a type + /// + /// Item type + /// Is an asynchronous context? + /// Serializer type, synchronous serializer and asynchronous serializer + public static (SerializerTypes Type, StreamSerializer.Serialize_Delegate? Serializer, StreamSerializer.AsyncSerialize_Delegate? AsyncSerializer) GetItemSerializerInfo( + this Type type, + bool isAsync + ) + { + int thc = type.GetHashCode(); + if (type.IsAbstract || type.IsInterface || thc == typeof(object).GetHashCode()) return (SerializerTypes.Any, null, null); + if (thc == typeof(bool).GetHashCode()) return (SerializerTypes.Bool, null, null); + if (type.IsNumeric()) return (SerializerTypes.Number, null, null); + if (type.IsEnum) return (SerializerTypes.Enum, null, null); + if (thc == typeof(string).GetHashCode()) return (SerializerTypes.String, null, null); + if (thc == typeof(byte[]).GetHashCode()) return (SerializerTypes.Bytes, null, null); + if (type.IsArray) return (SerializerTypes.Array, null, null); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + (StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = FindSerializer(type); + if (syncSerializer != null || (isAsync && asyncSerializer != null)) return (SerializerTypes.Serializer, syncSerializer, asyncSerializer); + if (typeof(Stream).IsAssignableFrom(type)) return (SerializerTypes.Stream, null, null); + if (typeof(IDictionary).IsAssignableFrom(type)) return (SerializerTypes.Dictionary, null, null); + if (typeof(IList).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + if (type.IsValueType) return (SerializerTypes.Struct, null, null); + return (SerializerTypes.AnyObject, null, null); + } + + /// + /// Get item deserialization informations from a type + /// + /// Item type + /// Is an asynchronous context? + /// Serializer type, synchronous deserializer and asynchronous deserializer + public static ( + SerializerTypes Type, + StreamSerializer.Deserialize_Delegate? Deserializer, + StreamSerializer.AsyncDeserialize_Delegate? AsyncDeserializer + ) GetItemDeserializerInfo( + this Type type, + bool isAsync + ) + { + int thc = type.GetHashCode(); + if (type.IsAbstract || type.IsInterface || thc == typeof(object).GetHashCode()) return (SerializerTypes.Any, null, null); + if (thc == typeof(bool).GetHashCode()) return (SerializerTypes.Bool, null, null); + if (type.IsNumeric()) return (SerializerTypes.Number, null, null); + if (type.IsEnum) return (SerializerTypes.Enum, null, null); + if (thc == typeof(string).GetHashCode()) return (SerializerTypes.String, null, null); + if (thc == typeof(byte[]).GetHashCode()) return (SerializerTypes.Bytes, null, null); + if (type.IsArray) return (SerializerTypes.Array, null, null); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + (StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = FindDeserializer(type); + if (syncDeserializer != null || (isAsync && asyncDeserializer != null)) return (SerializerTypes.Serializer, syncDeserializer, asyncDeserializer); + if (typeof(Stream).IsAssignableFrom(type)) return (SerializerTypes.Stream, null, null); + if (typeof(IDictionary).IsAssignableFrom(type)) return (SerializerTypes.Dictionary, null, null); + if (typeof(IList).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + if (type.IsValueType) return (SerializerTypes.Struct, null, null); + return (SerializerTypes.AnyObject, null, null); + } + + /// + /// Find type serializers + /// + /// Type + /// Synchronous and asynchronous serializers + public static (StreamSerializer.Serialize_Delegate? Serializer, StreamSerializer.AsyncSerialize_Delegate? AsyncSerializer) FindSerializer(this Type type) + => (StreamSerializer.FindSerializer(type), StreamSerializer.FindAsyncSerializer(type)); + + /// + /// Find type deserializers + /// + /// Type + /// Synchronous and asynchronous deserializers + public static (StreamSerializer.Deserialize_Delegate? Deserializer, StreamSerializer.AsyncDeserialize_Delegate? AsyncDeserializer) FindDeserializer(this Type type) + => (StreamSerializer.FindDeserializer(type), StreamSerializer.FindAsyncDeserializer(type)); + + /// + /// Ensure a correct object type, based on additional serializer options for a property + /// + /// Object type + /// Property + /// Object type + public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, PropertyInfoExt pi) + => pi.GetCustomAttributeCached() is StreamSerializerAttribute attr + ? EnsureCorrectObjectType(objType, attr) + : objType; + + /// + /// Ensure a correct object type, based on additional serializer options + /// + /// Object type + /// Options + /// Object type + public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, ISerializerOptions options) + { + switch (objType) + { + case ObjectTypes.String: + if(options.Serializer!=null) + switch (options.Serializer.Value) + { + case SerializerTypes.String16: + objType = ObjectTypes.String16; + break; + case SerializerTypes.String32: + objType = ObjectTypes.String32; + break; + } + break; + } + return objType; + } + + /// + /// Ensure a correct object type, based on additional serializer options + /// + /// Object type + /// Attribute + /// Object type + public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, StreamSerializerAttribute attr) + { + switch (objType) + { + case ObjectTypes.String: + if (attr.Serializer != null) + switch (attr.Serializer.Value) + { + case SerializerTypes.String16: + objType = ObjectTypes.String16; + break; + case SerializerTypes.String32: + objType = ObjectTypes.String32; + break; + } + break; + } + return objType; + } + + /// + /// Get the object type of a type + /// + /// Type + /// Object type + public static ObjectTypes GetObjectType(this Type type) + { + ObjectTypes objType; + int thc = type.GetHashCode(); + if (thc == typeof(bool).GetHashCode()) objType = ObjectTypes.Bool; + else if (thc == typeof(sbyte).GetHashCode()) objType = ObjectTypes.Byte; + else if (thc == typeof(byte).GetHashCode()) objType = ObjectTypes.Byte | ObjectTypes.Unsigned; + else if (thc == typeof(short).GetHashCode()) objType = ObjectTypes.Short; + else if (thc == typeof(ushort).GetHashCode()) objType = ObjectTypes.Short | ObjectTypes.Unsigned; + else if (thc == typeof(int).GetHashCode()) objType = ObjectTypes.Int; + else if (thc == typeof(uint).GetHashCode()) objType = ObjectTypes.Int | ObjectTypes.Unsigned; + else if (thc == typeof(long).GetHashCode()) objType = ObjectTypes.Long; + else if (thc == typeof(ulong).GetHashCode()) objType = ObjectTypes.Long | ObjectTypes.Unsigned; + else if (thc == typeof(float).GetHashCode()) objType = ObjectTypes.Float; + else if (thc == typeof(double).GetHashCode()) objType = ObjectTypes.Double; + else if (thc == typeof(decimal).GetHashCode()) objType = ObjectTypes.Decimal; + else if (thc == typeof(byte[]).GetHashCode()) objType = ObjectTypes.Bytes; + else if (thc == typeof(string).GetHashCode()) objType = ObjectTypes.String; + else if (thc == typeof(Stream).GetHashCode()) objType = ObjectTypes.Stream; + else if (thc == typeof(Type).GetHashCode()) objType = ObjectTypes.ClrType; + else if (type.IsArray) + { + objType = ObjectTypes.Array; + if (type.GetArrayRank() == 1) objType |= ObjectTypes.NoRank; + } + else if (type.IsGenericType && typeof(Dictionary<,>).IsAssignableFrom(type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition())) objType = ObjectTypes.Dict; + else if (type.IsGenericType && typeof(List<>).IsAssignableFrom(type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition())) objType = ObjectTypes.List; + else if (type.IsValueType) objType = ObjectTypes.Struct; + else objType = ObjectTypes.Object; + if (type.IsGenericType) objType |= ObjectTypes.Generic; + return objType; + } } } diff --git a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs index 51e1e17..9bbba91 100644 --- a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs +++ b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs @@ -28,6 +28,18 @@ protected SerializerOptionsBase(PropertyInfoExt? property, StreamSerializerAttri /// public StreamSerializerAttribute Attribute { get; } + /// + public SerializerTypes? Serializer { get; set; } + + /// + public bool IsNullable { get; set; } + + /// + public ISerializerOptions? KeyOptions { get; set; } + + /// + public ISerializerOptions? ValueOptions { get; set; } + /// public virtual int GetMinLen(int defaultValue) { diff --git a/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs b/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs new file mode 100644 index 0000000..d15261a --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs @@ -0,0 +1,34 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// fluent extensions + /// + public static class SerializerOptionsFluentExtensions + { + /// + /// Configure key serializer options + /// + /// Options type + /// Options + /// Key options + /// Options + public static T WithKeyOptions(this T options, ISerializerOptions? keyOptions) where T : ISerializerOptions + { + options.KeyOptions = keyOptions; + return options; + } + + /// + /// Configure value serializer options + /// + /// Options type + /// Options + /// value options + /// Options + public static T WithValueOptions(this T options, ISerializerOptions? valueOptions) where T : ISerializerOptions + { + options.ValueOptions = valueOptions; + return options; + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerTypes.cs b/src/Stream-Serializer-Extensions/SerializerTypes.cs new file mode 100644 index 0000000..b687038 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerTypes.cs @@ -0,0 +1,73 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Serializer types enumeration + /// + public enum SerializerTypes + { + /// + /// Any type serializer + /// + Any, + /// + /// Any object + /// + AnyObject, + /// + /// Registered serializer + /// + Serializer, + /// + /// object + /// + StreamSerializer, + /// + /// Boolaen + /// + Bool, + /// + /// Number + /// + Number, + /// + /// Enumeration + /// + Enum, + /// + /// String (UTF-8) + /// + String, + /// + /// String (UTF-16) + /// + String16, + /// + /// String (UTF-32) + /// + String32, + /// + /// Byte array + /// + Bytes, + /// + /// Object array + /// + Array, + /// + /// List + /// + List, + /// + /// Dictionary + /// + Dictionary, + /// + /// Structure (using Marshal) + /// + Struct, + /// + /// Stream + /// + Stream + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs index 980e28d..9e8518c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs @@ -19,7 +19,7 @@ public static partial class StreamExtensions [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions? options = null) - => ReadAnyInt(stream, version, (ObjectTypes)ReadOneByte(stream, version), options); + => ReadAnyInt(stream, version, (ObjectTypes)ReadOneByte(stream, version), type:null, options); /// /// Read any object @@ -27,25 +27,46 @@ public static object ReadAny(this Stream stream, int? version = null, ISerialize /// Stream /// Serializer version /// Object type + /// CLR type /// Options /// Object #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objType, ISerializerOptions? options) + private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objType, Type? type, ISerializerOptions? options) => SerializerException.Wrap(() => { if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); + version ??= StreamSerializer.Version; bool isEmpty = objType.HasFlag(ObjectTypes.Empty), isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), - readType = true; - Type? type = null; + readType = objType.RequiresTypeName(); switch (objType.RemoveFlags()) { case ObjectTypes.Bool: return !isEmpty; case ObjectTypes.Byte: + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(byte) : typeof(sbyte); + break; + default: + return isUnsigned ? ReadOneByte(stream, version) : ReadOneSByte(stream, version); + } + break; case ObjectTypes.Short: + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(ushort) : typeof(short); + break; + default: + return isUnsigned ? ReadUShort(stream, version) : ReadShort(stream, version); + } + break; case ObjectTypes.Int: case ObjectTypes.Long: case ObjectTypes.Float: @@ -53,8 +74,6 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp case ObjectTypes.Decimal: type = objType.RemoveFlags() switch { - ObjectTypes.Byte => isUnsigned ? typeof(byte) : typeof(sbyte), - ObjectTypes.Short => isUnsigned ? typeof(ushort) : typeof(short), ObjectTypes.Int => isUnsigned ? typeof(uint) : typeof(int), ObjectTypes.Long => isUnsigned ? typeof(ulong) : typeof(long), ObjectTypes.Float => typeof(float), @@ -72,6 +91,24 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp minLen: options?.GetMinLen(0) ?? 0, maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ); + case ObjectTypes.String16: + return isEmpty + ? string.Empty + : ReadString16( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ); + case ObjectTypes.String32: + return isEmpty + ? string.Empty + : ReadString32( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ); case ObjectTypes.Bytes: return isEmpty ? Array.Empty() @@ -81,9 +118,6 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp minLen: options?.GetMinLen(0) ?? 0, maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).Value; - case ObjectTypes.Stream: - readType = false; - break; } if (readType && type == null) type = StreamSerializer.LoadType(ReadString(stream, version, minLen: 1, maxLen: short.MaxValue)); switch (objType.RemoveFlags()) @@ -155,6 +189,8 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp res.Dispose(); throw; } + case ObjectTypes.ClrType: + return ReadType(stream, version); default: throw new InvalidProgramException(); } @@ -173,7 +209,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static async Task ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) - => await ReadAnyIntAsync(stream, version, (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(), options, cancellationToken) + => await ReadAnyIntAsync(stream, version, (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(), type: null, options, cancellationToken) .DynamicContext(); /// @@ -182,27 +218,51 @@ public static async Task ReadAnyAsync(this Stream stream, int? version = /// Stream /// Serializer version /// Object type + /// CLR type /// Options /// Cancellation token /// Object #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectTypes objType, ISerializerOptions? options, CancellationToken cancellationToken) + private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectTypes objType, Type? type, ISerializerOptions? options, CancellationToken cancellationToken) => SerializerException.WrapAsync(async () => { if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); bool isEmpty = objType.HasFlag(ObjectTypes.Empty), isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), readType = true; - Type? type = null; Task task; switch (objType.RemoveFlags()) { case ObjectTypes.Bool: return !isEmpty; case ObjectTypes.Byte: + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(byte) : typeof(sbyte); + break; + default: + return isUnsigned + ? await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() + : await ReadOneSByteAsync(stream, version, cancellationToken).DynamicContext(); + } + break; case ObjectTypes.Short: + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(ushort) : typeof(short); + break; + default: + return isUnsigned + ? await ReadUShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + : await ReadShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + } + break; case ObjectTypes.Int: case ObjectTypes.Long: case ObjectTypes.Float: @@ -210,8 +270,6 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT case ObjectTypes.Decimal: type = objType.RemoveFlags() switch { - ObjectTypes.Byte => isUnsigned ? typeof(byte) : typeof(sbyte), - ObjectTypes.Short => isUnsigned ? typeof(ushort) : typeof(short), ObjectTypes.Int => isUnsigned ? typeof(uint) : typeof(int), ObjectTypes.Long => isUnsigned ? typeof(ulong) : typeof(long), ObjectTypes.Float => typeof(float), @@ -230,6 +288,26 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken: cancellationToken ).DynamicContext(); + case ObjectTypes.String16: + return isEmpty + ? string.Empty + : await ReadString16Async( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, + cancellationToken: cancellationToken + ).DynamicContext(); + case ObjectTypes.String32: + return isEmpty + ? string.Empty + : await ReadString32Async( + stream, + version, + minLen: options?.GetMinLen(0) ?? 0, + maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, + cancellationToken: cancellationToken + ).DynamicContext(); case ObjectTypes.Bytes: return isEmpty ? Array.Empty() @@ -267,7 +345,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default), - cancellationToken + cancellationToken: cancellationToken ).DynamicContext(); case ObjectTypes.List: if (isEmpty) return Activator.CreateInstance(type!)!; @@ -279,7 +357,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default), - cancellationToken + cancellationToken: cancellationToken ).DynamicContext(); case ObjectTypes.Dict: if (isEmpty) return Activator.CreateInstance(type!)!; @@ -292,7 +370,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.Version, cancellationToken), options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, cancellationToken), - cancellationToken + cancellationToken: cancellationToken ).DynamicContext(); case ObjectTypes.Object: return await ReadObjectAsync(stream, type!, version, options, cancellationToken).DynamicContext(); @@ -327,6 +405,8 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT res.Dispose(); throw; } + case ObjectTypes.ClrType: + return await ReadTypeAsync(stream, version, cancellationToken).DynamicContext(); default: throw new InvalidProgramException(); } @@ -348,7 +428,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT public static object? ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) { ObjectTypes objType = (ObjectTypes)ReadOneByte(stream, version); - return objType == ObjectTypes.Null ? null : ReadAnyInt(stream, version, objType, options); + return objType == ObjectTypes.Null ? null : ReadAnyInt(stream, version, objType, type: null, options); } /// @@ -371,7 +451,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT ) { ObjectTypes objType = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return objType == ObjectTypes.Null ? null : await ReadAnyIntAsync(stream, version, objType, options, cancellationToken).DynamicContext(); + return objType == ObjectTypes.Null ? null : await ReadAnyIntAsync(stream, version, objType, type: null, options, cancellationToken).DynamicContext(); } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs index 6524179..2628ea3 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs @@ -18,6 +18,7 @@ public static partial class StreamExtensions /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -29,15 +30,15 @@ public static T[] ReadArray( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - for (int i = 0; i < len; res[i] = ReadObject(stream, version, valueOptions), i++) ; - return res; + return ReadFixedArray(stream, res, version, valueOptions, valuesNullable); } /// @@ -50,6 +51,7 @@ public static T[] ReadArray( /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -62,7 +64,8 @@ public static Array ReadArray( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, () => "Not an array type")); @@ -70,8 +73,7 @@ public static Array ReadArray( SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type elementType = type.GetElementType()!; Array res = Array.CreateInstance(elementType, len); - for (int i = 0; i < len; res.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; - return res; + return ReadFixedArray(stream, res, version, valueOptions, valuesNullable); } /// @@ -84,6 +86,7 @@ public static Array ReadArray( /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -97,6 +100,7 @@ public static async Task ReadArrayAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -104,8 +108,7 @@ public static async Task ReadArrayAsync( SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - for (int i = 0; i < len; res[i] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(), i++) ; - return res; + return await ReadFixedArrayAsync(stream, res, version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); } /// @@ -118,6 +121,7 @@ public static async Task ReadArrayAsync( /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -132,6 +136,7 @@ public static async Task ReadArrayAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -140,8 +145,7 @@ public static async Task ReadArrayAsync( SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type elementType = type.GetElementType()!; Array res = Array.CreateInstance(elementType, len); - for (int i = 0; i < len; res.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++) ; - return res; + return await ReadFixedArrayAsync(stream, res, version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); } /// @@ -154,6 +158,7 @@ public static async Task ReadArrayAsync( /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -165,7 +170,8 @@ public static async Task ReadArrayAsync( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch @@ -181,7 +187,7 @@ public static async Task ReadArrayAsync( SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - ReadFixedArray(stream, res.AsSpan(), version, valueOptions); + ReadFixedArray(stream, res.AsSpan(), version, valueOptions, valuesNullable); return res; } } @@ -197,6 +203,7 @@ public static async Task ReadArrayAsync( /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -209,7 +216,8 @@ public static async Task ReadArrayAsync( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch @@ -228,7 +236,8 @@ public static async Task ReadArrayAsync( stream, Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len, minLen, maxLen)), version, - valueOptions + valueOptions, + valuesNullable ); } } @@ -244,6 +253,7 @@ public static async Task ReadArrayAsync( /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -257,6 +267,7 @@ public static async Task ReadArrayAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -266,7 +277,7 @@ public static async Task ReadArrayAsync( case 2: { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadArrayAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + ? await ReadArrayAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() : null; } default: @@ -275,7 +286,7 @@ public static async Task ReadArrayAsync( SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - await ReadFixedArrayAsync(stream, res.AsMemory(), version, valueOptions, cancellationToken).DynamicContext(); + await ReadFixedArrayAsync(stream, res.AsMemory(), version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); return res; } } @@ -291,6 +302,7 @@ public static async Task ReadArrayAsync( /// Minimum length /// Maximum length /// Value deserializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -305,6 +317,7 @@ public static async Task ReadArrayAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -314,7 +327,7 @@ public static async Task ReadArrayAsync( case 2: { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadArrayAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + ? await ReadArrayAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() : null; } default: @@ -327,161 +340,12 @@ public static async Task ReadArrayAsync( Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len, minLen, maxLen)), version, valueOptions, + valuesNullable, + pool, cancellationToken ).DynamicContext(); } } } - - /// - /// Read - /// - /// Element type - /// Stream - /// Array - /// Serializer version - /// Value deserializer options - /// Value - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T[] ReadFixedArray(this Stream stream, T[] arr, int? version = null, ISerializerOptions? valueOptions = null) - { - ReadFixedArray(stream, arr.AsSpan(), version, valueOptions); - return arr; - } - - /// - /// Read - /// - /// Element type - /// Stream - /// Array - /// Serializer version - /// Value deserializer options - /// Value - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static Span ReadFixedArray(this Stream stream, Span arr, int? version = null, ISerializerOptions? valueOptions = null) - { - try - { - for (int i = 0, len = arr.Length; i < len; arr[i] = ReadObject(stream, version, valueOptions), i++) ; - return arr; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw SerializerException.From(ex); - } - } - - /// - /// Read - /// - /// Stream - /// Array - /// Serializer version - /// Value deserializer options - /// Value - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static Array ReadFixedArray(this Stream stream, Array arr, int? version = null, ISerializerOptions? valueOptions = null) - { - Type elementType = arr.GetType().GetElementType()!; - for (int i = 0, len = arr.Length; i < len; arr.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; - return arr; - } - - /// - /// Read - /// - /// Element type - /// Stream - /// Array - /// Serializer version - /// Value deserializer options - /// Cancellation token - /// Value - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadFixedArrayAsync( - this Stream stream, - T[] arr, - int? version = null, - ISerializerOptions? valueOptions = null, - CancellationToken cancellationToken = default - ) - { - await ReadFixedArrayAsync(stream, arr.AsMemory(), version, valueOptions, cancellationToken).DynamicContext(); - return arr; - } - - /// - /// Read - /// - /// Element type - /// Stream - /// Array - /// Serializer version - /// Value deserializer options - /// Cancellation token - /// Value - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static async Task> ReadFixedArrayAsync( - this Stream stream, - Memory arr, - int? version = null, - ISerializerOptions? valueOptions = null, - CancellationToken cancellationToken = default - ) - { - T item; - for (int i = 0, len = arr.Length; i < len; i++) - { - item = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); - arr.Span[i] = item; - } - return arr; - } - - /// - /// Read - /// - /// Stream - /// Array - /// Serializer version - /// Value deserializer options - /// Cancellation token - /// Value - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static async Task ReadFixedArrayAsync( - this Stream stream, - Array arr, - int? version = null, - ISerializerOptions? valueOptions = null, - CancellationToken cancellationToken = default - ) - { - Type elementType = arr.GetType().GetElementType()!; - for ( - int i = 0, len = arr.Length; - i < len; - arr.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++ - ) ; - return arr; - } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs index 2020ad0..b92efbf 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs @@ -55,8 +55,8 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, return type switch { ObjectTypes.Null => null, - ObjectTypes.Bool => true, - ObjectTypes.Empty => false, + ObjectTypes.True => true, + ObjectTypes.False => false, _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) }; } @@ -92,8 +92,8 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, return type switch { ObjectTypes.Null => null, - ObjectTypes.Bool => true, - ObjectTypes.Empty => false, + ObjectTypes.True => true, + ObjectTypes.False => false, _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) }; } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs index 2ceacc7..6a48cd0 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs @@ -21,6 +21,7 @@ public static partial class StreamExtensions /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -33,15 +34,17 @@ public static Dictionary ReadDict( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) where tKey : notnull { + version ??= StreamSerializer.Version; pool ??= StreamSerializer.BufferPool; int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - for (int i = 0; i < len; i++) res[ReadObject(stream, version, keyOptions)] = ReadObject(stream, version, valueOptions); + ReadDictInt(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable); return res; } @@ -56,6 +59,7 @@ public static Dictionary ReadDict( /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -69,7 +73,8 @@ public static IDictionary ReadDict( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -77,12 +82,13 @@ public static IDictionary ReadDict( type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a dictionary type" )); + version ??= StreamSerializer.Version; pool ??= StreamSerializer.BufferPool; int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; i++) res[ReadObject(stream, types[0], version, keyOptions)] = ReadObject(stream, types[1], version, valueOptions); + ReadDictInt(stream, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len, version.Value, keyOptions, valueOptions, valuesNullable); return res; } @@ -98,6 +104,7 @@ public static IDictionary ReadDict( /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -112,17 +119,17 @@ public static async Task> ReadDictAsync( int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) where tKey : notnull { + version ??= StreamSerializer.Version; pool ??= StreamSerializer.BufferPool; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - for (int i = 0; i < len; i++) - res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken).DynamicContext()] - = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); + await ReadDictIntAsync(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable, cancellationToken).DynamicContext(); return res; } @@ -137,6 +144,7 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -152,6 +160,7 @@ public static async Task ReadDictAsync( int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -160,14 +169,25 @@ public static async Task ReadDictAsync( type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a dictionary type" )); + version ??= StreamSerializer.Version; pool ??= StreamSerializer.BufferPool; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; i++) - res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationToken).DynamicContext()] - = await ReadObjectAsync(stream, types[1], version, valueOptions, cancellationToken).DynamicContext(); + await ReadDictIntAsync( + stream, + res, + type.GenericTypeArguments[0], + type.GenericTypeArguments[1], + len, + version.Value, + keyOptions, + valueOptions, + valuesNullable, + cancellationToken + ) + .DynamicContext(); return res; } @@ -183,6 +203,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -195,7 +216,8 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) where tKey : notnull { @@ -210,7 +232,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - for (int i = 0; i < len; i++) res[ReadObject(stream, version, keyOptions)] = ReadObject(stream, version, valueOptions); + ReadDictInt(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable); return res; } } @@ -227,6 +249,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -240,7 +263,8 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -262,7 +286,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; i++) res[ReadObject(stream, types[0], version, keyOptions)] = ReadObject(stream, types[1], version, valueOptions); + ReadDictInt(stream, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len, version.Value, keyOptions, valueOptions, valuesNullable); return res; } } @@ -280,6 +304,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -294,6 +319,7 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) where tKey : notnull @@ -305,17 +331,17 @@ res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationTok case 2: { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDictAsync(stream, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() + ? await ReadDictAsync(stream, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken: cancellationToken) + .DynamicContext() : null; } default: { - if(await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - for (int i = 0; i < len; i++) - res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken).DynamicContext()] - = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); + await ReadDictIntAsync(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable, cancellationToken) + .DynamicContext(); return res; } } @@ -332,6 +358,7 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). /// Maximum length /// Key serializer options /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -347,6 +374,7 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). int maxLen = int.MaxValue, ISerializerOptions? keyOptions = null, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -362,7 +390,7 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). case 2: { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDictAsync(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() + ? await ReadDictAsync(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken: cancellationToken).DynamicContext() : null; } default: @@ -371,12 +399,394 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; i++) - res[await ReadObjectAsync(stream, types[0], version, keyOptions, cancellationToken).DynamicContext()] - = await ReadObjectAsync(stream, types[1], version, valueOptions, cancellationToken).DynamicContext(); + await ReadDictIntAsync( + stream, + res, + type.GenericTypeArguments[0], + type.GenericTypeArguments[1], + len, + version.Value, + keyOptions, + valueOptions, + valuesNullable, + cancellationToken + ).DynamicContext(); return res; } } } + + /// + /// Read dictionary items + /// + /// Stream + /// Dictionary + /// Key type + /// Value type + /// Number of items + /// Serializer version + /// Key serializer options + /// Value serializer options + /// Are the values nullable? + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ReadDictInt( + Stream stream, + IDictionary dict, + Type keyType, + Type valueType, + int count, + int version, + ISerializerOptions? keyOptions, + ISerializerOptions? valueOptions, + bool valuesNullable + ) + { + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0; i < count; i++) dict[ReadObject(stream, keyType, version, keyOptions)] = ReadObject(stream, valueType, version, valueOptions); + } + break; + default: + { + object key; + object? value; + (SerializerTypes keySerializer, StreamSerializer.Deserialize_Delegate? keySyncDeserializer, _) = keyType.GetItemDeserializerInfo(isAsync: false); + (SerializerTypes valueSerializer, StreamSerializer.Deserialize_Delegate? valueSyncDeserializer, _) = valueType.GetItemDeserializerInfo(isAsync: false); + Type? keyItemType = null, + valueItemType = null; + ObjectTypes keyObjType = default, + valueObjType = default, + lastKeyObjType = default, + lastValueObjType = default; + SerializerTypes keyItemSerializer = default, + valueItemSerializer = default; + StreamSerializer.Deserialize_Delegate? keyItemSyncDeserializer = null, + valueItemSyncDeserializer = null; + Type[]? keyTypeCache = null, + typeCache = null; + object[]? objectCache = null; + Span keyTypeCacheSpan, + typeCacheSpan; + ReadOnlySpan keyObjectCacheSpan, + objectCacheSpan; + object? obj; + int objIndex; + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + try + { + if (keySerializer == SerializerTypes.Any) + { + keyTypeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + keyTypeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); + keyObjectCacheSpan = Array.Empty().AsSpan(); + } + else + { + keyTypeCacheSpan = Array.Empty().AsSpan(); + keyObjectCacheSpan = Array.Empty().AsSpan(); + } + if (valueSerializer == SerializerTypes.Any) + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); + } + else + { + typeCacheSpan = Array.Empty().AsSpan(); + objectCacheSpan = Array.Empty().AsSpan(); + } + for (int i = 0; i < count; i++) + { + if (keySerializer == SerializerTypes.Any) + { + ReadAnyItemHeader( + stream, + version, + keyType, + i, + keyTypeCacheSpan, + keyObjectCacheSpan, + ref keyObjType, + ref lastKeyObjType, + ref keyItemType, + ref keyItemSerializer, + ref keyItemSyncDeserializer + ); + key = (keyItemSerializer == SerializerTypes.Serializer + ? ReadItem(stream, version, nullable: false, keyItemSerializer, keyType, pool: null, keyOptions, keyItemSyncDeserializer) + : ReadAnyInt(stream, version, keyObjType, keyItemType, keyOptions))!; + } + else + { + key = ReadItem(stream, version, nullable: false, keySerializer, keyType, pool: null, keyOptions, keySyncDeserializer)!; + } + if (valueSerializer == SerializerTypes.Any) + { + obj = ReadAnyItemHeader( + stream, + version, + valueType, + i, + typeCacheSpan, + objectCacheSpan, + ref valueObjType, + ref lastValueObjType, + ref valueItemType, + ref valueItemSerializer, + ref valueItemSyncDeserializer + ); + if (obj == null && valueObjType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + value = null; + } + if (obj == null) + { + value = (valueItemSerializer == SerializerTypes.Serializer + ? ReadItem(stream, version, nullable: false, valueItemSerializer, valueType, pool: null, valueOptions, valueItemSyncDeserializer) + : ReadAnyInt(stream, version, valueObjType, valueItemType, valueOptions))!; + objIndex = objectCache!.IndexOf(null); + if (objIndex != -1) objectCache![objIndex] = value!; + } + else + { + value = obj; + } + } + else + { + value = ReadItem(stream, version, valuesNullable, valueSerializer, valueType, pool: null, valueOptions, valueSyncDeserializer)!; + } + dict[key] = value; + } + } + finally + { + if (keyTypeCache != null) ArrayPool.Shared.Return(keyTypeCache); + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + break; + } + } + } + + /// + /// Read dictionary items + /// + /// Stream + /// Dictionary + /// Key type + /// Value type + /// Number of items + /// Serializer version + /// Key serializer options + /// Value serializer options + /// Are the values nullable? + /// Cancellation token + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task ReadDictIntAsync( + Stream stream, + IDictionary dict, + Type keyType, + Type valueType, + int count, + int version, + ISerializerOptions? keyOptions, + ISerializerOptions? valueOptions, + bool valuesNullable, + CancellationToken cancellationToken + ) + { + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0; i < count; i++) + dict[await ReadObjectAsync(stream, keyType, version, keyOptions, cancellationToken).DynamicContext()] = + await ReadObjectAsync(stream, valueType, version, valueOptions, cancellationToken).DynamicContext(); + } + break; + default: + { + object key; + object? value; + ( + SerializerTypes keySerializer, + StreamSerializer.Deserialize_Delegate? keySyncDeserializer, + StreamSerializer.AsyncDeserialize_Delegate? keyAsyncDeserializer + ) = + keyType.GetItemDeserializerInfo(isAsync: true); + ( + SerializerTypes valueSerializer, + StreamSerializer.Deserialize_Delegate? valueSyncDeserializer, + StreamSerializer.AsyncDeserialize_Delegate? valueAsyncDeserializer + ) = + valueType.GetItemDeserializerInfo(isAsync: true); + Type? keyItemType = null, + valueItemType = null; + ObjectTypes keyObjType = default, + valueObjType = default, + lastKeyObjType = default, + lastValueObjType = default; + SerializerTypes keyItemSerializer = default, + valueItemSerializer = default; + StreamSerializer.Deserialize_Delegate? keyItemSyncDeserializer = null, + valueItemSyncDeserializer = null; + StreamSerializer.AsyncDeserialize_Delegate? keyItemAsyncDeserializer = null, + valueItemAsyncDeserializer = null; + Type[]? keyTypeCache = null, + typeCache = null; + object[]? objectCache = null; + Memory keyTypeCacheMem, + typeCacheMem; + ReadOnlyMemory keyObjectCacheMem, + objectCacheMem; + object? obj; + int objIndex; + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + try + { + if (keySerializer == SerializerTypes.Any) + { + keyTypeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + keyTypeCacheMem = typeCache.AsMemory(0, byte.MaxValue); + keyObjectCacheMem = Array.Empty().AsMemory(); + } + else + { + keyTypeCacheMem = Array.Empty().AsMemory(); + keyObjectCacheMem = Array.Empty().AsMemory(); + } + if (valueSerializer == SerializerTypes.Any) + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); + } + else + { + typeCacheMem = Array.Empty().AsMemory(); + objectCacheMem = Array.Empty().AsMemory(); + } + for (int i = 0; i < count; i++) + { + if (keySerializer == SerializerTypes.Any) + { + (obj, keyObjType, lastKeyObjType, keyItemType, keyItemSerializer, keyItemSyncDeserializer, keyItemAsyncDeserializer) = + await ReadAnyItemHeaderAsync( + stream, + version, + keyType, + i, + keyTypeCacheMem, + keyObjectCacheMem, + lastKeyObjType, + keyItemType, + keyItemSerializer, + keyItemSyncDeserializer, + keyItemAsyncDeserializer, + cancellationToken + ); + key = (keyItemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync( + stream, + version, + nullable: false, + keyItemSerializer, + keyItemType, + pool: null, + keyOptions, + keyItemSyncDeserializer, + keyItemAsyncDeserializer, + cancellationToken + ).DynamicContext() + : await ReadAnyIntAsync(stream, version, keyObjType, keyItemType, keyOptions, cancellationToken).DynamicContext())!; + } + else + { + key = ReadItem(stream, version, nullable: false, keySerializer, keyType, pool: null, keyOptions, keySyncDeserializer)!; + } + if (valueSerializer == SerializerTypes.Any) + { + (obj, valueObjType, lastValueObjType, valueItemType, valueItemSerializer, valueItemSyncDeserializer, valueItemAsyncDeserializer) = + await ReadAnyItemHeaderAsync( + stream, + version, + valueType, + i, + typeCacheMem, + objectCacheMem, + lastValueObjType, + valueItemType, + valueItemSerializer, + valueItemSyncDeserializer, + valueItemAsyncDeserializer, + cancellationToken + ).DynamicContext(); + if (obj == null && valueObjType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + value = null; + } + else if (obj == null) + { + value = (valueItemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync( + stream, + version, + nullable: false, + valueItemSerializer, + valueType, + pool: null, + valueOptions, + valueItemSyncDeserializer, + valueItemAsyncDeserializer, + cancellationToken + ).DynamicContext() + : await ReadAnyIntAsync(stream, version, valueObjType, valueItemType, valueOptions, cancellationToken).DynamicContext())!; + objIndex = objectCache!.IndexOf(null); + if (objIndex != -1) objectCache![objIndex] = value!; + } + else + { + value = obj; + } + } + else + { + value = (await ReadItemAsync( + stream, + version, + valuesNullable, + valueSerializer, + valueType, + pool: null, + valueOptions, + valueSyncDeserializer, + valueAsyncDeserializer, + cancellationToken + ).DynamicContext())!; + } + dict[key] = value; + } + } + finally + { + if (keyTypeCache != null) ArrayPool.Shared.Return(keyTypeCache); + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + break; + } + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs new file mode 100644 index 0000000..3a9ccc8 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs @@ -0,0 +1,573 @@ +using System.Buffers; +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Fixed array + public static partial class StreamExtensions + { + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Are the values nullable? + /// Array pool + /// Value + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T[] ReadFixedArray( + this Stream stream, + T[] arr, + int? version = null, + ISerializerOptions? valueOptions = null, + bool valuesNullable = false, + ArrayPool? pool = null + ) + { + ReadFixedArray(stream, arr.AsSpan(), version, valueOptions, valuesNullable, pool); + return arr; + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Are the values nullable? + /// Array pool + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Span ReadFixedArray( + this Stream stream, + Span arr, + int? version = null, + ISerializerOptions? valueOptions = null, + bool valuesNullable = false, + ArrayPool? pool = null + ) + { + try + { + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0, len = arr.Length; i < len; arr[i] = ReadObject(stream, version, valueOptions), i++) ; + return arr; + } + default: + { + Type type = typeof(T); + (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, _) = type.GetItemDeserializerInfo(isAsync: false); + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + if (serializer == SerializerTypes.Any) + { + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Span typeCacheSpan; + ReadOnlySpan objectCacheSpan; + object? obj; + int objIndex; + try + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); + for (int i = 0, len = arr.Length; i < len; i++) + { + obj = ReadAnyItemHeader( + stream, + version.Value, + type, + i, + typeCache, + objectCache, + ref objType, + ref lastObjType, + ref itemType, + ref itemSerializer, + ref itemSyncDeserializer + ); + Logging.WriteInfo($"READ {i} {stream.Position} {objType} {(int)objType} {itemType} {obj}"); + if (obj == null && objType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + arr[i] = (T?)obj!; + } + else if (obj == null) + { + arr[i] = (itemSerializer == SerializerTypes.Serializer + ? (T?)(obj = ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool, valueOptions, itemSyncDeserializer)) + : (T?)(obj = ReadAnyInt(stream, version.Value, objType, itemType, valueOptions)))!; + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + Logging.WriteInfo($"RED {obj}"); + } + else + { + arr[i] = (T)obj; + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + } + else + { + for (int i = 0, len = arr.Length; i < len; i++) + arr[i] = (T)ReadItem(stream, version.Value, valuesNullable, serializer, type, pool, valueOptions, syncDeserializer)!; + } + return arr; + } + } + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw SerializerException.From(ex); + } + } + + /// + /// Read + /// + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Are the values nullable? + /// Array pool + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Array ReadFixedArray( + this Stream stream, + Array arr, + int? version = null, + ISerializerOptions? valueOptions = null, + bool valuesNullable = false, + ArrayPool? pool = null + ) + { + Type elementType = arr.GetType().GetElementType()!; + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0, len = arr.Length; i < len; arr.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; + return arr; + } + default: + { + Type type = arr.GetType().GetElementType()!; + (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, _) = type.GetItemDeserializerInfo(isAsync: false); + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + if (serializer == SerializerTypes.Any) + { + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Span typeCacheSpan; + ReadOnlySpan objectCacheSpan; + object? obj; + int objIndex; + try + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); + for (int i = 0, len = arr.Length; i < len; i++) + { + obj = ReadAnyItemHeader( + stream, + version.Value, + type, + i, + typeCache, + objectCache, + ref objType, + ref lastObjType, + ref itemType, + ref itemSerializer, + ref itemSyncDeserializer + ); + if (obj == null && objType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + arr.SetValue(null, i); + } + else if (obj == null) + { + arr.SetValue(obj = itemSerializer == SerializerTypes.Serializer + ? ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool, valueOptions, itemSyncDeserializer) + : ReadAnyInt(stream, version.Value, objType, itemType, valueOptions), + i); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + arr.SetValue(obj, i); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + } + else + { + for (int i = 0, len = arr.Length; i < len; i++) + arr.SetValue(ReadItem(stream, version.Value, valuesNullable, serializer, type, pool, valueOptions, syncDeserializer)!, i); + } + return arr; + } + } + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Are the values nullable? + /// Array pool + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadFixedArrayAsync( + this Stream stream, + T[] arr, + int? version = null, + ISerializerOptions? valueOptions = null, + bool valuesNullable = false, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) + { + await ReadFixedArrayAsync(stream, arr.AsMemory(), version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); + return arr; + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Are the values nullable? + /// Array pool + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task> ReadFixedArrayAsync( + this Stream stream, + Memory arr, + int? version = null, + ISerializerOptions? valueOptions = null, + bool valuesNullable = false, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) + { + T? item; + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0, len = arr.Length; i < len; i++) + { + item = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); + arr.Span[i] = item; + } + return arr; + } + default: + { + Type type = typeof(T); + (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = + type.GetItemDeserializerInfo(isAsync: true); + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + if (serializer == SerializerTypes.Any) + { + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Memory typeCacheMem; + ReadOnlyMemory objectCacheMem; + object? obj; + int objIndex; + try + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); + for (int i = 0, len = arr.Length; i < len; i++) + { + (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = + await ReadAnyItemHeaderAsync( + stream, + version.Value, + type, + i, + typeCacheMem, + objectCacheMem, + lastObjType, + itemType, + itemSerializer, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext(); + if (obj == null && objType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + item = default; + } + else if (obj == null) + { + item = (itemSerializer == SerializerTypes.Serializer + ? (T?)await ReadItemAsync( + stream, + version.Value, + nullable: false, + itemSerializer, + itemType, + pool, + valueOptions, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext() + : (T?)await ReadAnyIntAsync(stream, version.Value, lastObjType, itemType, valueOptions, cancellationToken).DynamicContext())!; + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = item!; + } + else + { + item = (T)obj; + } + arr.Span[i] = item!; + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + } + else + { + for (int i = 0, len = arr.Length; i < len; i++) + { + item = (T)(await ReadItemAsync( + stream, + version.Value, + valuesNullable, + serializer, + type, + pool, + valueOptions, + syncDeserializer, + asyncDeserializer, + cancellationToken + ).DynamicContext())!; + arr.Span[i] = item; + } + } + return arr; + } + } + } + + /// + /// Read + /// + /// Stream + /// Array + /// Serializer version + /// Value deserializer options + /// Are the values nullable? + /// Array pool + /// Cancellation token + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadFixedArrayAsync( + this Stream stream, + Array arr, + int? version = null, + ISerializerOptions? valueOptions = null, + bool valuesNullable = false, + ArrayPool? pool = null, + CancellationToken cancellationToken = default + ) + { + Type elementType = arr.GetType().GetElementType()!; + switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for ( + int i = 0, len = arr.Length; + i < len; + arr.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++ + ) ; + return arr; + } + default: + { + Type type = arr.GetType().GetElementType()!; + (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = + type.GetItemDeserializerInfo(isAsync: true); + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + if (serializer == SerializerTypes.Any) + { + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Memory typeCacheMem; + ReadOnlyMemory objectCacheMem; + object? obj; + int objIndex; + try + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); + for (int i = 0, len = arr.Length; i < len; i++) + { + (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = + await ReadAnyItemHeaderAsync( + stream, + version.Value, + type, + i, + typeCacheMem, + objectCacheMem, + lastObjType, + itemType, + itemSerializer, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext(); + if (obj == null && objType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + arr.SetValue(null, i); + } + else if (obj == null) + { + arr.SetValue(obj = itemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync( + stream, + version.Value, + nullable: false, + itemSerializer, + itemType, + pool, + valueOptions, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext() + : await ReadAnyIntAsync(stream, version.Value, objType, itemType, valueOptions, cancellationToken).DynamicContext(), + i); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + arr.SetValue(obj, i); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + } + else + { + for (int i = 0, len = arr.Length; i < len; i++) + arr.SetValue(await ReadItemAsync( + stream, + version.Value, + valuesNullable, + serializer, + type, + pool, + valueOptions, + syncDeserializer, + asyncDeserializer, + cancellationToken + ).DynamicContext(), i); + } + return arr; + } + } + } + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs new file mode 100644 index 0000000..abfc8a5 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs @@ -0,0 +1,392 @@ +using System.Buffers; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Items + public static partial class StreamExtensions + { + /// + /// Read an item using a specified serializer + /// + /// Stream + /// Serializer version + /// Nullable? + /// Serializer type + /// Type + /// Array pool + /// Serializer options + /// Synchronous deserializer + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static dynamic? ReadItem( + Stream stream, + int version, + bool nullable, + SerializerTypes serializer, + Type? type = null, + ArrayPool? pool = null, + ISerializerOptions? options = null, + StreamSerializer.Deserialize_Delegate? syncDeserializer = null + ) + { + if (!nullable) + { + switch (serializer) + { + case SerializerTypes.StreamSerializer: return ReadSerializedObject(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); + case SerializerTypes.Serializer: + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); + return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + ?? throw new SerializerException($"{type} deserialized to NULL"); + } + case SerializerTypes.Any: return ReadAny(stream, version, options); + case SerializerTypes.AnyObject: return ReadAnyObject(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); + case SerializerTypes.Bool: return ReadBool(stream, version, pool); + case SerializerTypes.Number: return ReadNumber(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); + case SerializerTypes.Enum: return ReadEnum(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); + case SerializerTypes.String: return ReadString(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String16: return ReadString16(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String32: return ReadString32(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.Bytes: return ReadBytes(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).Value; + case SerializerTypes.Array: return ReadArray(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); + case SerializerTypes.List: return ReadList(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); + case SerializerTypes.Dictionary: return ReadDict(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions); + case SerializerTypes.Struct: + return ReadStructMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool) + ?? throw new SerializerException($"{nameof(ReadStruct)} serialized {type} to NULL"); + case SerializerTypes.Stream: return ReadStream(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + switch (serializer) + { + case SerializerTypes.StreamSerializer: return ReadSerializedObjectNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); + case SerializerTypes.Serializer: + { + if (!ReadBool(stream, version, pool)) return null; + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); + return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + ?? throw new SerializerException($"{type} deserialized to NULL"); + } + case SerializerTypes.Any: return ReadAnyNullable(stream, version, options); + case SerializerTypes.AnyObject: return ReadAnyObjectNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); + case SerializerTypes.Bool: return ReadBoolNullable(stream, version, pool); + case SerializerTypes.Number: return ReadNumberNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); + case SerializerTypes.Enum: return ReadEnumNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); + case SerializerTypes.String: return ReadStringNullable(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String16: return ReadString16Nullable(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String32: return ReadString32Nullable(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.Bytes: return ReadBytesNullable(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue)?.Value; + case SerializerTypes.Array: return ReadArrayNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); + case SerializerTypes.List: return ReadListNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); + case SerializerTypes.Dictionary: return ReadDictNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions); + case SerializerTypes.Struct: return ReadStructNullableMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool); + case SerializerTypes.Stream: return ReadStreamNullable(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + + /// + /// Read an item using a specified serializer + /// + /// Stream + /// Serializer version + /// Nullable? + /// Serializer type + /// Type + /// Array pool + /// Serializer options + /// Synchronous deserializer + /// Asynchronous deserializer + /// Cancellation token + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadItemAsync( + Stream stream, + int version, + bool nullable, + SerializerTypes serializer, + Type? type = null, + ArrayPool? pool = null, + ISerializerOptions? options = null, + StreamSerializer.Deserialize_Delegate? syncDeserializer = null, + StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer = null, + CancellationToken cancellationToken = default + ) + { + if (!nullable) + { + switch (serializer) + { + case SerializerTypes.StreamSerializer: return await ReadSerializedObjectAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); + case SerializerTypes.Serializer: + { + if (asyncDeserializer == null) + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); + return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + ?? throw new SerializerException($"{type} deserialized to NULL"); + } + else + { + Task task = SerializerException.WrapAsync(() => asyncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options, cancellationToken)); + await task.DynamicContext(); + return task.GetResult(type!); + } + } + case SerializerTypes.Any: return await ReadAnyAsync(stream, version, options, cancellationToken).DynamicContext(); + case SerializerTypes.AnyObject: return await ReadAnyObjectAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); + case SerializerTypes.Bool: return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext(); + case SerializerTypes.Number: return await ReadNumberAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); + case SerializerTypes.Enum: return await ReadEnumAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); + case SerializerTypes.String: return await ReadStringAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); + case SerializerTypes.String16: return await ReadString16Async(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); + case SerializerTypes.String32: return await ReadString32Async(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); + case SerializerTypes.Bytes: return (await ReadBytesAsync(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext()).Value; + case SerializerTypes.Array: return await ReadArrayAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.List: return await ReadListAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Dictionary: return await ReadDictAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Struct: + return ReadStructMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool) + ?? throw new SerializerException($"{nameof(ReadStruct)} serialized {type} to NULL"); + case SerializerTypes.Stream: return await ReadStreamAsync(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version, cancellationToken), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue, cancellationToken).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + switch (serializer) + { + case SerializerTypes.StreamSerializer: return await ReadSerializedObjectNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); + case SerializerTypes.Serializer: + { + if (!await ReadBoolAsync(stream, version, pool, cancellationToken: cancellationToken).DynamicContext()) return null; + if (asyncDeserializer == null) + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); + return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + ?? throw new SerializerException($"{type} deserialized to NULL"); + } + else + { + Task task = SerializerException.WrapAsync(() => asyncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options, cancellationToken)); + await task.DynamicContext(); + return task.GetResult(type!); + } + } + case SerializerTypes.Any: return await ReadAnyNullableAsync(stream, version, options, cancellationToken).DynamicContext(); + case SerializerTypes.AnyObject: return await ReadAnyObjectNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); + case SerializerTypes.Bool: return await ReadBoolNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); + case SerializerTypes.Number: return await ReadNumberNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); + case SerializerTypes.Enum: return await ReadEnumNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); + case SerializerTypes.String: return await ReadStringNullableAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); + case SerializerTypes.String16: return await ReadString16NullableAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); + case SerializerTypes.String32: return await ReadString32NullableAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); + case SerializerTypes.Bytes: return (await ReadBytesNullableAsync(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext())?.Value; + case SerializerTypes.Array: return await ReadArrayNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.List: return await ReadListNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Dictionary: return await ReadDictNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Struct: + return ReadStructNullableMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool) + ?? throw new SerializerException($"{nameof(ReadStructNullable)} serialized {type} to NULL"); + case SerializerTypes.Stream: return await ReadStreamNullableAsync(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version, cancellationToken), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue, cancellationToken).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + + /// + /// Read an item header, if the final item type is not specified + /// + /// Stream + /// Serializer version + /// Item element type + /// Item index + /// Type cache + /// Object cache + /// Object type + /// Last object type + /// Item type + /// Item serializer type + /// Synchronous item deserializer + /// Cached object + public static object? ReadAnyItemHeader( + Stream stream, + int version, + Type elementType, + int index, + Span typeCache, + ReadOnlySpan objectCache, + ref ObjectTypes objType, + ref ObjectTypes lastObjType, + ref Type? itemType, + ref SerializerTypes itemSerializer, + ref StreamSerializer.Deserialize_Delegate? itemSyncDeserializer + ) + { + bool requireType; + // Read the object type + objType = (ObjectTypes)ReadOneByte(stream, version); + if (objType == ObjectTypes.Null) return null; + // Use the object cache + if (objType == ObjectTypes.Cached) + { + int objIndex = ReadOneByte(stream, version); + object? res = objectCache[objIndex] ?? throw new SerializerException($"Invalid object cache index #{objIndex}", new InvalidDataException()); + itemType = res.GetType(); + objType = itemType.GetObjectSerializerInfo().ObjectType; + (itemSerializer, itemSyncDeserializer, _) = itemType.GetItemDeserializerInfo(isAsync: false); + lastObjType = objType; + return res; + } + // Prepare the deserialization + lastObjType = objType.RequiresObjectWriting() ? objType : default; + if (objType == ObjectTypes.LastItemType) + { + // Use the last object type + if (index == 0) throw new SerializerException($"Invalid object type for item #{index}", new InvalidDataException()); + requireType = false; + } + else + { + // Ensure correct deserializer informations + requireType = objType.RequiresTypeName(); + if (requireType) + { + // An object type is required + if (objType.IsCached()) + { + // Use a previously cached object type + int typeIndex = ReadOneByte(stream, version); + itemType = typeCache[typeIndex] ?? throw new SerializerException($"No type at cache index #{typeIndex}", new InvalidDataException()); + objType &= ~ObjectTypes.Cached; + } + else + { + // Read the object type + itemType = ReadSerializableType(stream, version); + if (!elementType.IsAssignableFrom(itemType) || itemType.IsAbstract || itemType.IsInterface || itemType == typeof(object)) + throw new SerializerException($"Invalid item type {itemType} for item #{index} ({elementType})", new InvalidCastException()); + int typeIndex = typeCache.AsReadOnly().IndexOf(null!); + if (typeIndex != -1) typeCache[typeIndex] = itemType; + (itemSerializer, itemSyncDeserializer, _) = itemType.GetItemDeserializerInfo(isAsync: false); + } + } + else + { + // No object type is required + itemType = null; + itemSerializer = SerializerTypes.Any; + } + } + // Ensure having a valid type serializer configuration + if (requireType && itemType == null) + throw new SerializerException($"Serialized type name expected for item #{index}", new InvalidDataException()); + return null; + } + + /// + /// Read an item header, if the final item type is not specified + /// + /// Stream + /// Serializer version + /// Item element type + /// Item index + /// Type cache + /// Object cache + /// Last object type + /// Item type + /// Item serializer type + /// Synchronous item deserializer + /// Asynchronous item deserializer + /// Cancellation token + /// Item informations + public static async Task<( + object? Object, + ObjectTypes ObjectType, + ObjectTypes LastObjType, + Type? ItemType, + SerializerTypes ItemSerializer, + StreamSerializer.Deserialize_Delegate? ItemSyncDesSerializer, + StreamSerializer.AsyncDeserialize_Delegate? ItemAsyncDeserializer + )> ReadAnyItemHeaderAsync( + Stream stream, + int version, + Type elementType, + int index, + Memory typeCache, + ReadOnlyMemory objectCache, + ObjectTypes lastObjType, + Type? itemType, + SerializerTypes itemSerializer, + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer, + StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer, + CancellationToken cancellationToken + ) + { + bool requireType; + // Read the object type + ObjectTypes objType = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + if (objType == ObjectTypes.Null) return (Object: null, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer); + // Use the object cache + if (objType == ObjectTypes.Cached) + { + int objIndex = await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + object? res = objectCache.Span[objIndex] ?? throw new SerializerException($"Invalid object cache index #{objIndex}", new InvalidDataException()); + itemType = res.GetType(); + objType = itemType.GetObjectSerializerInfo().ObjectType; + (itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = itemType.GetItemDeserializerInfo(isAsync: false); + lastObjType = objType; + return (res, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer); + } + // Prepare the deserialization + lastObjType = objType.RequiresObjectWriting() ? objType : default; + if (objType == ObjectTypes.LastItemType) + { + // Use the last object type + if (index == 0) throw new SerializerException($"Invalid object type for item #{index}", new InvalidDataException()); + requireType = false; + } + else + { + // Ensure correct deserializer informations + requireType = objType.RequiresTypeName(); + if (requireType) + { + // An object type (name) is required + if (objType.IsCached()) + { + // Use a previously cached object type + int typeIndex = await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + itemType = typeCache.Span[typeIndex] ?? throw new SerializerException($"No type at cache index #{typeIndex}", new InvalidDataException()); + objType &= ~ObjectTypes.Cached; + } + else + { + // Read the object type name + itemType = await ReadSerializableTypeAsync(stream, version, cancellationToken).DynamicContext(); + if (!elementType.IsAssignableFrom(itemType) || itemType.IsAbstract || itemType.IsInterface || itemType == typeof(object)) + throw new SerializerException($"Invalid item type {itemType} for item #{index} ({elementType})", new InvalidCastException()); + int typeIndex = typeCache.AsReadOnly().IndexOf(null!); + if (typeIndex != -1) typeCache.Span[typeIndex] = itemType; + (itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = itemType.GetItemDeserializerInfo(isAsync: true); + } + } + else + { + // No object type name is required + itemType = null; + itemSerializer = SerializerTypes.Any; + } + } + // Ensure having a valid type serializer configuration + if (requireType && itemType == null) + throw new SerializerException($"Serialized type expected for item #{index}", new InvalidDataException()); + return (Object: null, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer); + } + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs index fbeb920..9d5f1a0 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs @@ -19,6 +19,7 @@ public static partial class StreamExtensions /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -30,13 +31,15 @@ public static List ReadList( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { + version ??= StreamSerializer.Version; int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - for (int i = 0; i < len; res.Add(ReadObject(stream, version, valueOptions)), i++) ; + ReadListInt(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable); return res; } @@ -50,6 +53,7 @@ public static List ReadList( /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -62,7 +66,8 @@ public static IList ReadList( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -70,11 +75,12 @@ public static IList ReadList( type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); + version ??= StreamSerializer.Version; int len = ReadNumber(stream, version, pool); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; res.Add(ReadObject(stream, itemType, version, valueOptions)), i++) ; + ReadListInt(stream, res, itemType, len, version.Value, valueOptions, valuesNullable); return res; } @@ -88,6 +94,7 @@ public static IList ReadList( /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -101,13 +108,15 @@ public static async Task> ReadListAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { + version ??= StreamSerializer.Version; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + await ReadListIntAsync(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); return res; } @@ -121,6 +130,7 @@ public static async Task> ReadListAsync( /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -135,6 +145,7 @@ public static async Task ReadListAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -143,11 +154,12 @@ public static async Task ReadListAsync( type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); + version ??= StreamSerializer.Version; int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, itemType, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + await ReadListIntAsync(stream, res, type.GenericTypeArguments[0], len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); return res; } @@ -161,6 +173,7 @@ public static async Task ReadListAsync( /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -172,7 +185,8 @@ public static async Task ReadListAsync( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch @@ -184,10 +198,11 @@ public static async Task ReadListAsync( } default: { + version ??= StreamSerializer.Version; if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - for (int i = 0; i < len; res.Add(ReadObject(stream, version, valueOptions)), i++) ; + ReadListInt(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable); return res; } } @@ -203,6 +218,7 @@ public static async Task ReadListAsync( /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -215,7 +231,8 @@ public static async Task ReadListAsync( ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null + ISerializerOptions? valueOptions = null, + bool valuesNullable = false ) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -232,11 +249,12 @@ public static async Task ReadListAsync( } default: { + version ??= StreamSerializer.Version; if (ReadNumberNullable(stream, version, pool) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; res.Add(ReadObject(stream, itemType, version, valueOptions)), i++) ; + ReadListInt(stream, res, itemType, len, version.Value, valueOptions, valuesNullable); return res; } } @@ -252,6 +270,7 @@ public static async Task ReadListAsync( /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -265,6 +284,7 @@ public static async Task ReadListAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -274,15 +294,16 @@ public static async Task ReadListAsync( case 2: { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadListAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + ? await ReadListAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() : null; } default: { + version ??= StreamSerializer.Version; if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + await ReadListIntAsync(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); return res; } } @@ -298,6 +319,7 @@ public static async Task ReadListAsync( /// Minimum length /// Maximum length /// Value serializer options + /// Are the values nullable? /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] @@ -312,6 +334,7 @@ public static async Task ReadListAsync( int minLen = 0, int maxLen = int.MaxValue, ISerializerOptions? valueOptions = null, + bool valuesNullable = false, CancellationToken cancellationToken = default ) { @@ -326,19 +349,244 @@ public static async Task ReadListAsync( case 2: { return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadListAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() + ? await ReadListAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() : null; } default: { + version ??= StreamSerializer.Version; if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - for (int i = 0; i < len; res.Add(await ReadObjectAsync(stream, itemType, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + await ReadListIntAsync(stream, res, itemType, len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); return res; } } } + + /// + /// Read list items + /// + /// Stream + /// List + /// Item type + /// Number of items + /// Serializer version + /// Value serializer options + /// Are the values nullable? + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ReadListInt(Stream stream, IList list, Type type, int count, int version, ISerializerOptions? valueOptions, bool valuesNullable) + { + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0; i < count; list.Add(ReadObject(stream, type, version, valueOptions)), i++) ; + break; + } + default: + { + (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, _) = type.GetItemDeserializerInfo(isAsync: false); + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + if (serializer == SerializerTypes.Any) + { + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Span typeCacheSpan; + ReadOnlySpan objectCacheSpan; + object? obj; + int objIndex; + try + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); + for (int i = 0; i < count; i++) + { + obj = ReadAnyItemHeader( + stream, + version, + type, + i, + typeCacheSpan, + objectCacheSpan, + ref objType, + ref lastObjType, + ref itemType, + ref itemSerializer, + ref itemSyncDeserializer + ); + if (obj == null && objType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + list.Add(null); + } + else if (obj == null) + { + list.Add((obj = itemSerializer == SerializerTypes.Serializer + ? ReadItem(stream, version, nullable: false, itemSerializer, itemType, pool: null, valueOptions, itemSyncDeserializer) + : ReadAnyInt(stream, version, objType, itemType, valueOptions))!); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + list.Add(obj); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + } + else + { + for (int i = 0; i < count; i++) + list.Add(ReadItem(stream, version, valuesNullable, serializer, type, pool: null, valueOptions, syncDeserializer)!); + } + break; + } + } + } + + /// + /// Read list items + /// + /// Stream + /// List + /// Item type + /// Number of items + /// Serializer version + /// Value serializer options + /// Are the values nullable? + /// Cancellation token + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task ReadListIntAsync( + Stream stream, + IList list, + Type type, + int count, + int version, + ISerializerOptions? valueOptions, + bool valuesNullable, + CancellationToken cancellationToken + ) + { + switch (version & byte.MaxValue)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0; i < count; list.Add(await ReadObjectAsync(stream, type, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + break; + } + default: + { + (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = + type.GetItemDeserializerInfo(isAsync: true); + if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; + if (serializer == SerializerTypes.Any) + { + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Memory typeCacheMem; + ReadOnlyMemory objectCacheMem; + object? obj; + int objIndex; + try + { + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); + for (int i = 0; i < count; i++) + { + (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = + await ReadAnyItemHeaderAsync( + stream, + version, + type, + i, + typeCacheMem, + objectCacheMem, + lastObjType, + itemType, + itemSerializer, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext(); + if (obj == null && objType == ObjectTypes.Null) + { + if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + list.Add(null); + } + else if (obj == null) + { + list.Add(obj = itemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync( + stream, + version, + nullable: false, + itemSerializer, + itemType, + pool: null, + valueOptions, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext() + : await ReadAnyIntAsync(stream, version, lastObjType, itemType, valueOptions, cancellationToken).DynamicContext()); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + list.Add(obj); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); + } + } + else + { + for (int i = 0; i < count; i++) + list.Add(await ReadItemAsync( + stream, + version, + valuesNullable, + serializer, + type, + pool: null, + valueOptions, + syncDeserializer, + asyncDeserializer, + cancellationToken + ).DynamicContext()); + } + break; + } + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs index 05a95d0..c64e1a5 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs @@ -1,4 +1,5 @@ -using System.ComponentModel.DataAnnotations; +using System.Buffers; +using System.ComponentModel.DataAnnotations; using System.Runtime; using System.Runtime.CompilerServices; using System.Text; @@ -202,6 +203,7 @@ public static Task ReadObjectAsync( /// Object public static T ReadAnyObject(this Stream stream, int? version = null) where T : class, new() { + version ??= StreamSerializer.Version; // Handle serializable type Type type = typeof(T); if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (T)ReadSerializedObject(stream, type, version); @@ -216,23 +218,71 @@ public static Task ReadObjectAsync( bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; T res = new(); - for (int i = 0; i < count; i++) + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Span typeCacheSpan; + ReadOnlySpan objectCacheSpan; + object? obj; + int objIndex; + try { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? ReadAnyNullable(stream, version) - : ReadAny(stream, version) - ); + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + obj = ReadAnyItemHeader( + stream, + version.Value, + pi.PropertyType, + i, + typeCache, + objectCache, + ref objType, + ref lastObjType, + ref itemType, + ref itemSerializer, + ref itemSyncDeserializer + ); + if (obj == null && objType == ObjectTypes.Null) + { + if (!pi.PropertyType.IsNullable()) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, itemSerializer == SerializerTypes.Serializer + ? obj = ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool: null, options: null, itemSyncDeserializer) + : obj = ReadAnyInt(stream, version.Value, objType, itemType, options: null)); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + pi.Setter!(res, obj); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) @@ -252,6 +302,7 @@ public static Task ReadObjectAsync( /// Object public static object ReadAnyObject(this Stream stream, Type type, int? version = null) { + version ??= StreamSerializer.Version; // Handle serializable type if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); // Find the stream serializer attribute @@ -265,23 +316,71 @@ public static object ReadAnyObject(this Stream stream, Type type, int? version = bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); - for (int i = 0; i < count; i++) + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Span typeCacheSpan; + ReadOnlySpan objectCacheSpan; + object? obj; + int objIndex; + try { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? ReadAnyNullable(stream, version) - : ReadAny(stream, version) - ); + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + obj = ReadAnyItemHeader( + stream, + version.Value, + pi.PropertyType, + i, + typeCache, + objectCache, + ref objType, + ref lastObjType, + ref itemType, + ref itemSerializer, + ref itemSyncDeserializer + ); + if (obj == null && objType == ObjectTypes.Null) + { + if (!pi.PropertyType.IsNullable()) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, itemSerializer == SerializerTypes.Serializer + ? obj = ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool: null, options: null, itemSyncDeserializer) + : obj = ReadAnyInt(stream, version.Value, objType, itemType, options: null)); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + pi.Setter!(res, obj); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) @@ -302,6 +401,7 @@ public static object ReadAnyObject(this Stream stream, Type type, int? version = /// Object public static async Task ReadAnyObjectAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, new() { + version ??= StreamSerializer.Version; // Handle serializable type Type type = typeof(T); if (typeof(IStreamSerializer).IsAssignableFrom(type)) @@ -320,23 +420,85 @@ await ReadNumberNullableAsync(stream, version, cancellationToken: cancellat bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; T res = new(); - for (int i = 0; i < count; i++) + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Memory typeCacheMem; + ReadOnlyMemory objectCacheMem; + object? obj; + int objIndex; + try { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ); + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = + await ReadAnyItemHeaderAsync( + stream, + version.Value, + pi.PropertyType, + i, + typeCacheMem, + objectCacheMem, + lastObjType, + itemType, + itemSerializer, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext(); + if (obj == null && objType == ObjectTypes.Null) + { + if (!pi.PropertyType.IsNullable()) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, obj = itemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync( + stream, + version.Value, + nullable: false, + itemSerializer, + itemType, + pool: null, + options: null, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext() + : await ReadAnyIntAsync(stream, version.Value, objType, itemType, options: null, cancellationToken).DynamicContext()); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + pi.Setter!(res, obj); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) @@ -357,6 +519,7 @@ await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != p /// Object public static async Task ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) { + version ??= StreamSerializer.Version; // Handle serializable type if (typeof(IStreamSerializer).IsAssignableFrom(type)) return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); @@ -374,23 +537,85 @@ await ReadNumberNullableAsync(stream, version, cancellationToken: cancellat bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); - for (int i = 0; i < count; i++) + Type? itemType = null; + ObjectTypes objType = default, + lastObjType = default; + SerializerTypes itemSerializer = default; + StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; + StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; + Type[]? typeCache = null; + object[]? objectCache = null; + Memory typeCacheMem; + ReadOnlyMemory objectCacheMem; + object? obj; + int objIndex; + try { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - pi.Setter!( - res, - pi.Property.PropertyType.IsNullable() - ? await ReadAnyNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - : await ReadAnyAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ); + typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); + typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); + objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); + objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); + for (int i = 0; i < count; i++) + { + pi = pis[i]; + // Validate the property name + if ( + useChecksum && + !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = + await ReadAnyItemHeaderAsync( + stream, + version.Value, + pi.PropertyType, + i, + typeCacheMem, + objectCacheMem, + lastObjType, + itemType, + itemSerializer, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext(); + if (obj == null && objType == ObjectTypes.Null) + { + if (!pi.PropertyType.IsNullable()) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, obj = itemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync( + stream, + version.Value, + nullable: false, + itemSerializer, + itemType, + pool: null, + options: null, + itemSyncDeserializer, + itemAsyncDeserializer, + cancellationToken + ).DynamicContext() + : await ReadAnyIntAsync(stream, version.Value, objType, itemType, options: null, cancellationToken).DynamicContext()); + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + } + else + { + pi.Setter!(res, obj); + } + } + } + finally + { + if (typeCache != null) ArrayPool.Shared.Return(typeCache); + if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs index 4083c46..36caf4e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs @@ -135,6 +135,38 @@ public static Task ReadSerializedObjectAsync(this Stream stre : default(T?); #pragma warning restore IDE0034 // default expression can be simplified + + /// + /// Read + /// + /// Stream + /// Type + /// Serializer version + /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static object? ReadSerializedObjectNullable(this Stream stream, Type type, int? version = null) + => ReadBool(stream, version) ? ReadSerializedObject(stream, type, version) : null; + + /// + /// Read + /// + /// Stream + /// Type + /// Serializer version + /// Cancellation token + /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadSerializedObjectNullableAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) + => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + ? await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext() + : null; + /// /// Read /// diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs index c72b35b..2f8598c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs @@ -274,7 +274,7 @@ CancellationToken cancellationToken #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task ReadStreamNullableAsync( + public static Task ReadStreamNullableAsync( this Stream stream, Stream target, int? version = null, diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs new file mode 100644 index 0000000..db87cee --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs @@ -0,0 +1,167 @@ +using System.Runtime.CompilerServices; +using System.Runtime; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Type + public static partial class StreamExtensions + { + /// + /// Read a type + /// + /// Stream + /// Serializer version + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type ReadType(this Stream stream, int? version = null) => ReadSerialized(stream, version).ToClrType(); + + /// + /// Read a type + /// + /// Stream + /// Serializer version + /// Cancellation token + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadTypeAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + => (await ReadSerializedAsync(stream, version, cancellationToken).DynamicContext()).ToClrType(); + + /// + /// Read a serializable type ( + /// + /// Stream + /// Serializer version + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type ReadSerializableType(this Stream stream, int? version = null) => ReadSerialized(stream, version).ToSerializableType(); + + /// + /// Read a type + /// + /// Stream + /// Serializer version + /// Cancellation token + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadSerializableTypeAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + => (await ReadSerializedAsync(stream, version, cancellationToken).DynamicContext()).ToSerializableType(); + + /// + /// Read a type + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Serializer version + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type ReadType(this Stream stream, int objVersion, ObjectTypes objType, int? version = null) + => SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion, objType).ToClrType(); + + /// + /// Read a type + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Serializer version + /// Cancellation token + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadTypeAsync(this Stream stream, int objVersion, ObjectTypes objType, int? version = null, CancellationToken cancellationToken = default) + => (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, objType, cancellationToken).DynamicContext()).ToClrType(); + + /// + /// Read a serializable type ( + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Serializer version + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type ReadSerializableType(this Stream stream, int objVersion, ObjectTypes objType, int? version = null) + => SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion, objType).ToSerializableType(); + + /// + /// Read a type + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Serializer version + /// Cancellation token + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadSerializableTypeAsync( + this Stream stream, + int objVersion, + ObjectTypes objType, + int? version = null, + CancellationToken cancellationToken = default + ) + => (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, objType, cancellationToken).DynamicContext()).ToSerializableType(); + + /// + /// Read a type + /// + /// Stream + /// Serializer version + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type? ReadTypeNullable(this Stream stream, int? version = null) + => ReadNumberNullable(stream, version) is int objVersion ? SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion).ToClrType() : null; + + /// + /// Read a type + /// + /// Stream + /// Serializer version + /// Cancellation token + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadTypeNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + => await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() is int objVersion + ? (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, cancellationToken: cancellationToken).DynamicContext()).ToClrType() + : null; + + /// + /// Read a serializable type ( + /// + /// Stream + /// Serializer version + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type? ReadSerializableTypeNullable(this Stream stream, int? version = null) + => ReadNumberNullable(stream, version) is int objVersion + ? SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion).ToSerializableType() + : null; + + /// + /// Read a type + /// + /// Stream + /// Serializer version + /// Cancellation token + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadSerializableTypeNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + => await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() is int objVersion + ? (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, cancellationToken: cancellationToken).DynamicContext()) + .ToSerializableType() + : null; + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs index 119c437..a15718c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs @@ -21,6 +21,14 @@ public static partial class StreamExtensions /// Read struct method /// public static readonly MethodInfo ReadStructAsyncMethod; + /// + /// Read nullable struct method + /// + public static readonly MethodInfo ReadStructNullableMethod; + /// + /// Read nullable struct method + /// + public static readonly MethodInfo ReadStructNullableAsyncMethod; /// /// Require the attribute when using etc.? diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index 64bd222..acf46f6 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -13,19 +13,43 @@ public static partial class StreamExtensions /// Stream /// Object /// Stream + [TargetedPatchingOptOut("Kust a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteAny(this Stream stream, object obj) => WriteAny(stream, obj, objType: null, writeObject: true); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Object type (if not , no header will be written) + /// Write the object? (may be overridden, if writing a header) + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteAny(this Stream stream, object obj) + public static Stream WriteAny(this Stream stream, object obj, ObjectTypes? objType, bool writeObject) { - (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); - Write(stream, (byte)objType); - if (writeType) WriteString(stream, type.ToString()); + if (objType == null) + { + (Type type, objType, bool writeType, writeObject) = obj.GetObjectSerializerInfo(); + Write(stream, (byte)objType); + if (writeType) WriteString(stream, type.ToString()); + } if (!writeObject) return stream; - return objType.IsNumber() - ? WriteNumber(stream, obj) - : WriteObject(stream, obj); + return objType.Value switch + { + ObjectTypes.Byte => Write(stream, (sbyte)obj), + ObjectTypes.Byte | ObjectTypes.Unsigned => Write(stream, (byte)obj), + ObjectTypes.Short => Write(stream, (short)obj), + ObjectTypes.Short | ObjectTypes.Unsigned => Write(stream, (ushort)obj), + ObjectTypes.String16 => WriteString16(stream, (string)obj), + ObjectTypes.String32 => WriteString32(stream, (string)obj), + _ => objType.Value.IsNumber() + ? WriteNumber(stream, obj) + : WriteObject(stream, obj) + }; } /// @@ -35,19 +59,55 @@ public static Stream WriteAny(this Stream stream, object obj) /// Object /// Cancellation token /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyAsync( + this Stream stream, + object obj, + CancellationToken cancellationToken = default + ) + => WriteAnyAsync(stream, obj, objType: null, writeObject: true, cancellationToken); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Object type (if not , no header will be written) + /// Write the object? (may be overridden, if writing a header) + /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + public static async Task WriteAnyAsync( + this Stream stream, + object obj, + ObjectTypes? objType, + bool writeObject, + CancellationToken cancellationToken = default + ) { - (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); - if (writeType) await WriteStringAsync(stream, type.ToString(), cancellationToken).DynamicContext(); + if (objType == null) + { + (Type type, objType, bool writeType, writeObject) = obj.GetObjectSerializerInfo(); + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + if (writeType) await WriteStringAsync(stream, type.ToString(), cancellationToken).DynamicContext(); + } if (!writeObject) return stream; - return objType.IsNumber() - ? await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext() - : await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext(); + return objType.Value switch + { + ObjectTypes.Byte => await WriteAsync(stream, (sbyte)obj, cancellationToken).DynamicContext(), + ObjectTypes.Byte | ObjectTypes.Unsigned => await WriteAsync(stream, (byte)obj, cancellationToken).DynamicContext(), + ObjectTypes.Short => await WriteAsync(stream, (short)obj, cancellationToken).DynamicContext(), + ObjectTypes.Short | ObjectTypes.Unsigned => await WriteAsync(stream, (ushort)obj, cancellationToken).DynamicContext(), + ObjectTypes.String16 => await WriteString16Async(stream, (string)obj, cancellationToken).DynamicContext(), + ObjectTypes.String32 => await WriteString32Async(stream, (string)obj, cancellationToken).DynamicContext(), + _ => objType.Value.IsNumber() + ? await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext() + : await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext() + }; } /// @@ -59,9 +119,33 @@ public static async Task WriteAnyAsync(this Stream stream, object obj, C /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAnyAsync(this Task stream, object obj, CancellationToken cancellationToken = default) + public static Task WriteAnyAsync( + this Task stream, + object obj, + CancellationToken cancellationToken = default + ) => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyAsync); + /// + /// Write any object + /// + /// Stream + /// Object + /// Object type (if not , no header will be written) + /// Write the object? (may be overridden, if writing a header) + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyAsync( + this Task stream, + object obj, + ObjectTypes? objType, + bool writeObject, + CancellationToken cancellationToken = default + ) + => AsyncHelper.FluentAsync(stream, obj, objType, writeObject, cancellationToken, WriteAnyAsync); + /// /// Write any object /// @@ -75,6 +159,21 @@ public static Task WriteAnyAsync(this Task stream, object obj, C public static Stream WriteAnyNullable(this Stream stream, object? obj) => obj == null ? Write(stream, (byte)ObjectTypes.Null) : WriteAny(stream, obj); + /// + /// Write any object + /// + /// Stream + /// Object + /// Object type (if not , no header will be written) + /// Write the object? (may be overridden, if writing a header) + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteAnyNullable(this Stream stream, object? obj, ObjectTypes? objType, bool writeObject) + => obj == null ? Write(stream, (byte)ObjectTypes.Null) : WriteAny(stream, obj, objType, writeObject); + /// /// Write any object /// @@ -86,10 +185,38 @@ public static Stream WriteAnyNullable(this Stream stream, object? obj) #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) + public static async Task WriteAnyNullableAsync( + this Stream stream, + object? obj, + CancellationToken cancellationToken = default + ) + => obj == null + ? await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext() + : await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Object type (if not , no header will be written) + /// Write the object? (may be overridden, if writing a header) + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteAnyNullableAsync( + this Stream stream, + object? obj, + ObjectTypes? objType, + bool writeObject, + CancellationToken cancellationToken = default + ) => obj == null ? await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext() - : await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); + : await WriteAnyAsync(stream, obj, objType, writeObject, cancellationToken).DynamicContext(); /// /// Write any object @@ -100,7 +227,31 @@ public static async Task WriteAnyNullableAsync(this Stream stream, objec /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAnyNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) + public static Task WriteAnyNullableAsync( + this Task stream, + object? obj, + CancellationToken cancellationToken = default + ) => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyNullableAsync); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Object type (if not , no header will be written) + /// Write the object? (may be overridden, if writing a header) + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyNullableAsync( + this Task stream, + object? obj, + ObjectTypes? objType, + bool writeObject, + CancellationToken cancellationToken = default + ) + => AsyncHelper.FluentAsync(stream, obj, objType, writeObject, cancellationToken, WriteAnyNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs index 0d9a7d5..f148f5e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs @@ -12,18 +12,17 @@ public static partial class StreamExtensions /// /// Stream /// Value to write + /// Are values nullable? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteArray(this Stream stream, Array value) + public static Stream WriteArray(this Stream stream, Array value, bool valuesNullable = false) => SerializerException.Wrap(() => { WriteNumber(stream, value.Length); - if (value.LongLength == 0) return stream; - foreach (object element in value) WriteObject(stream, element); - return stream; + return value.Length == 0 ? stream : WriteFixedArray(stream, value, valuesNullable); }); /// @@ -31,19 +30,18 @@ public static Stream WriteArray(this Stream stream, Array value) /// /// Stream /// Value to write + /// Are values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) + public static Task WriteArrayAsync(this Stream stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) => SerializerException.WrapAsync(async () => { await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); - if (value.Length == 0) return stream; - foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); - return stream; + return value.Length == 0 ? stream : await WriteFixedArrayAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); }); /// @@ -51,197 +49,54 @@ public static Task WriteArrayAsync(this Stream stream, Array value, Canc /// /// Stream /// Value to write + /// Are values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteArrayAsync(this Task stream, Array value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteArrayAsync); + public static Task WriteArrayAsync(this Task stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteArrayAsync); /// /// Write /// /// Stream /// Value to write + /// Are values nullable? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteArrayNullable(this Stream stream, Array? value) - => WriteNullableCount(stream, value?.Length, () => WriteFixedArray(stream, value!)); + public static Stream WriteArrayNullable(this Stream stream, Array? value, bool valuesNullable = false) + => WriteNullableCount(stream, value?.Length, () => WriteFixedArray(stream, value!, valuesNullable)); /// /// Write /// /// Stream /// Value to write + /// Are values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = default) - => WriteNullableCountAsync(stream, value?.Length, () => WriteFixedArrayAsync(stream, value!, cancellationToken), cancellationToken); + public static Task WriteArrayNullableAsync(this Stream stream, Array? value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => WriteNullableCountAsync(stream, value?.Length, () => WriteFixedArrayAsync(stream, value!, valuesNullable, cancellationToken), cancellationToken); /// /// Write /// /// Stream /// Value to write + /// Are values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteArrayNullableAsync(this Task stream, Array? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteArrayNullableAsync); - - /// - /// Write - /// - /// Element type - /// Stream - /// Value to write - /// Stream - [TargetedPatchingOptOut("Just a method adapter")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Stream WriteFixedArray(this Stream stream, Span value) => WriteFixedArray(stream, (ReadOnlySpan)value); - - /// - /// Write - /// - /// Element type - /// Stream - /// Value to write - /// Stream - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static Stream WriteFixedArray(this Stream stream, ReadOnlySpan value) - { - try - { - foreach (T element in value) - WriteObject(stream, element!); - return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw SerializerException.From(ex); - } - } - - /// - /// Write - /// - /// Stream - /// Value to write - /// Stream - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static Stream WriteFixedArray(this Stream stream, Array value) - => SerializerException.Wrap(() => - { - foreach (object element in value) - WriteObject(stream, element!); - return stream; - }); - - /// - /// Write - /// - /// Element type - /// Stream - /// Value to write - /// Cancellation token - /// Stream - [TargetedPatchingOptOut("Just a method adapter")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) - => WriteFixedArrayAsync(stream, (ReadOnlyMemory)value, cancellationToken); - - /// - /// Write - /// - /// Element type - /// Stream - /// Value to write - /// Cancellation token - /// Stream - [TargetedPatchingOptOut("Just a method adapter")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteFixedArrayAsync); - - /// - /// Write - /// - /// Element type - /// Stream - /// Value to write - /// Cancellation token - /// Stream - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - for (int i = 0; i < value.Length; i++) await WriteObjectAsync(stream, value.Span[i]!, cancellationToken).DynamicContext(); - return stream; - }); - - /// - /// Write - /// - /// Element type - /// Stream - /// Value to write - /// Cancellation token - /// Stream - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Task stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteFixedArrayAsync); - - /// - /// Write - /// - /// Stream - /// Value to write - /// Cancellation token - /// Stream - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static Task WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = default) - => SerializerException.WrapAsync(async () => - { - foreach (object element in value) - await WriteObjectAsync(stream, element!, cancellationToken).DynamicContext(); - return stream; - }); - - /// - /// Write - /// - /// Stream - /// Value to write - /// Cancellation token - /// Stream - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Task stream, Array value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteFixedArrayAsync); + public static Task WriteArrayNullableAsync(this Task stream, Array? value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteArrayNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index bbe7f9e..6acfb06 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -74,11 +74,11 @@ public static Stream WriteNullable(this Stream stream, bool? value) } else if (value.Value) { - type = ObjectTypes.Bool; + type = ObjectTypes.True; } else { - type = ObjectTypes.Empty; + type = ObjectTypes.False; } return Write(stream, (byte)type); } @@ -103,11 +103,11 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, C } else if (value.Value) { - type = ObjectTypes.Bool; + type = ObjectTypes.True; } else { - type = ObjectTypes.Empty; + type = ObjectTypes.False; } return WriteAsync(stream, (byte)type, cancellationToken); } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index c3f742f..9ddd4ac 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -1,4 +1,6 @@ -using System.Collections; +using System.Buffers; +using System.Collections; +using System.Data; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -13,20 +15,17 @@ public static partial class StreamExtensions /// /// Stream /// Value to write + /// Are the values nullable? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteDict(this Stream stream, IDictionary value) + public static Stream WriteDict(this Stream stream, IDictionary value, bool valuesNullable = false) { WriteNumber(stream, value.Count); if (value.Count == 0) return stream; - foreach (object key in value.Keys) - { - WriteObject(stream, key); - WriteObject(stream, value[key]!); - } + WriteDictInt(stream, value, valuesNullable); return stream; } @@ -35,21 +34,18 @@ public static Stream WriteDict(this Stream stream, IDictionary value) /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = default) + public static async Task WriteDictAsync(this Stream stream, IDictionary value, bool valuesNullable = false, CancellationToken cancellationToken = default) { await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); if (value.Count == 0) return stream; - foreach (object key in value.Keys) - { - await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); - await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); - } + await WriteDictIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); return stream; } @@ -58,32 +54,30 @@ public static async Task WriteDictAsync(this Stream stream, IDictionary /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteDictAsync(this Task stream, IDictionary value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteDictAsync); + public static Task WriteDictAsync(this Task stream, IDictionary value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteDictAsync); /// /// Write /// /// Stream /// Value to write + /// Are the values nullable? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteDictNullable(this Stream stream, IDictionary? value) + public static Stream WriteDictNullable(this Stream stream, IDictionary? value, bool valuesNullable = false) => WriteNullableCount(stream, value?.Count, () => { if (value!.Count == 0) return; - foreach (object key in value.Keys) - { - WriteObject(stream, key); - WriteObject(stream, value[key]!); - } + WriteDictInt(stream, value, valuesNullable); }); /// @@ -91,21 +85,18 @@ public static Stream WriteDictNullable(this Stream stream, IDictionary? value) /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, CancellationToken cancellationToken = default) + public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, bool valuesNullable = false, CancellationToken cancellationToken = default) => WriteNullableCountAsync(stream, value?.Count, async () => { if (value!.Count == 0) return; - foreach (object key in value.Keys) - { - await WriteObjectAsync(stream, key, cancellationToken).DynamicContext(); - await WriteObjectAsync(stream, value[key]!, cancellationToken).DynamicContext(); - } + await WriteDictIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); }, cancellationToken); /// @@ -113,11 +104,319 @@ public static Task WriteDictNullableAsync(this Stream stream, IDictionar /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteDictNullableAsync); + public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteDictNullableAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Are the values nullable? + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void WriteDictInt(Stream stream, IDictionary value, bool valuesNullable) + { + Type valueType = value.GetType(), + keyType = valueType.GenericTypeArguments[0], + itemType = valueType.GenericTypeArguments[1], + keyItemType, + valueItemType; + (SerializerTypes keySerializer, StreamSerializer.Serialize_Delegate? keySyncSerializer, _) = keyType.GetItemSerializerInfo(isAsync: false); + (SerializerTypes itemSerializer, StreamSerializer.Serialize_Delegate? itemSyncSerializer, _) = itemType.GetItemSerializerInfo(isAsync: false); + ObjectTypes keyObjType = default, + valueObjType = default; + Type? lastKeyItemType = null, + lastValueItemType = null; + object key; + object? item; + SerializerTypes keyItemSerializer = default, + valueItemSerializer = default; + StreamSerializer.Serialize_Delegate? keyItemSyncSerializer = null, + valueItemSyncSerializer = null; + bool writeKey = false, + writeValue = false, + isComplete; + object[] keys = value.Keys.Cast().ToArray(); + int[] cache; + if (keySerializer == SerializerTypes.Any && itemSerializer == SerializerTypes.Any) + { + cache = ArrayPool.Shared.RentClean(byte.MaxValue * 3); + } + else if (keySerializer == SerializerTypes.Any) + { + cache = ArrayPool.Shared.RentClean(byte.MaxValue); + } + else if (itemSerializer == SerializerTypes.Any) + { + cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + } + else + { + cache = Array.Empty(); + } + try + { + Span keyTypeCache, + keyObjectCache, + typeCache, + objectCache; + if (keySerializer == SerializerTypes.Any) + { + keyTypeCache = cache.AsSpan(0, byte.MaxValue); + keyObjectCache = cache.AsSpan(0, 0); + } + else + { + keyTypeCache = keyObjectCache = cache.AsSpan(0, 0); + } + if (itemSerializer == SerializerTypes.Any) + { + typeCache = cache.AsSpan(keySerializer == SerializerTypes.Any ? byte.MaxValue : 0, byte.MaxValue); + objectCache = cache.AsSpan(keySerializer == SerializerTypes.Any ? byte.MaxValue << 1 : byte.MaxValue, byte.MaxValue); + } + else + { + typeCache = objectCache = cache.AsSpan(0, 0); + } + for (int i = 0, len = value.Count; i < len; i++) + { + if (keySerializer == SerializerTypes.Any) + { + key = keys[i]; + keyItemType = key.GetType(); + isComplete = WriteAnyItemHeader( + stream, + key, + keyItemType, + keyTypeCache, + keyObjectCache, + ref lastKeyItemType, + ref keyItemSerializer, + ref keyItemSyncSerializer, + ref keyObjType, + ref writeKey + ); + if (!isComplete && writeKey) + if (keyItemSerializer == SerializerTypes.Serializer) + { + WriteItem(stream, key, nullable: false, keyItemSerializer, keyItemSyncSerializer); + } + else + { + WriteAny(stream, key, keyObjType, writeKey); + } + } + else + { + WriteItem(stream, keys[i], nullable: false, keySerializer, keySyncSerializer); + } + if (keySerializer == SerializerTypes.Any) + { + item = value[keys[i]]; + if (item == null) + { + Write(stream, (byte)ObjectTypes.Null); + continue; + } + valueItemType = value.GetType(); + isComplete = WriteAnyItemHeader( + stream, + item, + valueItemType, + typeCache, + objectCache, + ref lastValueItemType, + ref valueItemSerializer, + ref valueItemSyncSerializer, + ref valueObjType, + ref writeValue + ); + if (!isComplete && writeValue) + if (valueItemSerializer == SerializerTypes.Serializer) + { + WriteItem(stream, item, nullable: false, valueItemSerializer, valueItemSyncSerializer); + } + else + { + WriteAny(stream, item, valueObjType, writeValue); + } + } + else + { + WriteItem(stream, value[keys[i]]!, valuesNullable, itemSerializer, itemSyncSerializer); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } + + /// + /// Write + /// + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task WriteDictIntAsync(Stream stream, IDictionary value, bool valuesNullable, CancellationToken cancellationToken) + { + Type valueType = value.GetType(), + keyType = valueType.GenericTypeArguments[0], + itemType = valueType.GenericTypeArguments[1], + keyItemType, + valueItemType; + (SerializerTypes keySerializer, StreamSerializer.Serialize_Delegate? keySyncSerializer, StreamSerializer.AsyncSerialize_Delegate? keyAsyncSerializer) = + keyType.GetItemSerializerInfo(isAsync: true); + (SerializerTypes itemSerializer, StreamSerializer.Serialize_Delegate? itemSyncSerializer, StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer) = + itemType.GetItemSerializerInfo(isAsync: true); + ObjectTypes keyObjType = default, + valueObjType = default; + Type? lastKeyItemType = null, + lastValueItemType = null; + object key; + object? item; + SerializerTypes keyItemSerializer = default, + valueItemSerializer = default; + StreamSerializer.Serialize_Delegate? keyItemSyncSerializer = null, + valueItemSyncSerializer = null; + StreamSerializer.AsyncSerialize_Delegate? keyItemAsyncSerializer = null, + valueItemAsyncSerializer = null; + bool writeKey = false, + writeValue = false, + isComplete; + object[] keys = value.Keys.Cast().ToArray(); + int[] cache; + if (keySerializer == SerializerTypes.Any && itemSerializer == SerializerTypes.Any) + { + cache = ArrayPool.Shared.RentClean(byte.MaxValue * 3); + } + else if (keySerializer == SerializerTypes.Any) + { + cache = ArrayPool.Shared.RentClean(byte.MaxValue); + } + else if (itemSerializer == SerializerTypes.Any) + { + cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + } + else + { + cache = Array.Empty(); + } + try + { + Memory keyTypeCache, + keyObjectCache, + typeCache, + objectCache; + if (keySerializer == SerializerTypes.Any) + { + keyTypeCache = cache.AsMemory(0, byte.MaxValue); + keyObjectCache = cache.AsMemory(0, 0); + } + else + { + keyTypeCache = keyObjectCache = cache.AsMemory(0, 0); + } + if (itemSerializer == SerializerTypes.Any) + { + typeCache = cache.AsMemory(keySerializer == SerializerTypes.Any ? byte.MaxValue : 0, byte.MaxValue); + objectCache = cache.AsMemory(keySerializer == SerializerTypes.Any ? byte.MaxValue << 1 : byte.MaxValue, byte.MaxValue); + } + else + { + typeCache = objectCache = cache.AsMemory(0, 0); + } + for (int i = 0, len = value.Count; i < len; i++) + { + if (keySerializer == SerializerTypes.Any) + { + key = keys[i]; + keyItemType = key.GetType(); + (isComplete, lastKeyItemType, keyItemSerializer, keyItemSyncSerializer, keyItemAsyncSerializer, keyObjType, writeKey) = + await WriteAnyItemHeaderAsync( + stream, + key, + keyItemType, + keyTypeCache, + keyObjectCache, + lastKeyItemType, + keyItemSerializer, + keyItemSyncSerializer, + keyItemAsyncSerializer, + keyObjType, + writeKey, + cancellationToken + ).DynamicContext(); + if (!isComplete && writeKey) + if (keyItemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(stream, key, nullable: false, keyItemSerializer, keyItemSyncSerializer, keyItemAsyncSerializer, cancellationToken) + .DynamicContext(); + } + else + { + await WriteAnyAsync(stream, key, keyObjType, writeKey, cancellationToken).DynamicContext(); + } + } + else + { + await WriteItemAsync(stream, keys[i], nullable: false, keySerializer, keySyncSerializer, keyAsyncSerializer, cancellationToken).DynamicContext(); + } + if (keySerializer == SerializerTypes.Any) + { + item = value[keys[i]]; + if (item == null) + { + await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); + continue; + } + valueItemType = value.GetType(); + (isComplete, lastKeyItemType, keyItemSerializer, keyItemSyncSerializer, keyItemAsyncSerializer, keyObjType, writeKey) = + await WriteAnyItemHeaderAsync( + stream, + item, + valueItemType, + typeCache, + objectCache, + lastValueItemType, + valueItemSerializer, + valueItemSyncSerializer, + valueItemAsyncSerializer, + valueObjType, + writeValue, + cancellationToken + ).DynamicContext(); + if (!isComplete && writeValue) + if (valueItemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(stream, item, nullable: false, valueItemSerializer, valueItemSyncSerializer, valueItemAsyncSerializer, cancellationToken) + .DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, valueObjType, writeValue, cancellationToken).DynamicContext(); + } + } + else + { + await WriteItemAsync(stream, value[keys[i]]!, valuesNullable, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs new file mode 100644 index 0000000..3829b1b --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs @@ -0,0 +1,410 @@ +using System.Buffers; +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Fixed array + public static partial class StreamExtensions + { + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Are the values nullable? + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteFixedArray(this Stream stream, Span value, bool valuesNullable = false) + => WriteFixedArray(stream, (ReadOnlySpan)value, valuesNullable); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Are the values nullable? + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteFixedArray(this Stream stream, ReadOnlySpan value, bool valuesNullable = false) + { + try + { + Type elementType = typeof(T); + (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, _) = elementType.GetItemSerializerInfo(isAsync: false); + if (serializer == SerializerTypes.Any) + { + ObjectTypes objType = default; + Type? lastItemType = null; + Type itemType; + T? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + bool writeObject = false; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try + { + Span typeCache = cache.AsSpan(0, byte.MaxValue), + objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); + for (int i = 0, len = value.Length; i < len; i++) + { + item = value[i]; + if (item == null) + { + Write(stream, (byte)ObjectTypes.Null); + continue; + } + itemType = item!.GetType(); + WriteAnyItemHeader( + stream, + item, + itemType, + typeCache, + objectCache, + ref lastItemType, + ref itemSerializer, + ref itemSyncSerializer, + ref objType, + ref writeObject + ); + if (writeObject && objType != ObjectTypes.Cached) + if (itemSerializer == SerializerTypes.Serializer) + { + WriteItem(stream, item, nullable: false, itemSerializer, itemSyncSerializer); + } + else + { + WriteAny(stream, item, objType, writeObject); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } + else + { + for (int i = 0, len = value.Length; i < len; WriteItem(stream, value[i]!, valuesNullable, serializer, syncSerializer), i++) ; + } + return stream; + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw SerializerException.From(ex); + } + } + + /// + /// Write + /// + /// Stream + /// Value to write + /// Are the values nullable? + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteFixedArray(this Stream stream, Array value, bool valuesNullable = false) + => SerializerException.Wrap(() => + { + Type elementType = value.GetType().GetElementType()!; + (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, _) = elementType.GetItemSerializerInfo(isAsync: false); + if (serializer == SerializerTypes.Any) + { + ObjectTypes objType = default; + Type? lastItemType = null; + Type itemType; + object? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + bool writeObject = false, + isComplete; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try + { + Span typeCache = cache.AsSpan(0, byte.MaxValue), + objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); + for (int i = 0, len = value.Length; i < len; i++) + { + item = value.GetValue(i); + if (item == null) + { + Write(stream, (byte)ObjectTypes.Null); + continue; + } + itemType = item.GetType(); + isComplete = WriteAnyItemHeader( + stream, + item, + itemType, + typeCache, + objectCache, + ref lastItemType, + ref itemSerializer, + ref itemSyncSerializer, + ref objType, + ref writeObject + ); + Logging.WriteInfo($"WRITE {i} {stream.Position} {objType} {(int)objType} {itemType}"); + if (!isComplete) + if (itemSerializer == SerializerTypes.Serializer) + { + WriteItem(stream, item, nullable: false, itemSerializer, itemSyncSerializer); + } + else + { + WriteAny(stream, item, objType, writeObject); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } + else + { + for (int i = 0, len = value.Length; i < len; WriteItem(stream, value.GetValue(i)!, valuesNullable, serializer, syncSerializer), i++) ; + } + return stream; + }); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Stream stream, Memory value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => WriteFixedArrayAsync(stream, (ReadOnlyMemory)value, valuesNullable, cancellationToken); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Task stream, Memory value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteFixedArrayAsync); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => + { + Type elementType = typeof(T); + (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = + elementType.GetItemSerializerInfo(isAsync: true); + if (serializer == SerializerTypes.Any) + { + ObjectTypes objType = default; + Type? lastItemType = null; + Type itemType; + T? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; + bool writeObject = false, + isComplete; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try + { + Memory typeCache = cache.AsMemory(0, byte.MaxValue), + objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); + for (int i = 0, len = value.Length; i < len; i++) + { + item = value.Span[i]; + if (item == null) + { + await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); + continue; + } + itemType = item.GetType(); + (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( + stream, + item, + itemType, + typeCache, + objectCache, + lastItemType, + itemSerializer, + itemSyncSerializer, + itemAsyncSerializer, + objType, + writeObject, + cancellationToken + ).DynamicContext(); + if (!isComplete && writeObject) + if (itemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(stream, item, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, objType, writeObject, cancellationToken).DynamicContext(); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } + else + { + for ( + int i = 0, len = value.Length; + i < len; + await WriteItemAsync(stream, value.Span[i]!, valuesNullable, serializer, syncSerializer, asyncSerializer, cancellationToken).DynamicContext(), i++ + ) ; + } + return stream; + }); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync( + this Task stream, + ReadOnlyMemory value, + bool valuesNullable = false, + CancellationToken cancellationToken = default + ) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteFixedArrayAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteFixedArrayAsync(this Stream stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => SerializerException.WrapAsync(async () => + { + Type elementType = value.GetType().GetElementType()!; + (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = + elementType.GetItemSerializerInfo(isAsync: true); + if (serializer == SerializerTypes.Any) + { + ObjectTypes objType = default; + Type? lastItemType = null; + Type itemType; + object? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; + bool writeObject = false, + isComplete; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try + { + Memory typeCache = cache.AsMemory(0, byte.MaxValue), + objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); + for (int i = 0, len = value.Length; i < len; i++) + { + item = value.GetValue(i); + if (item == null) + { + await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); + continue; + } + itemType = item.GetType(); + (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( + stream, + item, + itemType, + typeCache, + objectCache, + lastItemType, + itemSerializer, + itemSyncSerializer, + itemAsyncSerializer, + objType, + writeObject, + cancellationToken + ).DynamicContext(); + if (!isComplete && writeObject) + if (itemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(stream, item, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, objType, writeObject, cancellationToken).DynamicContext(); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } + else + { + for ( + int i = 0, len = value.Length; + i < len; + await WriteItemAsync(stream, value.GetValue(i)!, valuesNullable, serializer, syncSerializer, asyncSerializer, cancellationToken).DynamicContext(), i++ + ) ; + } + return stream; + }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Task stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteFixedArrayAsync); + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs new file mode 100644 index 0000000..c572270 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs @@ -0,0 +1,389 @@ +using System.Collections; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Items + public static partial class StreamExtensions + { + /// + /// Write an item using a specified serializer + /// + /// Stream + /// Item + /// Nullable? + /// Serializer type + /// Synchronous serializer + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteItem( + Stream stream, + dynamic item, + bool nullable, + SerializerTypes serializer, + StreamSerializer.Serialize_Delegate? syncSerializer = null + ) + { + if (!nullable) + { + switch (serializer) + { + case SerializerTypes.StreamSerializer: return WriteSerialized(stream, (IStreamSerializer)item); + case SerializerTypes.Serializer: + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); + object obj = item; + SerializerException.Wrap(() => syncSerializer!(stream, obj)); + return stream; + } + case SerializerTypes.Any: return WriteAny(stream, item); + case SerializerTypes.AnyObject: return WriteAnyObject(stream, item); + case SerializerTypes.Bool: return Write(stream, (bool)item); + case SerializerTypes.Number: return WriteNumber(stream, item); + case SerializerTypes.Enum: return WriteEnum(stream, (Enum)item); + case SerializerTypes.String: return WriteString(stream, (string)item); + case SerializerTypes.String16: return WriteString16(stream, (string)item); + case SerializerTypes.String32: return WriteString32(stream, (string)item); + case SerializerTypes.Bytes: return WriteBytes(stream, (byte[])item); + case SerializerTypes.Array: return WriteArray(stream, (Array)item); + case SerializerTypes.List: return WriteList(stream, (IList)item); + case SerializerTypes.Dictionary: return WriteDict(stream, (IDictionary)item); + case SerializerTypes.Struct: return WriteStruct(stream, item); + case SerializerTypes.Stream: return WriteStream(stream, (Stream)item); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + switch (serializer) + { + case SerializerTypes.StreamSerializer: return WriteSerializedNullable(stream, (IStreamSerializer?)item); + case SerializerTypes.Serializer: + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); + object? obj = item; + return WriteIfNotNull(stream, obj, () => syncSerializer!(stream, obj)); + } + case SerializerTypes.Any: return WriteAnyNullable(stream, item); + case SerializerTypes.AnyObject: return WriteAnyObjectNullable(stream, item); + case SerializerTypes.Bool: return WriteNullable(stream, (bool?)item); + case SerializerTypes.Number: return WriteNumberNullable(stream, item); + case SerializerTypes.Enum: return WriteEnumNullable(stream, (Enum?)item); + case SerializerTypes.String: return WriteStringNullable(stream, (string?)item); + case SerializerTypes.String16: return WriteString16Nullable(stream, (string?)item); + case SerializerTypes.String32: return WriteString32Nullable(stream, (string?)item); + case SerializerTypes.Bytes: return WriteBytesNullable(stream, (byte[]?)item); + case SerializerTypes.Array: return WriteArrayNullable(stream, (Array?)item); + case SerializerTypes.List: return WriteListNullable(stream, (IList?)item); + case SerializerTypes.Dictionary: return WriteDictNullable(stream, (IDictionary?)item); + case SerializerTypes.Struct: return WriteStructNullable(stream, item); + case SerializerTypes.Stream: return WriteStreamNullable(stream, (Stream?)item); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + + /// + /// Write an item using a specified serializer + /// + /// Stream + /// Item + /// Nullable? + /// Serializer type + /// Synchronous serializer + /// Asynchronous serializer + /// Cancellation token + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteItemAsync( + Stream stream, + dynamic item, + bool nullable, + SerializerTypes serializer, + StreamSerializer.Serialize_Delegate? syncSerializer = null, + StreamSerializer.AsyncSerialize_Delegate? asyncSerializer = null, + CancellationToken cancellationToken = default + ) + { + if (!nullable) + { + switch (serializer) + { + case SerializerTypes.StreamSerializer: return await WriteSerializedAsync(stream, (IStreamSerializer)item, cancellationToken).DynamicContext(); + case SerializerTypes.Serializer: + { + object obj = item; + if (asyncSerializer == null) + { + await Task.Yield(); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); + SerializerException.Wrap(() => syncSerializer!(stream, obj)); + } + else + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(asyncSerializer), asyncSerializer)); + await SerializerException.WrapAsync(() => asyncSerializer(stream, obj, cancellationToken)).DynamicContext(); + } + return stream; + } + case SerializerTypes.Any: return await WriteAnyAsync(stream, (object)item, cancellationToken).DynamicContext(); + case SerializerTypes.AnyObject: return await WriteAnyObjectAsync(stream, (object)item, cancellationToken).DynamicContext(); + case SerializerTypes.Bool: return await WriteAsync(stream, (bool)item, cancellationToken).DynamicContext(); + case SerializerTypes.Number: return await WriteNumberAsync(stream, (object)item, cancellationToken).DynamicContext(); + case SerializerTypes.Enum: return await WriteEnumAsync(stream, (Enum)item, cancellationToken).DynamicContext(); + case SerializerTypes.String: return await WriteStringAsync(stream, (string)item, cancellationToken).DynamicContext(); + case SerializerTypes.String16: return await WriteString16Async(stream, (string)item, cancellationToken).DynamicContext(); + case SerializerTypes.String32: return await WriteString32Async(stream, (string)item, cancellationToken).DynamicContext(); + case SerializerTypes.Bytes: return await WriteBytesAsync(stream, (byte[])item, cancellationToken).DynamicContext(); + case SerializerTypes.Array: return await WriteArrayAsync(stream, (Array)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.List: return await WriteListAsync(stream, (IList)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Dictionary: return await WriteDictAsync(stream, (IDictionary)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Struct: return await WriteStructAsync(stream, (object)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Stream: return await WriteStreamAsync(stream, (Stream)item, cancellationToken: cancellationToken).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + switch (serializer) + { + case SerializerTypes.StreamSerializer: return await WriteSerializedNullableAsync(stream, (IStreamSerializer?)item, cancellationToken).DynamicContext(); + case SerializerTypes.Serializer: + { + object? obj = item!; + if (asyncSerializer == null) + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); + Task action() + { + syncSerializer!(stream, obj); + return Task.CompletedTask; + } + return await WriteIfNotNullAsync(stream, obj, action, cancellationToken).DynamicContext(); + } + else + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(asyncSerializer), asyncSerializer)); + return await WriteIfNotNullAsync(stream, obj, () => asyncSerializer!(stream, obj, cancellationToken), cancellationToken).DynamicContext(); + } + } + case SerializerTypes.Any: return await WriteAnyNullableAsync(stream, (object?)item, cancellationToken).DynamicContext(); + case SerializerTypes.AnyObject: return await WriteAnyObjectNullableAsync(stream, (object?)item, cancellationToken).DynamicContext(); + case SerializerTypes.Bool: return await WriteNullableAsync(stream, (bool?)item, cancellationToken).DynamicContext(); + case SerializerTypes.Number: return await WriteNumberNullableAsync(stream, (object?)item, cancellationToken).DynamicContext(); + case SerializerTypes.Enum: return await WriteEnumNullableAsync(stream, (Enum?)item, cancellationToken).DynamicContext(); + case SerializerTypes.String: return await WriteStringNullableAsync(stream, (string?)item, cancellationToken).DynamicContext(); + case SerializerTypes.String16: return await WriteString16NullableAsync(stream, (string?)item, cancellationToken).DynamicContext(); + case SerializerTypes.String32: return await WriteString32NullableAsync(stream, (string?)item, cancellationToken).DynamicContext(); + case SerializerTypes.Bytes: return await WriteBytesNullableAsync(stream, (byte[]?)item, cancellationToken).DynamicContext(); + case SerializerTypes.Array: return await WriteArrayNullableAsync(stream, (Array?)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.List: return await WriteListNullableAsync(stream, (IList?)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Dictionary: return await WriteDictNullableAsync(stream, (IDictionary?)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Struct: return await WriteStructNullableAsync(stream, (object?)item, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Stream: return await WriteStreamNullableAsync(stream, (Stream?)item, cancellationToken: cancellationToken).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + } + } + + /// + /// Write an item header, if the used item type isn't specified + /// + /// Stream + /// Item + /// Item type + /// Type cache + /// Object cache + /// Last item type + /// Item serializer type + /// Item synchronous serializer + /// Object type + /// Write the object? + /// All information written? + public static bool WriteAnyItemHeader( + Stream stream, + dynamic item, + Type itemType, + Span typeCache, + Span objectCache, + ref Type? lastItemType, + ref SerializerTypes itemSerializer, + ref StreamSerializer.Serialize_Delegate? itemSyncSerializer, + ref ObjectTypes objType, + ref bool writeObject + ) + { + // Use the object cache + var info = ((object)item).GetObjectSerializerInfo(); + if (info.WriteObject) + { + int ohc = item.GetHashCode(), + objIndex = objectCache.IndexOf(ohc); + if (objIndex != -1) + { + objType = ObjectTypes.Cached; + Write(stream, (byte)objType); + Write(stream, (byte)objIndex); + objType = info.ObjectType; + writeObject = info.WriteObject; + (itemSerializer, itemSyncSerializer, _) = itemType.GetItemSerializerInfo(isAsync: false); + lastItemType = writeObject ? itemType : null; + return true; + } + else + { + objIndex = objectCache.IndexOf(0); + if (objIndex != -1) objectCache[objIndex] = ohc; + } + } + // Write the type information + if (itemType == lastItemType) + { + // Use the last object type + Write(stream, (byte)ObjectTypes.LastItemType); + } + else + { + // Write object type details + objType = info.ObjectType; + writeObject = info.WriteObject; + (itemSerializer, itemSyncSerializer, _) = itemType.GetItemSerializerInfo(isAsync: false); + if (info.WriteType) + { + // Write type detail informations + int thc = itemType.GetHashCode(), + typeIndex = typeCache.IndexOf(thc); + if (typeIndex != -1) + { + // Use the cached type + objType |= ObjectTypes.Cached; + Write(stream, (byte)objType); + Write(stream, (byte)typeIndex); + } + else + { + // Update the cache + typeIndex = typeCache.IndexOf(0); + if (typeIndex != -1) typeCache[typeIndex] = thc; + // Write the type informations + Write(stream, (byte)objType); + Write(stream, itemType); + } + } + else + { + // Write the type informations + Write(stream, (byte)objType); + itemSerializer = SerializerTypes.Any; + } + lastItemType = writeObject ? itemType : null; + } + return !writeObject; + } + + /// + /// Write an item header, if the used item type isn't specified + /// + /// Stream + /// Item + /// Item type + /// Type cache + /// Object cache + /// Last item type + /// Item serializer type + /// Item synchronous serializer + /// Item asynchronous serializer + /// Object type + /// Write the object? + /// Cancellation token + public static async Task<( + bool Complete, + Type? LastItemType, + SerializerTypes ItemSerializer, + StreamSerializer.Serialize_Delegate? ItemSyncSerializer, + StreamSerializer.AsyncSerialize_Delegate? ItemAsyncSerializer, + ObjectTypes ObjType, + bool WriteObject + )> WriteAnyItemHeaderAsync( + Stream stream, + dynamic item, + Type itemType, + Memory typeCache, + Memory objectCache, + Type? lastItemType, + SerializerTypes itemSerializer, + StreamSerializer.Serialize_Delegate? itemSyncSerializer, + StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer, + ObjectTypes objType, + bool writeObject, + CancellationToken cancellationToken + ) + { + // Use the object cache + var info = ((object)item).GetObjectSerializerInfo(); + if (info.WriteObject) + { + int ohc = item.GetHashCode(), + objIndex = objectCache.IndexOf(ohc); + if (objIndex != -1) + { + objType = ObjectTypes.Cached; + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)objIndex, cancellationToken).DynamicContext(); + objType = info.ObjectType; + writeObject = info.WriteObject; + (itemSerializer, itemSyncSerializer, itemAsyncSerializer) = itemType.GetItemSerializerInfo(isAsync: true); + lastItemType = writeObject ? itemType : null; + return (Complete: true, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject); + } + else + { + objIndex = objectCache.Span.IndexOf(0); + if (objIndex != -1) objectCache.Span[objIndex] = ohc; + } + } + // Write the type information + if (itemType == lastItemType) + { + // Use the last object type + await WriteAsync(stream, (byte)ObjectTypes.LastItemType, cancellationToken).DynamicContext(); + } + else + { + // Write object type details + objType = info.ObjectType; + writeObject = info.WriteObject; + (itemSerializer, itemSyncSerializer, itemAsyncSerializer) = itemType.GetItemSerializerInfo(isAsync: true); + if (info.WriteType) + { + // Write type detail informations + int thc = itemType.GetHashCode(), + typeIndex = typeCache.Span.IndexOf(thc); + if (typeIndex != -1) + { + // Use the cached type + objType |= ObjectTypes.Cached; + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)typeIndex, cancellationToken).DynamicContext(); + } + else + { + // Update the cache + typeIndex = typeCache.Span.IndexOf(0); + if (typeIndex != -1) typeCache.Span[typeIndex] = thc; + // Write the type informations + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + await WriteAsync(stream, itemType, cancellationToken).DynamicContext(); + } + } + else + { + // Write the type informations + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + itemSerializer = SerializerTypes.Any; + } + lastItemType = writeObject ? itemType : null; + } + return (Complete: !writeObject, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject); + } + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index 23b717e..25a1537 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System.Buffers; +using System.Collections; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -13,16 +14,23 @@ public static partial class StreamExtensions /// /// Stream /// Value to write + /// Are the values nullable? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteList(this Stream stream, IList value) + public static Stream WriteList(this Stream stream, IList value, bool valuesNullable = false) { + Type type = value.GetType(); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(value), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + () => "Not a list type" + )); WriteNumber(stream, value.Count); if (value.Count == 0) return stream; - foreach (object element in value) WriteObject(stream, element); + WriteListInt(stream, value, valuesNullable); return stream; } @@ -31,17 +39,24 @@ public static Stream WriteList(this Stream stream, IList value) /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = default) + public static async Task WriteListAsync(this Stream stream, IList value, bool valuesNullable = false, CancellationToken cancellationToken = default) { + Type type = value.GetType(); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(value), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + () => "Not a list type" + )); await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); if (value.Count == 0) return stream; - foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + await WriteListIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); return stream; } @@ -50,28 +65,36 @@ public static async Task WriteListAsync(this Stream stream, IList value, /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteListAsync(this Task stream, IList value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteListAsync); + public static Task WriteListAsync(this Task stream, IList value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteListAsync); /// /// Write /// /// Stream /// Value to write + /// Are the values nullable? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteListNullable(this Stream stream, IList? value) + public static Stream WriteListNullable(this Stream stream, IList? value, bool valuesNullable = false) => WriteNullableCount(stream, value?.Count, () => { + Type type = value!.GetType(); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(value), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + () => "Not a list type" + )); if (value!.Count == 0) return; - foreach (object element in value) WriteObject(stream, element); + WriteListInt(stream, value, valuesNullable); }); /// @@ -79,17 +102,24 @@ public static Stream WriteListNullable(this Stream stream, IList? value) /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteListNullableAsync(this Stream stream, IList? value, CancellationToken cancellationToken = default) + public static Task WriteListNullableAsync(this Stream stream, IList? value, bool valuesNullable = false, CancellationToken cancellationToken = default) => WriteNullableCountAsync(stream, value?.Count, async () => { + Type type = value!.GetType(); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( + nameof(value), + type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), + () => "Not a list type" + )); if (value!.Count == 0) return; - foreach (object element in value) await WriteObjectAsync(stream, element, cancellationToken).DynamicContext(); + await WriteListIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); }, cancellationToken); /// @@ -97,11 +127,167 @@ public static Task WriteListNullableAsync(this Stream stream, IList? val /// /// Stream /// Value to write + /// Are the values nullable? /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteListNullableAsync(this Task stream, IList? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteListNullableAsync); + public static Task WriteListNullableAsync(this Task stream, IList? value, bool valuesNullable = false, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteListNullableAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Are the values nullable? + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void WriteListInt(Stream stream, IList value, bool valuesNullable) + { + Type valueType = value.GetType(), + elementType = valueType.IsGenericType && valueType.GenericTypeArguments.Length == 1 + ? valueType.GenericTypeArguments[0] + : typeof(object); + (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, _) = elementType.GetItemSerializerInfo(isAsync: false); + if (serializer == SerializerTypes.Any) + { + ObjectTypes objType = default; + Type? lastItemType = null; + Type itemType; + object? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + bool writeObject = false, + isComplete; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try + { + Span typeCache = cache.AsSpan(0, byte.MaxValue), + objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); + for (int i = 0, len = value.Count; i < len; i++) + { + item = value[i]; + if (item == null) + { + Write(stream, (byte)ObjectTypes.Null); + continue; + } + itemType = item.GetType(); + isComplete = WriteAnyItemHeader( + stream, + item, + itemType, + typeCache, + objectCache, + ref lastItemType, + ref itemSerializer, + ref itemSyncSerializer, + ref objType, + ref writeObject + ); + if (!isComplete && writeObject) + if (itemSerializer == SerializerTypes.Serializer) + { + WriteItem(stream, item, nullable: false, itemSerializer, itemSyncSerializer); + } + else + { + WriteAny(stream, item, objType, writeObject); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } + else + { + for (int i = 0, len = value.Count; i < len; WriteItem(stream, value[i]!, valuesNullable, serializer, syncSerializer), i++) ; + } + } + + /// + /// Write + /// + /// Stream + /// Value to write + /// Are the values nullable? + /// Cancellation token + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task WriteListIntAsync(Stream stream, IList value, bool valuesNullable, CancellationToken cancellationToken) + { + Type valueType = value.GetType(), + elementType = valueType.IsGenericType && valueType.GenericTypeArguments.Length == 1 + ? valueType.GenericTypeArguments[0] + : typeof(object); + (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = + elementType.GetItemSerializerInfo(isAsync: true); + if (serializer == SerializerTypes.Any) + { + ObjectTypes objType = default; + Type? lastItemType = null; + Type itemType; + object? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; + bool writeObject = false, + isComplete; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try + { + Memory typeCache = cache.AsMemory(0, byte.MaxValue), + objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); + for (int i = 0, len = value.Count; i < len; i++) + { + item = value[i]; + if (item == null) + { + await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); + continue; + } + itemType = item.GetType(); + (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( + stream, + item, + itemType, + typeCache, + objectCache, + lastItemType, + itemSerializer, + itemSyncSerializer, + itemAsyncSerializer, + objType, + writeObject, + cancellationToken + ).DynamicContext(); + if (!isComplete && writeObject) + if (itemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(stream, item, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, objType, writeObject, cancellationToken).DynamicContext(); + } + } + } + finally + { + ArrayPool.Shared.Return(cache); + } + } + else + { + for ( + int i = 0, len = value.Count; + i < len; + await WriteItemAsync(stream, value[i]!, valuesNullable, serializer, syncSerializer, asyncSerializer, cancellationToken).DynamicContext(), i++ + ) ; + } + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index b477301..aad6c73 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -1,4 +1,5 @@ -using System.Reflection; +using System.Buffers; +using System.Reflection; using System.Runtime; using System.Runtime.CompilerServices; using System.Text; @@ -120,19 +121,55 @@ public static Stream WriteAnyObject(this Stream stream, object obj) bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); WriteNumberNullable(stream, attr?.Version); WriteNumber(stream, pis.Length); - foreach (PropertyInfoExt pi in pis) + ObjectTypes objType = default; + Type? lastItemType = null; + object? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + bool writeObject = false, + isComplete; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try { - if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) - Write(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b))); - if (pi.Property.PropertyType.IsNullable()) + Span typeCache = cache.AsSpan(0, byte.MaxValue), + objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); + foreach (PropertyInfoExt pi in pis) { - WriteAnyNullable(stream, pi.Getter!(obj)!); - } - else - { - WriteAny(stream, pi.Getter!(obj)!); + if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) + Write(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b))); + item = pi.Getter!(obj); + if (item == null) + { + Write(stream, (byte)ObjectTypes.Null); + continue; + } + isComplete = WriteAnyItemHeader( + stream, + item!, + pi.Property.PropertyType, + typeCache, + objectCache, + ref lastItemType, + ref itemSerializer, + ref itemSyncSerializer, + ref objType, + ref writeObject + ); + if (!isComplete && writeObject) + if (itemSerializer == SerializerTypes.Serializer) + { + WriteItem(stream, item!, nullable: false, itemSerializer, itemSyncSerializer); + } + else + { + WriteAny(stream, item!, objType, writeObject); + } } } + finally + { + ArrayPool.Shared.Return(cache); + } return stream; } @@ -152,19 +189,58 @@ public static async Task WriteAnyObjectAsync(this Stream stream, object bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); await WriteNumberNullableAsync(stream, attr?.Version, cancellationToken).DynamicContext(); await WriteNumberAsync(stream, pis.Length, cancellationToken).DynamicContext(); - foreach (PropertyInfoExt pi in pis) + ObjectTypes objType = default; + Type? lastItemType = null; + object? item; + SerializerTypes itemSerializer = default; + StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; + StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; + bool writeObject = false, + isComplete; + int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); + try { - if (useChecksum && !(pi.Property.GetCustomAttribute()?.SkipPropertyNameChecksum ?? false)) - await WriteAsync(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), cancellationToken).DynamicContext(); - if (pi.Property.PropertyType.IsNullable()) + Memory typeCache = cache.AsMemory(0, byte.MaxValue), + objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); + foreach (PropertyInfoExt pi in pis) { - await WriteAnyNullableAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, pi.Getter!(obj)!, cancellationToken).DynamicContext(); + if (useChecksum && !(pi.Property.GetCustomAttribute()?.SkipPropertyNameChecksum ?? false)) + await WriteAsync(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), cancellationToken).DynamicContext(); + item = pi.Getter!(obj); + if (item == null) + { + await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); + continue; + } + (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( + stream, + item!, + pi.Property.PropertyType, + typeCache, + objectCache, + lastItemType, + itemSerializer, + itemSyncSerializer, + itemAsyncSerializer, + objType, + writeObject, + cancellationToken + ).DynamicContext(); + if (!isComplete && writeObject) + if (itemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(stream, item!, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item!, objType, writeObject, cancellationToken).DynamicContext(); + } } } + finally + { + ArrayPool.Shared.Return(cache); + } return stream; } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index 03cdfb5..dbc035f 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -107,7 +107,7 @@ public static Task WriteString16Async(this Task stream, string v /// Stream /// Value to write /// Stream - public static Stream WriteString16Nullable(this Stream stream, string? value) + public static Stream WriteString16Nullable(this Stream stream, string? value) => WriteNullableString(stream, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer)); /// diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs new file mode 100644 index 0000000..8fd915e --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs @@ -0,0 +1,77 @@ +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Type + public static partial class StreamExtensions + { + /// + /// Write + /// + /// Stream + /// Type + /// Stream + public static Stream Write(this Stream stream, Type type) => WriteSerialized(stream, new SerializedTypeInfo(type)); + + /// + /// Write + /// + /// Stream + /// Type + /// Cancellation token + /// Stream + public static Task WriteAsync(this Stream stream, Type type, CancellationToken cancellationToken = default) + => WriteSerializedAsync(stream, new SerializedTypeInfo(type), cancellationToken); + + /// + /// Write + /// + /// Stream + /// Type + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, Type type, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, type, cancellationToken, WriteAsync); + + /// + /// Write + /// + /// Stream + /// Type + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteNullable(this Stream stream, Type? type) + => type == null ? WriteNumberNullable(stream, (int?)null) : Write(stream, type); + + /// + /// Write + /// + /// Stream + /// Type + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Stream stream, Type? type, CancellationToken cancellationToken = default) + => type == null + ? WriteNumberNullableAsync(stream, (int?)null, cancellationToken) + : WriteAsync(stream, type, cancellationToken); + + /// + /// Write + /// + /// Stream + /// Type + /// Cancellation token + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, Type? type, CancellationToken cancellationToken = default) + => AsyncHelper.FluentAsync(stream, type, cancellationToken, WriteNullableAsync); + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index 00344c2..49243a1 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -23,6 +23,10 @@ static StreamExtensions() ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStruct)}"); ReadStructAsyncMethod = type.GetMethodCached(nameof(ReadStructAsync), BindingFlags.Static | BindingFlags.Public) ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStructAsync)}"); + ReadStructNullableMethod = type.GetMethodCached(nameof(ReadStructNullable), BindingFlags.Static | BindingFlags.Public) + ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStructNullable)}"); + ReadStructNullableAsyncMethod = type.GetMethodCached(nameof(ReadStructNullableAsync), BindingFlags.Static | BindingFlags.Public) + ?? throw new TypeLoadException($"Failed to reflect {nameof(ReadStructNullableAsync)}"); } /// diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index 76d82f3..381e8a5 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -61,72 +61,74 @@ static StreamSerializer() SyncSerializer = new( new KeyValuePair[] { - new KeyValuePair(typeof(bool),(s, v) => s.Write((bool)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(sbyte),(s, v) => s.Write((sbyte)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(byte),(s, v) => s.Write((byte)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(short),(s, v) => s.Write((int)(short)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(ushort),(s, v) => s.Write((ushort)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(int),(s, v) => s.Write((int)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(uint),(s, v) => s.Write((uint)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(long),(s, v) => s.Write((long)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(ulong),(s, v) => s.Write((ulong)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(float),(s, v) => s.Write((float)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(double),(s, v) => s.Write((double)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(decimal),(s, v) => s.Write((decimal)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(byte[]),(s, v) => s.WriteBytes((byte[])SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(string),(s, v) => s.WriteString((string)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(Array),(s, v) => s.WriteArray((Array)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(IList),(s, v) => s.WriteList((IList)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(IDictionary),(s, v) => s.WriteDict((IDictionary)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(Enum),(s, v) => s.WriteEnum((Enum)SerializerHelper.EnsureNotNull(v))), - new KeyValuePair(typeof(Stream),(s, v) => s.WriteStream((Stream)SerializerHelper.EnsureNotNull(v))) + new(typeof(bool),(s, v) => s.Write((bool)SerializerHelper.EnsureNotNull(v))), + new(typeof(sbyte),(s, v) => s.Write((sbyte)SerializerHelper.EnsureNotNull(v))), + new(typeof(byte),(s, v) => s.Write((byte)SerializerHelper.EnsureNotNull(v))), + new(typeof(short),(s, v) => s.Write((int)(short)SerializerHelper.EnsureNotNull(v))), + new(typeof(ushort),(s, v) => s.Write((ushort)SerializerHelper.EnsureNotNull(v))), + new(typeof(int),(s, v) => s.Write((int)SerializerHelper.EnsureNotNull(v))), + new(typeof(uint),(s, v) => s.Write((uint)SerializerHelper.EnsureNotNull(v))), + new(typeof(long),(s, v) => s.Write((long)SerializerHelper.EnsureNotNull(v))), + new(typeof(ulong),(s, v) => s.Write((ulong)SerializerHelper.EnsureNotNull(v))), + new(typeof(float),(s, v) => s.Write((float)SerializerHelper.EnsureNotNull(v))), + new(typeof(double),(s, v) => s.Write((double)SerializerHelper.EnsureNotNull(v))), + new(typeof(decimal),(s, v) => s.Write((decimal)SerializerHelper.EnsureNotNull(v))), + new(typeof(byte[]),(s, v) => s.WriteBytes((byte[])SerializerHelper.EnsureNotNull(v))), + new(typeof(string),(s, v) => s.WriteString((string)SerializerHelper.EnsureNotNull(v))), + new(typeof(Array),(s, v) => s.WriteArray((Array)SerializerHelper.EnsureNotNull(v))), + new(typeof(IList),(s, v) => s.WriteList((IList)SerializerHelper.EnsureNotNull(v))), + new(typeof(IDictionary),(s, v) => s.WriteDict((IDictionary)SerializerHelper.EnsureNotNull(v))), + new(typeof(Enum),(s, v) => s.WriteEnum((Enum)SerializerHelper.EnsureNotNull(v))), + new(typeof(Stream),(s, v) => s.WriteStream((Stream)SerializerHelper.EnsureNotNull(v))), + new(typeof(Type),(s, v) => s.Write((Type)SerializerHelper.EnsureNotNull(v))) } ); AsyncSerializer = new( new KeyValuePair[] { - new KeyValuePair(typeof(bool),(s, v, ct) => s.WriteAsync((bool)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(sbyte),(s, v, ct) => s.WriteAsync((sbyte)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(byte),(s, v, ct) => s.WriteAsync((byte)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(short),(s, v, ct) => s.WriteAsync((short)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(ushort),(s, v, ct) => s.WriteAsync((ushort)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(int),(s, v, ct) => s.WriteAsync((int)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(uint),(s, v, ct) => s.WriteAsync((uint)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(long),(s, v, ct) => s.WriteAsync((long)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(ulong),(s, v, ct) => s.WriteAsync((ulong)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(float),(s, v, ct) => s.WriteAsync((float)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(double),(s, v, ct) => s.WriteAsync((double)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(decimal),(s, v, ct) => s.WriteAsync((decimal)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(byte[]),(s, v, ct) => s.WriteBytesAsync((byte[])SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(string),(s, v, ct) => s.WriteStringAsync((string)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(Array),(s, v, ct) => s.WriteArrayAsync((Array)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(IList),(s, v, ct) => s.WriteListAsync((IList)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(IDictionary),(s, v, ct) => s.WriteDictAsync((IDictionary)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(Enum),(s, v, ct) => s.WriteEnumAsync((Enum)SerializerHelper.EnsureNotNull(v), ct)), - new KeyValuePair(typeof(Stream),(s, v, ct) => s.WriteStreamAsync((Stream)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)) + new(typeof(bool),(s, v, ct) => s.WriteAsync((bool)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(sbyte),(s, v, ct) => s.WriteAsync((sbyte)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(byte),(s, v, ct) => s.WriteAsync((byte)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(short),(s, v, ct) => s.WriteAsync((short)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(ushort),(s, v, ct) => s.WriteAsync((ushort)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(int),(s, v, ct) => s.WriteAsync((int)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(uint),(s, v, ct) => s.WriteAsync((uint)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(long),(s, v, ct) => s.WriteAsync((long)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(ulong),(s, v, ct) => s.WriteAsync((ulong)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(float),(s, v, ct) => s.WriteAsync((float)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(double),(s, v, ct) => s.WriteAsync((double)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(decimal),(s, v, ct) => s.WriteAsync((decimal)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(byte[]),(s, v, ct) => s.WriteBytesAsync((byte[])SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(string),(s, v, ct) => s.WriteStringAsync((string)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(Array),(s, v, ct) => s.WriteArrayAsync((Array)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), + new(typeof(IList),(s, v, ct) => s.WriteListAsync((IList)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), + new(typeof(IDictionary),(s, v, ct) => s.WriteDictAsync((IDictionary)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), + new(typeof(Enum),(s, v, ct) => s.WriteEnumAsync((Enum)SerializerHelper.EnsureNotNull(v), ct)), + new(typeof(Stream),(s, v, ct) => s.WriteStreamAsync((Stream)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), + new(typeof(Type),(s, v, ct) => s.WriteAsync((Type)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)) } ); SyncDeserializer = new(new KeyValuePair[] { - new KeyValuePair(typeof(bool),(s,t,v,o) => s.ReadBool(v)), - new KeyValuePair(typeof(sbyte),(s,t,v,o) => s.ReadOneSByte(v)), - new KeyValuePair(typeof(byte),(s,t,v,o) => s.ReadOneByte(v)), - new KeyValuePair(typeof(short),(s,t,v,o) => s.ReadShort(v)), - new KeyValuePair(typeof(ushort),(s,t,v,o) => s.ReadUShort(v)), - new KeyValuePair(typeof(int),(s,t,v,o) => s.ReadInt(v)), - new KeyValuePair(typeof(uint),(s,t,v,o) => s.ReadUInt(v)), - new KeyValuePair(typeof(long),(s,t,v,o) => s.ReadLong(v)), - new KeyValuePair(typeof(ulong),(s,t,v,o) => s.ReadULong(v)), - new KeyValuePair(typeof(float),(s,t,v,o) => s.ReadFloat(v)), - new KeyValuePair(typeof(double),(s,t,v,o) => s.ReadDouble(v)), - new KeyValuePair(typeof(decimal),(s,t,v,o) => s.ReadDecimal(v)), - new KeyValuePair(typeof(byte[]),(s,t,v,o) => + new(typeof(bool),(s,t,v,o) => s.ReadBool(v)), + new(typeof(sbyte),(s,t,v,o) => s.ReadOneSByte(v)), + new(typeof(byte),(s,t,v,o) => s.ReadOneByte(v)), + new(typeof(short),(s,t,v,o) => s.ReadShort(v)), + new(typeof(ushort),(s,t,v,o) => s.ReadUShort(v)), + new(typeof(int),(s,t,v,o) => s.ReadInt(v)), + new(typeof(uint),(s,t,v,o) => s.ReadUInt(v)), + new(typeof(long),(s,t,v,o) => s.ReadLong(v)), + new(typeof(ulong),(s,t,v,o) => s.ReadULong(v)), + new(typeof(float),(s,t,v,o) => s.ReadFloat(v)), + new(typeof(double),(s,t,v,o) => s.ReadDouble(v)), + new(typeof(decimal),(s,t,v,o) => s.ReadDecimal(v)), + new(typeof(byte[]),(s,t,v,o) => s.ReadBytes(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue) ), - new KeyValuePair(typeof(string),(s,t,v,o) => + new(typeof(string),(s,t,v,o) => s.ReadString(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue) ), - new KeyValuePair(typeof(Array),(s,t,v,o) => + new(typeof(Array),(s,t,v,o) => s.ReadArray( t, v, @@ -136,7 +138,7 @@ static StreamSerializer() o?.Attribute.GetValueSerializerOptions(property: null, s, v) ) ), - new KeyValuePair(typeof(IList),(s,t,v,o) => + new(typeof(IList),(s,t,v,o) => s.ReadList( t, v, @@ -146,7 +148,7 @@ static StreamSerializer() o?.Attribute.GetValueSerializerOptions(property: null, s, v) ) ), - new KeyValuePair(typeof(IDictionary),(s,t,v,o) => + new(typeof(IDictionary),(s,t,v,o) => s.ReadDict( t, v, @@ -157,8 +159,8 @@ static StreamSerializer() o?.Attribute.GetValueSerializerOptions(property: null, s, v) ) ), - new KeyValuePair(typeof(Enum),(s,t,v,o) => s.ReadEnum(t,v)), - new KeyValuePair(typeof(Stream),(s,t,v,o) => + new(typeof(Enum),(s,t,v,o) => s.ReadEnum(t,v)), + new(typeof(Stream),(s,t,v,o) => { Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v)?? new FileStream( Path.GetTempFileName(), @@ -177,29 +179,30 @@ static StreamSerializer() res.Dispose(); throw; } - }) + }), + new(typeof(Type),(s,t,v,o) => s.ReadType(v)) }); AsyncDeserializer = new(new KeyValuePair[] { - new KeyValuePair(typeof(bool),(s,t,v,o,ct) => s.ReadBoolAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(sbyte),(s,t,v,o,ct) => s.ReadOneSByteAsync(v, ct)), - new KeyValuePair(typeof(byte),(s,t,v,o,ct) => s.ReadOneByteAsync(v, ct)), - new KeyValuePair(typeof(short),(s,t,v,o,ct) => s.ReadShortAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(ushort),(s,t,v,o,ct) => s.ReadUShortAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(int),(s,t,v,o,ct) => s.ReadIntAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(uint),(s,t,v,o,ct) => s.ReadUIntAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(long),(s,t,v,o,ct) => s.ReadLongAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(ulong),(s,t,v,o,ct) => s.ReadULongAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(float),(s,t,v,o,ct) => s.ReadFloatAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(double),(s,t,v,o,ct) => s.ReadDoubleAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(decimal),(s,t,v,o,ct) => s.ReadDecimalAsync(v, cancellationToken: ct)), - new KeyValuePair(typeof(byte[]),(s,t,v,o,ct) => + new(typeof(bool),(s,t,v,o,ct) => s.ReadBoolAsync(v, cancellationToken: ct)), + new(typeof(sbyte),(s,t,v,o,ct) => s.ReadOneSByteAsync(v, ct)), + new(typeof(byte),(s,t,v,o,ct) => s.ReadOneByteAsync(v, ct)), + new(typeof(short),(s,t,v,o,ct) => s.ReadShortAsync(v, cancellationToken: ct)), + new(typeof(ushort),(s,t,v,o,ct) => s.ReadUShortAsync(v, cancellationToken: ct)), + new(typeof(int),(s,t,v,o,ct) => s.ReadIntAsync(v, cancellationToken: ct)), + new(typeof(uint),(s,t,v,o,ct) => s.ReadUIntAsync(v, cancellationToken: ct)), + new(typeof(long),(s,t,v,o,ct) => s.ReadLongAsync(v, cancellationToken: ct)), + new(typeof(ulong),(s,t,v,o,ct) => s.ReadULongAsync(v, cancellationToken: ct)), + new(typeof(float),(s,t,v,o,ct) => s.ReadFloatAsync(v, cancellationToken: ct)), + new(typeof(double),(s,t,v,o,ct) => s.ReadDoubleAsync(v, cancellationToken: ct)), + new(typeof(decimal),(s,t,v,o,ct) => s.ReadDecimalAsync(v, cancellationToken: ct)), + new(typeof(byte[]),(s,t,v,o,ct) => s.ReadBytesAsync(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue, cancellationToken: ct) ), - new KeyValuePair(typeof(string),(s,t,v,o,ct) => + new(typeof(string),(s,t,v,o,ct) => s.ReadStringAsync(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue, cancellationToken: ct) ), - new KeyValuePair(typeof(Array),(s,t,v,o,ct) => + new(typeof(Array),(s,t,v,o,ct) => s.ReadArrayAsync( t, v, @@ -207,10 +210,10 @@ static StreamSerializer() o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), - ct + cancellationToken: ct ) ), - new KeyValuePair(typeof(IList),(s,t,v,o,ct) => + new(typeof(IList),(s,t,v,o,ct) => s.ReadListAsync( t, v, @@ -218,10 +221,10 @@ static StreamSerializer() o?.GetMinLen(0)??0, o?.GetMaxLen(int.MaxValue)??int.MaxValue, o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), - ct + cancellationToken: ct ) ), - new KeyValuePair(typeof(IDictionary),(s,t,v,o,ct) => + new(typeof(IDictionary),(s,t,v,o,ct) => s.ReadDictAsync( t, v, @@ -230,11 +233,11 @@ static StreamSerializer() o?.GetMaxLen(int.MaxValue)??int.MaxValue, o?.Attribute.GetKeySerializerOptions(property: null, s, v, ct), o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), - ct + cancellationToken: ct ) ), - new KeyValuePair(typeof(Enum),(s,t,v,o,ct) => s.ReadEnumAsync(t,v,cancellationToken: ct)), - new KeyValuePair(typeof(Stream),(s,t,v,o,ct) => + new(typeof(Enum),(s,t,v,o,ct) => s.ReadEnumAsync(t,v,cancellationToken: ct)), + new(typeof(Stream),(s,t,v,o,ct) => { Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v,ct)?? new FileStream( Path.GetTempFileName(), @@ -253,7 +256,8 @@ static StreamSerializer() res.Dispose();//TODO Should be DisposeAsync throw; } - }) + }), + new(typeof(Type),(s,t,v,o,ct) => s.ReadTypeAsync(v, cancellationToken: ct)) }); AllowedTypes = new(new Type[] { @@ -272,7 +276,8 @@ static StreamSerializer() typeof(string), typeof(IDictionary), typeof(IList), - typeof(Stream) + typeof(Stream), + typeof(Type) }); } @@ -404,7 +409,6 @@ public static Type LoadType(string name) /// Is allowed? public static bool IsTypeAllowed(Type type) { - if (type == typeof(List)) Debugger.Break(); // Deny abstract types if (type.IsAbstract || type.IsInterface) return false; // Allow all enumeration types diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs index 8a6d072..e6e2524 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -161,6 +161,11 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position /// public string? ValueSerializerOptionsFactoryMethod { get; set; } + /// + /// Serializer type + /// + public SerializerTypes? Serializer { get; set; } + /// /// Get a stream from the stream factory for deserializing an embedded stream /// From c72a4758dbbc9d07b7cbb1cb54019579ee802d21 Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 2 Jul 2023 22:01:53 +0200 Subject: [PATCH 14/17] Update + Added type cache for `IStreamSerializer` types for writing only a minimum of type informations - Fixed a bug in `SerializerHelper.IsArray` - Fixed a bug when serializing array/list/dictionary as "any object" --- README.md | 23 + .../StreamExtensions_Tests.Type.cs | 14 +- .../DefaultSerializerOptions.cs | 3 +- .../ObjectTypes.cs | 8 + src/Stream-Serializer-Extensions/README.md | 23 + .../SerializedTypeInfo.IStreamSerializer.cs | 327 +++++++++++++ .../SerializedTypeInfo.cs | 451 +++++++----------- .../SerializerHelper.cs | 41 +- .../StreamExtensions.Read.Any.cs | 97 ++-- .../StreamExtensions.Read.FixedArray.cs | 14 +- .../StreamExtensions.Read.Items.cs | 42 +- .../StreamExtensions.Write.Any.cs | 2 + .../StreamExtensions.Write.FixedArray.cs | 3 + .../StreamExtensions.Write.Items.cs | 95 ++-- .../StreamExtensions.Write.Type.cs | 4 +- .../StreamSerializer.cs | 34 +- 16 files changed, 794 insertions(+), 387 deletions(-) create mode 100644 src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs diff --git a/README.md b/README.md index 5f5c1e1..3d165e8 100644 --- a/README.md +++ b/README.md @@ -505,6 +505,29 @@ These enumerators are implemented at present: | Numeric types | `StreamNumber(Async)Enumerator` | `ReadNumber(Async)` | `EnumerateNumber(Async)` | | `string` | `StreamString(Async)Enumerator` | `ReadString(Async)` | `EnumerateString(Async)` | +## Type cache + +By calling `StreamSerializer.EnableTypeCache()`, you can use a type cache, +which enables the serializer to write type information about types with +implement the `IStreamSerializer` interface using only 4 bytes. For this all +matching types will be stored in the `wan24.Core.TypeCache`. + +**CAUTION**: Calling this method will ensure that the `wan24-Core` +bootstrapper did run! A call during bootstrapping will cause an exception. + +Please ensure that the type cache has been enabled first, whenever you want to +write or read any byte sequence. A byte sequence which was created using the +type cache can't be deserialized, if the type cache isn't enabled! Anyway, the +opposite isn't a problem. + +**CAUTION**: Because the type cache uses the types hash code, you shouldn't +use this feature, if you want to cold store a sequence, or if if the +deserializing peer may know a different version if the type. + +When using the type cache, every `IStreamSerializer` type information can be +written using only about 7 bytes. Without the type cache, the information will +contain much more bytes, depending on the type properties. + ## Security The base serializer supports basic types and lists. Especially when diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs index 2374e96..56cd57d 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs @@ -20,13 +20,15 @@ public void Type_Tests() typeof(Dictionary<,>), typeof(IDisposable), typeof(Stream), - typeof(StreamExtensions_Tests) + typeof(StreamExtensions_Tests), + typeof(Type) }) { - Logging.WriteInfo($"Type {type} ({new SerializedTypeInfo(type)})"); + Logging.WriteInfo($"Type {type} ({SerializedTypeInfo.From(type)})"); ms.SetLength(0); ms.Position = 0; ms.Write(type); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; Assert.AreEqual(type, ms.ReadType()); } @@ -40,6 +42,7 @@ public void Type_Tests() ms.SetLength(0); ms.Position = 0; ms.WriteNullable(type); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; Assert.AreEqual(type, ms.ReadTypeNullable()); } @@ -60,13 +63,15 @@ public async Task TypeAsync_Tests() typeof(Dictionary<,>), typeof(IDisposable), typeof(Stream), - typeof(StreamExtensions_Tests) + typeof(StreamExtensions_Tests), + typeof(Type) }) { - Logging.WriteInfo($"Type {type} ({new SerializedTypeInfo(type)})"); + Logging.WriteInfo($"Type {type} ({SerializedTypeInfo.From(type)})"); ms.SetLength(0); ms.Position = 0; await ms.WriteAsync(type); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; Assert.AreEqual(type, await ms.ReadTypeAsync()); } @@ -80,6 +85,7 @@ public async Task TypeAsync_Tests() ms.SetLength(0); ms.Position = 0; await ms.WriteNullableAsync(type); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; Assert.AreEqual(type, await ms.ReadTypeNullableAsync()); } diff --git a/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs b/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs index cedafc5..05e5b21 100644 --- a/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs +++ b/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs @@ -16,5 +16,4 @@ public DefaultSerializerOptions(PropertyInfoExt? property, StreamSerializerAttri } } -//TODO Use EnsureConnectType -//TODO Nullable parameter for array/list/dictionary reading +//TODO Use EnsureCorrectType diff --git a/src/Stream-Serializer-Extensions/ObjectTypes.cs b/src/Stream-Serializer-Extensions/ObjectTypes.cs index eefa054..1a7f4de 100644 --- a/src/Stream-Serializer-Extensions/ObjectTypes.cs +++ b/src/Stream-Serializer-Extensions/ObjectTypes.cs @@ -109,6 +109,14 @@ public enum ObjectTypes : byte /// No array rank /// NoRank = 64, + /// + /// Cached serializeable assignable + /// + CachedSerializable = 64, + /// + /// Is a basic (serialized to only one byte using ) + /// + BasicTypeInfo = 64, #pragma warning restore CA1069 // Double value /// /// Empty (or zero or boolean ; or enumeration termination or last item type, if this flag is being used alone) diff --git a/src/Stream-Serializer-Extensions/README.md b/src/Stream-Serializer-Extensions/README.md index 5f5c1e1..3d165e8 100644 --- a/src/Stream-Serializer-Extensions/README.md +++ b/src/Stream-Serializer-Extensions/README.md @@ -505,6 +505,29 @@ These enumerators are implemented at present: | Numeric types | `StreamNumber(Async)Enumerator` | `ReadNumber(Async)` | `EnumerateNumber(Async)` | | `string` | `StreamString(Async)Enumerator` | `ReadString(Async)` | `EnumerateString(Async)` | +## Type cache + +By calling `StreamSerializer.EnableTypeCache()`, you can use a type cache, +which enables the serializer to write type information about types with +implement the `IStreamSerializer` interface using only 4 bytes. For this all +matching types will be stored in the `wan24.Core.TypeCache`. + +**CAUTION**: Calling this method will ensure that the `wan24-Core` +bootstrapper did run! A call during bootstrapping will cause an exception. + +Please ensure that the type cache has been enabled first, whenever you want to +write or read any byte sequence. A byte sequence which was created using the +type cache can't be deserialized, if the type cache isn't enabled! Anyway, the +opposite isn't a problem. + +**CAUTION**: Because the type cache uses the types hash code, you shouldn't +use this feature, if you want to cold store a sequence, or if if the +deserializing peer may know a different version if the type. + +When using the type cache, every `IStreamSerializer` type information can be +written using only about 7 bytes. Without the type cache, the information will +contain much more bytes, depending on the type properties. + ## Security The base serializer supports basic types and lists. Especially when diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs new file mode 100644 index 0000000..9136a76 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs @@ -0,0 +1,327 @@ +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // IStreamSerializer + public sealed partial class SerializedTypeInfo : IStreamSerializerVersion + { + /// + /// Object version + /// + public const int VERSION = 1; + + /// + /// Recursion level (used to avoid a forced endless recursion using a manipulated byte sequence) + /// + private int Recursion = 0; + /// + /// Serialized object version + /// + private int? SerializedObjectVersion = null; + /// + /// Serializer version + /// + private int? SerializerVersion = null; + + /// + int? IStreamSerializerVersion.ObjectVersion => VERSION; + + /// + int? IStreamSerializerVersion.SerializedObjectVersion => SerializedObjectVersion; + + /// + int? IStreamSerializerVersion.SerializerVersion => SerializerVersion; + + /// + public void Serialize(Stream stream) + { + stream.WriteNumberNullable(VERSION) + .Write((byte)(ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled ? ObjectType | ObjectTypes.Cached : ObjectType)); + if (ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled) + { + stream.Write(ToClrType().GetHashCode()); + return; + } + else if (Name != null) + { + stream.WriteString(Name); + } + if (ObjectType.IsGeneric()) + { + int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Count; + stream.Write((sbyte)(IsGenericTypeDefinition ? -len : len)); + if (!IsGenericTypeDefinition) for (int i = 0; i < len; stream.WriteSerialized(GenericParameters[i]), i++) ; + } + else if (ObjectType.IsArray()) + { + stream.WriteSerialized(ElementType!); + if (!ObjectType.IsNotRanked()) stream.Write((byte)(ArrayRank - 1)); + } + } + + /// + public async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) + { + await stream.WriteNumberNullableAsync(VERSION, cancellationToken).DynamicContext(); + await stream.WriteAsync( + (byte)(ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled ? ObjectType | ObjectTypes.Cached : ObjectType), + cancellationToken + ) + .DynamicContext(); + if (ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled) + { + await stream.WriteAsync(ToClrType().GetHashCode(), cancellationToken).DynamicContext(); + return; + } + else if (Name != null) + { + await stream.WriteStringAsync(Name, cancellationToken).DynamicContext(); + } + if (ObjectType.IsGeneric()) + { + int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Count; + await stream.WriteAsync((sbyte)(IsGenericTypeDefinition ? -len : len), cancellationToken).DynamicContext(); + if (!IsGenericTypeDefinition) + for (int i = 0; i < len; i++) + await stream.WriteSerializedAsync(GenericParameters[i], cancellationToken).DynamicContext(); + } + else if (ObjectType.IsArray()) + { + await stream.WriteSerializedAsync(ElementType!, cancellationToken).DynamicContext(); + if (!ObjectType.IsNotRanked()) await stream.WriteAsync((byte)(ArrayRank - 1), cancellationToken).DynamicContext(); + } + } + + /// + public void Deserialize(Stream stream, int version) + { + if (SerializerVersion != null || ClrType != null) throw new SerializerException("Not a fresh instance", new InvalidOperationException()); + SerializerVersion = version; + if (ObjectType == ObjectTypes.Null) + { + SerializedObjectVersion = stream.ReadNumberNullable(version) ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); + if (SerializedObjectVersion > VERSION) + throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); + ObjectType = (ObjectTypes)stream.ReadOneByte(version); + } + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Serializable: + if (StreamSerializer.TypeCacheEnabled && ObjectType.ContainsAllFlags(ObjectTypes.Cached)) + { + int thc = stream.ReadInt(version); + if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); + if (!typeof(IStreamSerializer).IsAssignableFrom(type)) + throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); + SetTypeInfo(type); + return; + } + else + { + if (ObjectType.ContainsAllFlags(ObjectTypes.Cached)) + throw new SerializerException( + $"The type cache needs to be enabled in order to be able to deserialize this type information", + new InvalidOperationException() + ); + Name = stream.ReadString(version, minLen: 1, maxLen: short.MaxValue); + } + break; + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = stream.ReadString(version, minLen: 1, maxLen: short.MaxValue); + break; + } + if (ObjectType.IsGeneric()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + int len = stream.ReadOneSByte(version); + IsGenericTypeDefinition = len < 0; + if (len < 0) len = -len; + SerializerHelper.EnsureValidLength(len, 1); + if (IsGenericTypeDefinition) + { + GenericParameterCount = len; + } + else + { + List list = new(len); + SerializedTypeInfo info; + for (int i = 0; i < len; i++) + { + info = new() + { + Recursion = Recursion + 1 + }; + info.Deserialize(stream, version); + list.Add(info); + } + GenericParameters = list.AsReadOnly(); + } + } + else if (ObjectType.IsArray()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + ElementType = new() + { + Recursion = Recursion + 1 + }; + ElementType.Deserialize(stream, version); + if (!ObjectType.IsNotRanked()) + { + ArrayRank = stream.ReadOneByte() + 1; + if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); + } + else + { + ArrayRank = 1; + } + } + } + + /// + public async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) + { + if (SerializerVersion != null || ClrType != null) throw new SerializerException("Not a fresh instance", new InvalidOperationException()); + SerializerVersion = version; + if (ObjectType == ObjectTypes.Null) + { + SerializedObjectVersion = await stream.ReadNumberNullableAsync(version, cancellationToken: cancellationToken).DynamicContext() + ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); + if (SerializedObjectVersion > VERSION) + throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); + ObjectType = (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext(); + } + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Serializable: + if (StreamSerializer.TypeCacheEnabled && ObjectType.ContainsAllFlags(ObjectTypes.Cached)) + { + int thc = await stream.ReadIntAsync(version, cancellationToken: cancellationToken).DynamicContext(); + if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); + if (!typeof(IStreamSerializer).IsAssignableFrom(type)) + throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); + SetTypeInfo(type); + return; + } + else + { + if (ObjectType.ContainsAllFlags(ObjectTypes.Cached)) + throw new SerializerException( + $"The type cache needs to be enabled in order to be able to deserialize this type information", + new InvalidOperationException() + ); + Name = await stream.ReadStringAsync(version, minLen: 1, maxLen: short.MaxValue, cancellationToken: cancellationToken).DynamicContext(); + } + break; + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = await stream.ReadStringAsync(version, minLen: 1, maxLen: short.MaxValue, cancellationToken: cancellationToken).DynamicContext(); + break; + } + if (ObjectType.IsGeneric()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + int len = await stream.ReadOneSByteAsync(version, cancellationToken).DynamicContext(); + IsGenericTypeDefinition = len < 0; + if (len < 0) len = -len; + SerializerHelper.EnsureValidLength(len, 1); + if (IsGenericTypeDefinition) + { + GenericParameterCount = len; + } + else + { + List list = new(len); + SerializedTypeInfo info; + for (int i = 0; i < len; i++) + { + info = new() + { + Recursion = Recursion + 1 + }; + await info.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + list.Add(info); + } + GenericParameters = list.AsReadOnly(); + } + } + else if (ObjectType.IsArray()) + { + if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + ElementType = new() + { + Recursion = Recursion + 1 + }; + await ElementType.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + if (!ObjectType.IsNotRanked()) + { + ArrayRank = await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() + 1; + if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); + } + else + { + ArrayRank = 1; + } + } + } + + /// + /// Cast as serialized data + /// + /// + public static implicit operator byte[](SerializedTypeInfo info) => info.ToBytes(); + + /// + /// Cast from serialized data + /// + /// Data + public static implicit operator SerializedTypeInfo(byte[] data) => data.ToObject(); + + /// + /// Deserialize with a pre-red object version (and type) + /// + /// Stream + /// Serializer version + /// Object version + /// Object type + /// Instance + public static SerializedTypeInfo From(Stream stream, int version, int objVersion, ObjectTypes objType = ObjectTypes.Null) + { + SerializedTypeInfo res = new() + { + SerializedObjectVersion = objVersion, + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)stream.ReadOneByte(version) : objType + }; + res.Deserialize(stream, version); + return res; + } + + /// + /// Deserialize with a pre-red object version (and type) + /// + /// Stream + /// Serializer version + /// Object version + /// Object type + /// Cancellation token + /// Instance + public static async Task FromAsync( + Stream stream, + int version, + int objVersion, + ObjectTypes objType = ObjectTypes.Null, + CancellationToken cancellationToken = default + ) + { + SerializedTypeInfo res = new() + { + SerializedObjectVersion = objVersion, + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() : objType + }; + await res.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + return res; + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs index f099e83..7064f37 100644 --- a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs @@ -1,4 +1,6 @@ -using System.ComponentModel.DataAnnotations; +using System.Collections.Concurrent; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; using System.Text; using wan24.Core; using wan24.ObjectValidation; @@ -8,17 +10,13 @@ namespace wan24.StreamSerializerExtensions /// /// Serialized type informations /// - public sealed class SerializedTypeInfo : ValidatableObjectBase, IStreamSerializerVersion + public sealed partial class SerializedTypeInfo : ValidatableObjectBase { /// - /// Object version + /// Cache /// - public const int VERSION = 1; + private static readonly ConcurrentDictionary Cache = new(); - /// - /// Recursion level (used to avoid a forced endless recursion using a manipulated byte sequence) - /// - private int Recursion = 0; /// /// CLR type /// @@ -27,14 +25,6 @@ public sealed class SerializedTypeInfo : ValidatableObjectBase, IStreamSerialize /// As string /// private string? AsString = null; - /// - /// Serialized object version - /// - private int? SerializedObjectVersion = null; - /// - /// Serializer version - /// - private int? SerializerVersion = null; /// /// Constructor @@ -45,50 +35,62 @@ public SerializedTypeInfo() : base() { } /// Constructor /// /// Type - public SerializedTypeInfo(Type type) : base() - { - ClrType = type; - ObjectType = type.GetObjectType(); - switch (ObjectType.RemoveFlags()) - { - case ObjectTypes.Stream: - case ObjectTypes.Struct: - case ObjectTypes.Object: - Name = $"{type.Namespace}.{type.Name}"; - break; - } - if (type.IsGenericType) - { - if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); - IsGenericTypeDefinition = type.IsGenericTypeDefinition; - if (IsGenericTypeDefinition) - { - GenericParameterCount = type.GetGenericArguments().Length; - } - else - { - GenericParameters = type.GetGenericArgumentsCached() - .Select(t => new SerializedTypeInfo(t) { Recursion = Recursion + 1 }) - .ToArray(); - } - } - else if (type.IsArray) - { - if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); - ElementType = new(type.GetElementType()!) { Recursion = Recursion + 1 }; - ArrayRank = type.GetArrayRank(); - } - } + public SerializedTypeInfo(Type type) : base() => SetTypeInfo(type); + + /// + /// Constructor + /// + /// + public SerializedTypeInfo(ObjectTypes type) : base() => ObjectType = type; /// /// Object type /// + [AllowedValues( + ObjectTypes.Bool, + ObjectTypes.Byte, + ObjectTypes.Byte | ObjectTypes.Unsigned, + ObjectTypes.Short, + ObjectTypes.Short | ObjectTypes.Unsigned, + ObjectTypes.Int, + ObjectTypes.Int | ObjectTypes.Unsigned, + ObjectTypes.Long, + ObjectTypes.Long | ObjectTypes.Unsigned, + ObjectTypes.Float, + ObjectTypes.Double, + ObjectTypes.Decimal, + ObjectTypes.Bytes, + ObjectTypes.String, + ObjectTypes.List | ObjectTypes.Generic, + ObjectTypes.Dict | ObjectTypes.Generic, + ObjectTypes.Object, + ObjectTypes.Object | ObjectTypes.Generic, + ObjectTypes.Struct, + ObjectTypes.Struct | ObjectTypes.Generic, + ObjectTypes.Serializable, + ObjectTypes.Serializable | ObjectTypes.Generic, + ObjectTypes.Stream, + ObjectTypes.Array, + ObjectTypes.Array | ObjectTypes.NoRank, + ObjectTypes.ClrType + )] public ObjectTypes ObjectType { get; private set; } /// /// Name /// [StringLength(short.MaxValue, MinimumLength = 1)] + [RequiredIf( + nameof(ObjectType), + ObjectTypes.Object, + ObjectTypes.Object | ObjectTypes.Generic, + ObjectTypes.Struct, + ObjectTypes.Struct | ObjectTypes.Generic, + ObjectTypes.Stream, + ObjectTypes.Stream | ObjectTypes.Generic, + ObjectTypes.Serializable, + ObjectTypes.Serializable | ObjectTypes.Generic + )] public string? Name { get; private set; } /// @@ -100,220 +102,95 @@ public SerializedTypeInfo(Type type) : base() /// Generic parameters /// [CountLimit(sbyte.MaxValue)] - public SerializedTypeInfo[] GenericParameters { get; private set; } = Array.Empty(); + [RequiredIf( + nameof(ObjectType), + ObjectTypes.Object | ObjectTypes.Generic, + ObjectTypes.Struct | ObjectTypes.Generic, + ObjectTypes.Stream | ObjectTypes.Generic, + ObjectTypes.Serializable | ObjectTypes.Generic, + ObjectTypes.List | ObjectTypes.Generic, + ObjectTypes.Dict | ObjectTypes.Generic + )] + public ReadOnlyCollection GenericParameters { get; private set; } = new List().AsReadOnly(); /// /// Generic parameter count of a generic type definition /// [Range(0, sbyte.MaxValue)] + [RequiredIf(nameof(IsGenericTypeDefinition), true)] public int GenericParameterCount { get; private set; } /// /// Array element type /// + [RequiredIf(nameof(ObjectType), ObjectTypes.Array, ObjectTypes.Array | ObjectTypes.NoRank)] public SerializedTypeInfo? ElementType { get; private set; } /// /// Array rank /// [Range(0, byte.MaxValue)] + [RequiredIf(nameof(ElementType))] public int ArrayRank { get; private set; } /// - /// Determine if the type is serializable + /// Determine if the CLR type is known /// - public bool IsSerializable => StreamSerializer.IsTypeAllowed(ToClrType()); - - /// - int? IStreamSerializerVersion.ObjectVersion => VERSION; + [NoValidation] + public bool IsKnown + { + get + { + try + { + if (ClrType != null) return true; + if ((ClrType = TypeHelper.Instance.GetType(ToString())) == null) return false; + Cache.TryAdd(ClrType!.GetHashCode(), this); + return true; + } + catch + { + return false; + } + } + } - /// - int? IStreamSerializerVersion.SerializedObjectVersion => SerializedObjectVersion; + /// + /// Determine if the type is serializable + /// + [NoValidation] + public bool IsSerializable => IsKnown && StreamSerializer.IsTypeAllowed(ToClrType()); - /// - int? IStreamSerializerVersion.SerializerVersion => SerializerVersion; + /// + /// Determine if the type information if for a basic type (will serialize to only one byte) + /// + [NoValidation] + public bool IsBasicType => Name == null && ElementType == null && GenericParameters.Count == 0 && !IsGenericTypeDefinition; /// /// Get as CLR type /// /// CLR type - public Type ToClrType() => ClrType ??= TypeHelper.Instance.GetType(ToString()) ?? throw new TypeLoadException($"{ToString()} is not available"); + public Type ToClrType() + { + ClrType ??= TypeHelper.Instance.GetType(ToString()) ?? throw new TypeLoadException($"{ToString()} is not available"); + Cache.TryAdd(ClrType.GetHashCode(), this); + return ClrType; + } /// /// Get as serializabe type (ensures, that the type can be (de)serialized) /// /// Serializable type - public Type ToSerializableType() => ClrType == null - ? ClrType = StreamSerializer.LoadType(ToString()) - : StreamSerializer.IsTypeAllowed(ClrType) - ? ClrType - : throw new SerializerException($"Failed to load type \"{ToString()}\""); - - /// - public void Serialize(Stream stream) - { - stream.WriteNumberNullable(VERSION) - .Write((byte)ObjectType); - if (Name != null) stream.WriteString(Name); - if (ObjectType.IsGeneric()) - { - int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Length; - stream.Write((sbyte)(IsGenericTypeDefinition ? -len : len)); - if (!IsGenericTypeDefinition) for (int i = 0; i < len; stream.WriteSerialized(GenericParameters[i]), i++) ; - } - else if (ObjectType.IsArray()) - { - stream.WriteSerialized(ElementType!); - if (!ObjectType.IsNotRanked()) stream.Write((byte)(ArrayRank - 1)); - } - } - - /// - public async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) - { - await stream.WriteNumberNullableAsync(VERSION, cancellationToken).DynamicContext(); - await stream.WriteAsync((byte)ObjectType, cancellationToken).DynamicContext(); - if (Name != null) await stream.WriteStringAsync(Name, cancellationToken).DynamicContext(); - if (ObjectType.IsGeneric()) - { - int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Length; - await stream.WriteAsync((sbyte)(IsGenericTypeDefinition ? -len : len), cancellationToken).DynamicContext(); - if (!IsGenericTypeDefinition) - for (int i = 0; i < len; i++) - await stream.WriteSerializedAsync(GenericParameters[i], cancellationToken).DynamicContext(); - } - else if (ObjectType.IsArray()) - { - await stream.WriteSerializedAsync(ElementType!, cancellationToken).DynamicContext(); - if (!ObjectType.IsNotRanked()) await stream.WriteAsync((byte)(ArrayRank - 1), cancellationToken).DynamicContext(); - } - } - - /// - public void Deserialize(Stream stream, int version) - { - SerializerVersion = version; - if (ObjectType == ObjectTypes.Null) - { - SerializedObjectVersion = stream.ReadNumberNullable(version) ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); - if (SerializedObjectVersion > VERSION) - throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); - ObjectType = (ObjectTypes)stream.ReadOneByte(version); - } - switch (ObjectType.RemoveFlags()) - { - case ObjectTypes.Stream: - case ObjectTypes.Struct: - case ObjectTypes.Object: - Name = stream.ReadString(version, minLen: 1, maxLen: short.MaxValue); - break; - } - if (ObjectType.IsGeneric()) - { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); - int len = stream.ReadOneSByte(version); - IsGenericTypeDefinition = len < 0; - if (len < 0) len = -len; - SerializerHelper.EnsureValidLength(len, 1); - if (IsGenericTypeDefinition) - { - GenericParameterCount = len; - } - else - { - GenericParameters = new SerializedTypeInfo[len]; - for (int i = 0; i < len; i++) - { - GenericParameters[i] = new() - { - Recursion = Recursion + 1 - }; - GenericParameters[i].Deserialize(stream, version); - } - } - } - else if (ObjectType.IsArray()) - { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); - ElementType = new() - { - Recursion = Recursion + 1 - }; - ElementType.Deserialize(stream, version); - if (!ObjectType.IsNotRanked()) - { - ArrayRank = stream.ReadOneByte() + 1; - if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); - } - else - { - ArrayRank = 1; - } - } - } - - /// - public async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) + public Type ToSerializableType() { - SerializerVersion = version; - if (ObjectType == ObjectTypes.Null) - { - SerializedObjectVersion = await stream.ReadNumberNullableAsync(version, cancellationToken: cancellationToken).DynamicContext() - ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); - if (SerializedObjectVersion > VERSION) - throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); - ObjectType = (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext(); - } - switch (ObjectType.RemoveFlags()) - { - case ObjectTypes.Stream: - case ObjectTypes.Struct: - case ObjectTypes.Object: - Name = await stream.ReadStringAsync(version, minLen: 1, maxLen: short.MaxValue, cancellationToken: cancellationToken).DynamicContext(); - break; - } - if (ObjectType.IsGeneric()) - { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); - int len = await stream.ReadOneSByteAsync(version, cancellationToken).DynamicContext(); - IsGenericTypeDefinition = len < 0; - if (len < 0) len = -len; - SerializerHelper.EnsureValidLength(len, 1); - if (IsGenericTypeDefinition) - { - GenericParameterCount = len; - } - else - { - GenericParameters = new SerializedTypeInfo[len]; - for (int i = 0; i < len; i++) - { - GenericParameters[i] = new() - { - Recursion = Recursion + 1 - }; - await GenericParameters[i].DeserializeAsync(stream, version, cancellationToken).DynamicContext(); - } - } - } - else if (ObjectType.IsArray()) - { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); - ElementType = new() - { - Recursion = Recursion + 1 - }; - await ElementType.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); - if (!ObjectType.IsNotRanked()) - { - ArrayRank = await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() + 1; - if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); - } - else - { - ArrayRank = 1; - } - } + Type res = ClrType == null + ? ClrType = StreamSerializer.LoadType(ToString()) + : StreamSerializer.IsTypeAllowed(ClrType) + ? ClrType + : throw new SerializerException($"Failed to load type \"{ToString()}\""); + Cache.TryAdd(res.GetHashCode(), this); + return res; } /// @@ -333,7 +210,9 @@ string ToStringInt() case ObjectTypes.Decimal: return typeof(decimal).ToString(); case ObjectTypes.Bytes: return typeof(byte[]).ToString(); case ObjectTypes.String: return typeof(string).ToString(); - case ObjectTypes.Array: return $"{ElementType ?? throw new InvalidDataException("Missing array element type")}[{(ArrayRank <= 1 ? string.Empty : new string(Enumerable.Repeat(',', ArrayRank - 1).ToArray()))}]"; + case ObjectTypes.Array: + if (ElementType == null) throw new InvalidDataException("Missing array element type"); + return $"{ElementType}[{(ArrayRank <= 1 ? string.Empty : new string(Enumerable.Repeat(',', ArrayRank - 1).ToArray()))}]"; case ObjectTypes.Dict: return IsGenericTypeDefinition ? $"{typeof(Dictionary<,>).Namespace}.{typeof(Dictionary<,>).Name}" @@ -342,11 +221,12 @@ string ToStringInt() return IsGenericTypeDefinition ? $"{typeof(List<>).Namespace}.{typeof(List<>).Name}" : typeof(List<>).MakeGenericType(GenericParameters.Select(i => i.ToClrType()).ToArray()).ToString(); + case ObjectTypes.ClrType: return typeof(Type).ToString(); } if (Name == null) throw new InvalidDataException($"Missing type name for {ObjectType}"); if (!ObjectType.IsGeneric()) return Name; - if (IsGenericTypeDefinition) return $"{Name}`{GenericParameters.Length}"; - StringBuilder sb = new($"{Name}`{GenericParameters.Length}["); + if (IsGenericTypeDefinition) return $"{Name}`{GenericParameters.Count}"; + StringBuilder sb = new($"{Name}`{GenericParameters.Count}["); foreach (SerializedTypeInfo i in GenericParameters) { sb.Append(i.ToString()); @@ -359,73 +239,72 @@ string ToStringInt() return AsString ??= ToStringInt(); } + /// + /// Set the instance properties from a type + /// + /// Type + private void SetTypeInfo(Type type) + { + ArgumentValidationHelper.EnsureValidArgument(nameof(type), type); + ClrType = type; + ObjectType = type.GetObjectType() & ~ObjectTypes.CachedSerializable; + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Serializable: + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = $"{type.Namespace}.{type.Name}"; + break; + } + if (type.IsGenericType) + { + if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + IsGenericTypeDefinition = type.IsGenericTypeDefinition; + if (IsGenericTypeDefinition) + { + GenericParameterCount = type.GetGenericArguments().Length; + } + else + { + GenericParameters = type.GetGenericArgumentsCached() + .Select(t => new SerializedTypeInfo(t) { Recursion = Recursion + 1 }) + .ToList() + .AsReadOnly(); + } + } + else if (type.IsArray) + { + if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + ElementType = new(type.GetElementType()!) { Recursion = Recursion + 1 }; + ArrayRank = type.GetArrayRank(); + } + Cache.TryAdd(type.GetHashCode(), this); + } + /// /// Cast as /// - /// Info + /// public static implicit operator Type(SerializedTypeInfo info) => info.ToClrType(); /// /// Cast as serializable flag /// - /// Info + /// public static implicit operator bool(SerializedTypeInfo info) => info.IsSerializable; /// - /// Cast as serialized data - /// - /// Info - public static implicit operator byte[](SerializedTypeInfo info) => info.ToBytes(); - - /// - /// Cast from serialized data + /// Cast from /// - /// Data - public static implicit operator SerializedTypeInfo(byte[] data) => data.ToObject(); + /// + public static implicit operator SerializedTypeInfo(Type type) => From(type); /// - /// Deserialize with a pre-red object version (and type) + /// Get an instance /// - /// Stream - /// Serializer version - /// Object version - /// Object type + /// /// Instance - public static SerializedTypeInfo From(Stream stream, int version, int objVersion, ObjectTypes objType = ObjectTypes.Null) - { - SerializedTypeInfo res = new() - { - SerializedObjectVersion = objVersion, - ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)stream.ReadOneByte(version) : objType - }; - res.Deserialize(stream, version); - return res; - } - - /// - /// Deserialize with a pre-red object version (and type) - /// - /// Stream - /// Serializer version - /// Object version - /// Object type - /// Cancellation token - /// Instance - public static async Task FromAsync( - Stream stream, - int version, - int objVersion, - ObjectTypes objType = ObjectTypes.Null, - CancellationToken cancellationToken = default - ) - { - SerializedTypeInfo res = new() - { - SerializedObjectVersion = objVersion, - ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() : objType - }; - await res.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); - return res; - } + public static SerializedTypeInfo From(Type type) => Cache.TryGetValue(type.GetHashCode(), out SerializedTypeInfo? res) ? res : new(type); } } diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index 73d0b41..db0cc15 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -131,7 +131,7 @@ public static class SerializerHelper /// An array? [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsArray(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Array); + public static bool IsArray(this ObjectTypes type) => type.RemoveFlags() == ObjectTypes.Array; /// /// Is not ranked? @@ -142,6 +142,24 @@ public static class SerializerHelper [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsNotRanked(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.NoRank); + /// + /// Is a cached serializable type? + /// + /// Type + /// Is cached serializable? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsCachedSerializable(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.CachedSerializable); + + /// + /// Is a basic type info? + /// + /// Type + /// Is a basic type info? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsBasicTypeInfo(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.BasicTypeInfo); + /// /// Is a number? /// @@ -179,7 +197,6 @@ public static class SerializerHelper ObjectTypes.Dict => true, ObjectTypes.Object => true, ObjectTypes.Serializable => true, - ObjectTypes.ClrType => true, _ => false }; @@ -543,10 +560,7 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje objType |= ObjectTypes.Empty; writeObject = false; } - else - { - writeType = true; - } + writeType = true; break; case ObjectTypes.List: if (((IList)obj).Count == 0) @@ -554,10 +568,7 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje objType |= ObjectTypes.Empty; writeObject = false; } - else - { - writeType = true; - } + writeType = true; break; case ObjectTypes.Dict: if (((IDictionary)obj).Count == 0) @@ -565,10 +576,7 @@ public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObje objType |= ObjectTypes.Empty; writeObject = false; } - else - { - writeType = true; - } + writeType = true; break; case ObjectTypes.Object: case ObjectTypes.Struct: @@ -916,6 +924,11 @@ public static ObjectTypes GetObjectType(this Type type) else if (thc == typeof(decimal).GetHashCode()) objType = ObjectTypes.Decimal; else if (thc == typeof(byte[]).GetHashCode()) objType = ObjectTypes.Bytes; else if (thc == typeof(string).GetHashCode()) objType = ObjectTypes.String; + else if (typeof(IStreamSerializer).IsAssignableFrom(type)) + { + objType = ObjectTypes.Serializable; + if (StreamSerializer.TypeCacheEnabled) objType |= ObjectTypes.CachedSerializable; + } else if (thc == typeof(Stream).GetHashCode()) objType = ObjectTypes.Stream; else if (thc == typeof(Type).GetHashCode()) objType = ObjectTypes.ClrType; else if (type.IsArray) diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs index 9e8518c..7384272 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs @@ -19,7 +19,7 @@ public static partial class StreamExtensions [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions? options = null) - => ReadAnyInt(stream, version, (ObjectTypes)ReadOneByte(stream, version), type:null, options); + => ReadAnyInt(stream, version, (ObjectTypes)ReadOneByte(stream, version), type: null, options); /// /// Read any object @@ -30,16 +30,14 @@ public static object ReadAny(this Stream stream, int? version = null, ISerialize /// CLR type /// Options /// Object -#if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objType, Type? type, ISerializerOptions? options) => SerializerException.Wrap(() => { if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); version ??= StreamSerializer.Version; - bool isEmpty = objType.HasFlag(ObjectTypes.Empty), - isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), + bool isEmpty = objType.IsEmpty(), + isUnsigned = objType.IsUnsigned(), readType = objType.RequiresTypeName(); switch (objType.RemoveFlags()) { @@ -53,7 +51,11 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp type = isUnsigned ? typeof(byte) : typeof(sbyte); break; default: - return isUnsigned ? ReadOneByte(stream, version) : ReadOneSByte(stream, version); + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(byte) : typeof(sbyte)) + : isUnsigned + ? ReadOneByte(stream, version) + : ReadOneSByte(stream, version); } break; case ObjectTypes.Short: @@ -64,7 +66,11 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp type = isUnsigned ? typeof(ushort) : typeof(short); break; default: - return isUnsigned ? ReadUShort(stream, version) : ReadShort(stream, version); + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(ushort) : typeof(short)) + : isUnsigned + ? ReadUShort(stream, version) + : ReadShort(stream, version); } break; case ObjectTypes.Int: @@ -118,6 +124,24 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp minLen: options?.GetMinLen(0) ?? 0, maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).Value; + case ObjectTypes.Stream: + readType = false; + break; + case ObjectTypes.ClrType: + if (isUnsigned) + { + if(!StreamSerializer.TypeCacheEnabled) + throw new SerializerException( + $"The type cache needs to be enabled in order to be able to deserialize this type information", + new InvalidOperationException() + ); + int thc = stream.ReadInt(version); + if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); + if (!typeof(IStreamSerializer).IsAssignableFrom(type)) + throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); + return type; + } + return ReadType(stream, version); } if (readType && type == null) type = StreamSerializer.LoadType(ReadString(stream, version, minLen: 1, maxLen: short.MaxValue)); switch (objType.RemoveFlags()) @@ -131,8 +155,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp case ObjectTypes.Decimal: return isEmpty ? Activator.CreateInstance(type!)! : ReadNumber(stream, type!, version)!; case ObjectTypes.Array: - if (isEmpty) return ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)!; - return ReadArray( + return isEmpty ? ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)! : ReadArray( stream, type!, version, @@ -142,8 +165,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default) ); case ObjectTypes.List: - if (isEmpty) return Activator.CreateInstance(type!)!; - return ReadList( + return isEmpty ? Activator.CreateInstance(type!)! : ReadList( stream, type!, version, @@ -153,8 +175,7 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default) ); case ObjectTypes.Dict: - if (isEmpty) return Activator.CreateInstance(type!)!; - return ReadDict( + return isEmpty ? Activator.CreateInstance(type!)! : ReadDict( stream, type!, version, @@ -189,8 +210,6 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp res.Dispose(); throw; } - case ObjectTypes.ClrType: - return ReadType(stream, version); default: throw new InvalidProgramException(); } @@ -222,15 +241,13 @@ public static async Task ReadAnyAsync(this Stream stream, int? version = /// Options /// Cancellation token /// Object -#if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectTypes objType, Type? type, ISerializerOptions? options, CancellationToken cancellationToken) => SerializerException.WrapAsync(async () => { if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); - bool isEmpty = objType.HasFlag(ObjectTypes.Empty), - isUnsigned = objType.HasFlag(ObjectTypes.Unsigned), + bool isEmpty = objType.IsEmpty(), + isUnsigned = objType.IsUnsigned(), readType = true; Task task; switch (objType.RemoveFlags()) @@ -245,9 +262,11 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT type = isUnsigned ? typeof(byte) : typeof(sbyte); break; default: - return isUnsigned - ? await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() - : await ReadOneSByteAsync(stream, version, cancellationToken).DynamicContext(); + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(byte) : typeof(sbyte)) + : isUnsigned + ? await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() + : await ReadOneSByteAsync(stream, version, cancellationToken).DynamicContext(); } break; case ObjectTypes.Short: @@ -258,9 +277,11 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT type = isUnsigned ? typeof(ushort) : typeof(short); break; default: - return isUnsigned - ? await ReadUShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - : await ReadShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(ushort) : typeof(short)) + : isUnsigned + ? await ReadUShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + : await ReadShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); } break; case ObjectTypes.Int: @@ -321,6 +342,21 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT case ObjectTypes.Stream: readType = false; break; + case ObjectTypes.ClrType: + if (isUnsigned) + { + if (!StreamSerializer.TypeCacheEnabled) + throw new SerializerException( + $"The type cache needs to be enabled in order to be able to deserialize this type information", + new InvalidOperationException() + ); + int thc = await stream.ReadIntAsync(version, cancellationToken: cancellationToken).DynamicContext(); + if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); + if (!typeof(IStreamSerializer).IsAssignableFrom(type)) + throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); + return type; + } + return await ReadTypeAsync(stream, version, cancellationToken).DynamicContext(); } if (readType && type == null) type = StreamSerializer.LoadType(await ReadStringAsync(stream, version, pool: null, minLen: 1, maxLen: short.MaxValue, cancellationToken).DynamicContext()); @@ -336,8 +372,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT if (isEmpty) return Activator.CreateInstance(type!)!; return await ReadNumberAsync(stream, type!, version, cancellationToken: cancellationToken).DynamicContext(); case ObjectTypes.Array: - if (isEmpty) return ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)!; - return await ReadArrayAsync( + return isEmpty ? ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)! : await ReadArrayAsync( stream, type!, version, @@ -348,8 +383,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT cancellationToken: cancellationToken ).DynamicContext(); case ObjectTypes.List: - if (isEmpty) return Activator.CreateInstance(type!)!; - return await ReadListAsync( + return isEmpty ? Activator.CreateInstance(type!)! : await ReadListAsync( stream, type!, version, @@ -360,8 +394,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT cancellationToken: cancellationToken ).DynamicContext(); case ObjectTypes.Dict: - if (isEmpty) return Activator.CreateInstance(type!)!; - return await ReadDictAsync( + return isEmpty ? Activator.CreateInstance(type!)! : await ReadDictAsync( stream, type!, version, @@ -405,8 +438,6 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT res.Dispose(); throw; } - case ObjectTypes.ClrType: - return await ReadTypeAsync(stream, version, cancellationToken).DynamicContext(); default: throw new InvalidProgramException(); } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs index 3a9ccc8..0d82877 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs @@ -1,4 +1,5 @@ using System.Buffers; +using System.Diagnostics; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -118,9 +119,16 @@ ref itemSyncDeserializer arr[i] = (itemSerializer == SerializerTypes.Serializer ? (T?)(obj = ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool, valueOptions, itemSyncDeserializer)) : (T?)(obj = ReadAnyInt(stream, version.Value, objType, itemType, valueOptions)))!; - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - Logging.WriteInfo($"RED {obj}"); + if (obj!.GetObjectSerializerInfo().WriteObject) + { + objIndex = objectCache.IndexOf(null); + if (objIndex != -1) objectCache[objIndex] = obj!; + Logging.WriteInfo($"\t\tRED {obj} {stream.Position} {objIndex}"); + } + else + { + Logging.WriteInfo($"\t\tRED {obj} {stream.Position}"); + } } else { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs index abfc8a5..53a6777 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs @@ -1,4 +1,5 @@ using System.Buffers; +using System.Diagnostics; using System.Runtime.CompilerServices; using wan24.Core; @@ -231,35 +232,50 @@ ref StreamSerializer.Deserialize_Delegate? itemSyncDeserializer bool requireType; // Read the object type objType = (ObjectTypes)ReadOneByte(stream, version); + Logging.WriteInfo($"\tRED OBJECT TYPE {objType}"); if (objType == ObjectTypes.Null) return null; // Use the object cache if (objType == ObjectTypes.Cached) { + Logging.WriteInfo("\t\tUSING CACHE"); int objIndex = ReadOneByte(stream, version); + Logging.WriteInfo($"\t\tCACHE INDEX {objIndex}"); object? res = objectCache[objIndex] ?? throw new SerializerException($"Invalid object cache index #{objIndex}", new InvalidDataException()); itemType = res.GetType(); - objType = itemType.GetObjectSerializerInfo().ObjectType; + Logging.WriteInfo($"\t\tCACHED TYPE {itemType} {res}"); + objType = res.GetObjectSerializerInfo().ObjectType; (itemSerializer, itemSyncDeserializer, _) = itemType.GetItemDeserializerInfo(isAsync: false); lastObjType = objType; return res; } // Prepare the deserialization - lastObjType = objType.RequiresObjectWriting() ? objType : default; if (objType == ObjectTypes.LastItemType) { + Logging.WriteInfo($"\t\tUSING LAST OBJ TYPE {lastObjType}"); // Use the last object type - if (index == 0) throw new SerializerException($"Invalid object type for item #{index}", new InvalidDataException()); + if (index == 0) throw new SerializerException($"Invalid object type {objType} for item #{index}", new InvalidDataException()); requireType = false; } else { + Logging.WriteInfo("\t\tGETTING TYPE"); // Ensure correct deserializer informations + lastObjType = objType.RequiresObjectWriting() ? objType : default; requireType = objType.RequiresTypeName(); + Logging.WriteInfo($"\t\tREQUIRE TYPE {requireType}"); if (requireType) { // An object type is required + if (objType.IsBasicTypeInfo()) + { + Logging.WriteInfo($"\t\tUSING BASIC TYPE INFO"); + // Read a basic type information + itemType = new SerializedTypeInfo((ObjectTypes)stream.ReadOneByte(version)).ToSerializableType(); + objType &= ~ObjectTypes.BasicTypeInfo; + } if (objType.IsCached()) { + Logging.WriteInfo("\t\tUSING CACHE"); // Use a previously cached object type int typeIndex = ReadOneByte(stream, version); itemType = typeCache[typeIndex] ?? throw new SerializerException($"No type at cache index #{typeIndex}", new InvalidDataException()); @@ -268,13 +284,15 @@ ref StreamSerializer.Deserialize_Delegate? itemSyncDeserializer else { // Read the object type + Logging.WriteInfo("\t\tREADING TYPE"); itemType = ReadSerializableType(stream, version); + Logging.WriteInfo($"\t\tRED TYPE {itemType}"); if (!elementType.IsAssignableFrom(itemType) || itemType.IsAbstract || itemType.IsInterface || itemType == typeof(object)) throw new SerializerException($"Invalid item type {itemType} for item #{index} ({elementType})", new InvalidCastException()); int typeIndex = typeCache.AsReadOnly().IndexOf(null!); if (typeIndex != -1) typeCache[typeIndex] = itemType; - (itemSerializer, itemSyncDeserializer, _) = itemType.GetItemDeserializerInfo(isAsync: false); } + (itemSerializer, itemSyncDeserializer, _) = itemType.GetItemDeserializerInfo(isAsync: false); } else { @@ -338,27 +356,33 @@ CancellationToken cancellationToken int objIndex = await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); object? res = objectCache.Span[objIndex] ?? throw new SerializerException($"Invalid object cache index #{objIndex}", new InvalidDataException()); itemType = res.GetType(); - objType = itemType.GetObjectSerializerInfo().ObjectType; + objType = res.GetObjectSerializerInfo().ObjectType; (itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = itemType.GetItemDeserializerInfo(isAsync: false); lastObjType = objType; return (res, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer); } // Prepare the deserialization - lastObjType = objType.RequiresObjectWriting() ? objType : default; if (objType == ObjectTypes.LastItemType) { // Use the last object type - if (index == 0) throw new SerializerException($"Invalid object type for item #{index}", new InvalidDataException()); + if (index == 0) throw new SerializerException($"Invalid object type {objType} for item #{index}", new InvalidDataException()); requireType = false; } else { // Ensure correct deserializer informations + lastObjType = objType.RequiresObjectWriting() ? objType : default; requireType = objType.RequiresTypeName(); if (requireType) { // An object type (name) is required - if (objType.IsCached()) + if (objType.IsBasicTypeInfo()) + { + // Read a basic type information + itemType = new SerializedTypeInfo((ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext()).ToSerializableType(); + objType &= ~ObjectTypes.BasicTypeInfo; + } + else if (objType.IsCached()) { // Use a previously cached object type int typeIndex = await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); @@ -373,8 +397,8 @@ CancellationToken cancellationToken throw new SerializerException($"Invalid item type {itemType} for item #{index} ({elementType})", new InvalidCastException()); int typeIndex = typeCache.AsReadOnly().IndexOf(null!); if (typeIndex != -1) typeCache.Span[typeIndex] = itemType; - (itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = itemType.GetItemDeserializerInfo(isAsync: true); } + (itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = itemType.GetItemDeserializerInfo(isAsync: true); } else { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index acf46f6..dbb282d 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -46,6 +46,7 @@ public static Stream WriteAny(this Stream stream, object obj, ObjectTypes? objTy ObjectTypes.Short | ObjectTypes.Unsigned => Write(stream, (ushort)obj), ObjectTypes.String16 => WriteString16(stream, (string)obj), ObjectTypes.String32 => WriteString32(stream, (string)obj), + ObjectTypes.Serializable | ObjectTypes.CachedSerializable => Write(stream, obj.GetHashCode()), _ => objType.Value.IsNumber() ? WriteNumber(stream, obj) : WriteObject(stream, obj) @@ -104,6 +105,7 @@ public static async Task WriteAnyAsync( ObjectTypes.Short | ObjectTypes.Unsigned => await WriteAsync(stream, (ushort)obj, cancellationToken).DynamicContext(), ObjectTypes.String16 => await WriteString16Async(stream, (string)obj, cancellationToken).DynamicContext(), ObjectTypes.String32 => await WriteString32Async(stream, (string)obj, cancellationToken).DynamicContext(), + ObjectTypes.Serializable | ObjectTypes.CachedSerializable => await WriteAsync(stream, obj.GetHashCode(), cancellationToken).DynamicContext(), _ => objType.Value.IsNumber() ? await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext() : await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext() diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs index 3829b1b..6a47118 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs @@ -158,6 +158,7 @@ ref writeObject ); Logging.WriteInfo($"WRITE {i} {stream.Position} {objType} {(int)objType} {itemType}"); if (!isComplete) + { if (itemSerializer == SerializerTypes.Serializer) { WriteItem(stream, item, nullable: false, itemSerializer, itemSyncSerializer); @@ -166,6 +167,8 @@ ref writeObject { WriteAny(stream, item, objType, writeObject); } + Logging.WriteInfo($"\t\tWROTE {stream.Position}"); + } } } finally diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs index c572270..b7ed17c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs @@ -214,14 +214,16 @@ ref bool writeObject { // Use the object cache var info = ((object)item).GetObjectSerializerInfo(); + Logging.WriteInfo($"\tWRITE ITEM {info.Type} {info.ObjectType} {info.WriteType} {info.WriteObject}"); if (info.WriteObject) { - int ohc = item.GetHashCode(), + Logging.WriteInfo("\t\tUSING CACHE"); + int ohc = item.GetHashCode()^info.Type.GetHashCode(), objIndex = objectCache.IndexOf(ohc); if (objIndex != -1) { - objType = ObjectTypes.Cached; - Write(stream, (byte)objType); + Logging.WriteInfo($"\t\tUSING CACHED OBJECT {objIndex}"); + Write(stream, (byte)ObjectTypes.Cached); Write(stream, (byte)objIndex); objType = info.ObjectType; writeObject = info.WriteObject; @@ -232,41 +234,60 @@ ref bool writeObject else { objIndex = objectCache.IndexOf(0); + Logging.WriteInfo($"\t\tCACHE {info.Type} {item} TO {objIndex}"); if (objIndex != -1) objectCache[objIndex] = ohc; } } // Write the type information if (itemType == lastItemType) { + Logging.WriteInfo($"\t\tUSE LAST ITEM TYPE {lastItemType}"); // Use the last object type Write(stream, (byte)ObjectTypes.LastItemType); } else { + Logging.WriteInfo("\t\tWRITE DETAILS"); // Write object type details objType = info.ObjectType; writeObject = info.WriteObject; (itemSerializer, itemSyncSerializer, _) = itemType.GetItemSerializerInfo(isAsync: false); if (info.WriteType) { + Logging.WriteInfo("\t\tWRITE TYPE INFO"); + //TODO Use the type cache only, if the type information can't be written in a single byte + //TODO For array/list/dictionary write the key/value type(s) only - when reading, use them to construct the target type // Write type detail informations - int thc = itemType.GetHashCode(), - typeIndex = typeCache.IndexOf(thc); - if (typeIndex != -1) + SerializedTypeInfo ti = itemType; + if (ti.IsBasicType) { - // Use the cached type - objType |= ObjectTypes.Cached; - Write(stream, (byte)objType); - Write(stream, (byte)typeIndex); + // Don't use the type cache + Logging.WriteInfo($"WRITE BASIC TYPE INFO TO THE CACHE"); + Write(stream, (byte)(objType | ObjectTypes.BasicTypeInfo)); + Write(stream, (byte)ti.ObjectType); } else { - // Update the cache - typeIndex = typeCache.IndexOf(0); - if (typeIndex != -1) typeCache[typeIndex] = thc; - // Write the type informations - Write(stream, (byte)objType); - Write(stream, itemType); + int thc = itemType.GetHashCode(), + typeIndex = typeCache.IndexOf(thc); + if (typeIndex != -1) + { + Logging.WriteInfo($"\t\tUSE CACHED TYPE {typeIndex}"); + // Use the cached type + objType |= ObjectTypes.Cached; + Write(stream, (byte)objType); + Write(stream, (byte)typeIndex); + } + else + { + // Update the cache + typeIndex = typeCache.IndexOf(0); + Logging.WriteInfo($"WRITE TO CACHE {typeIndex}"); + if (typeIndex != -1) typeCache[typeIndex] = thc; + // Write the type informations + Write(stream, (byte)objType); + Write(stream, itemType); + } } } else @@ -322,12 +343,11 @@ CancellationToken cancellationToken var info = ((object)item).GetObjectSerializerInfo(); if (info.WriteObject) { - int ohc = item.GetHashCode(), + int ohc = item.GetHashCode() ^ info.Type.GetHashCode(), objIndex = objectCache.IndexOf(ohc); if (objIndex != -1) { - objType = ObjectTypes.Cached; - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)ObjectTypes.Cached, cancellationToken).DynamicContext(); await WriteAsync(stream, (byte)objIndex, cancellationToken).DynamicContext(); objType = info.ObjectType; writeObject = info.WriteObject; @@ -356,23 +376,34 @@ CancellationToken cancellationToken if (info.WriteType) { // Write type detail informations - int thc = itemType.GetHashCode(), - typeIndex = typeCache.Span.IndexOf(thc); - if (typeIndex != -1) + SerializedTypeInfo ti = itemType; + if (ti.IsBasicType) { - // Use the cached type - objType |= ObjectTypes.Cached; - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); - await WriteAsync(stream, (byte)typeIndex, cancellationToken).DynamicContext(); + // Don't use the type cache + Logging.WriteInfo($"WRITE BASIC TYPE INFO TO THE CACHE"); + await WriteAsync(stream, (byte)(objType | ObjectTypes.BasicTypeInfo), cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)ti.ObjectType, cancellationToken).DynamicContext(); } else { - // Update the cache - typeIndex = typeCache.Span.IndexOf(0); - if (typeIndex != -1) typeCache.Span[typeIndex] = thc; - // Write the type informations - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); - await WriteAsync(stream, itemType, cancellationToken).DynamicContext(); + int thc = itemType.GetHashCode(), + typeIndex = typeCache.Span.IndexOf(thc); + if (typeIndex != -1) + { + // Use the cached type + objType |= ObjectTypes.Cached; + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)typeIndex, cancellationToken).DynamicContext(); + } + else + { + // Update the cache + typeIndex = typeCache.Span.IndexOf(0); + if (typeIndex != -1) typeCache.Span[typeIndex] = thc; + // Write the type informations + await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); + await WriteAsync(stream, itemType, cancellationToken).DynamicContext(); + } } } else diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs index 8fd915e..cee47e4 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs @@ -13,7 +13,7 @@ public static partial class StreamExtensions /// Stream /// Type /// Stream - public static Stream Write(this Stream stream, Type type) => WriteSerialized(stream, new SerializedTypeInfo(type)); + public static Stream Write(this Stream stream, Type type) => WriteSerialized(stream, SerializedTypeInfo.From(type)); /// /// Write @@ -23,7 +23,7 @@ public static partial class StreamExtensions /// Cancellation token /// Stream public static Task WriteAsync(this Stream stream, Type type, CancellationToken cancellationToken = default) - => WriteSerializedAsync(stream, new SerializedTypeInfo(type), cancellationToken); + => WriteSerializedAsync(stream, SerializedTypeInfo.From(type), cancellationToken); /// /// Write diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index 381e8a5..6987f02 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -2,10 +2,12 @@ using System.Collections; using System.Collections.Concurrent; using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; -using System.Diagnostics; + +//TODO Test type cache +//TODO Remove ArrayPool arguments from reading methods namespace wan24.StreamSerializerExtensions { @@ -291,6 +293,11 @@ static StreamSerializer() /// public static ArrayPool BufferPool { get; set; } = ArrayPool.Shared; + /// + /// Is the type cache enabled? + /// + public static bool TypeCacheEnabled { get; private set; } + /// /// Find a serializer /// @@ -465,6 +472,29 @@ orderby c.GetParametersCached().Length descending ?? throw new SerializerException($"Failed to instance {type}", new InvalidProgramException()); } + /// + /// Enable the type cache (CAUTION: Calling this method will ensure that the wan24-Core bootstrapper did run! A call during bootstrapping will cause an exception) + /// + /// Can't be called during bootstrapping + public static void EnableTypeCache() + { + if (TypeCacheEnabled) return; + TypeCacheEnabled = true; + if (!Bootstrap.DidBoot) + { + if (Bootstrap.IsBooting) throw new InvalidOperationException("Can't be called during bootstrapping"); + Bootstrap.Async().Wait(); + } + Type streamSerializer = typeof(IStreamSerializer); + foreach (Type type in from ass in TypeHelper.Instance.Assemblies + from t in ass.GetTypes() + where !t.IsInterface && + !t.IsAbstract && + streamSerializer.IsAssignableFrom(t) + select t) + TypeCache.Types[type.GetHashCode()] = type; + } + /// /// Create an instance /// From e28c5cfc8a84807a9efe94b024db3a67841e912f Mon Sep 17 00:00:00 2001 From: nd Date: Sun, 9 Jul 2023 22:46:01 +0200 Subject: [PATCH 15/17] Update * Methods use a context now, replacing serializer version and cancellation token arguments * Contains "unsafe" code now + Added `SerializerHelper.IsZero` and `SerializerHelper.IsBreak` extensions for `ObjectTypes` + Added `SequenceTypes` for context based cache usage informations + Added `SerializerContextBase`, `SerializerContext`, `DeserializerContext`, `ISerializerContext`, `ISerializationContext` and `IDeserializationContext` + Added `ItemSerializerContext` and `ItemDeserializerContext` + Added `SerializerHelper.GetClrType` extension for `NumberTypes` + Added new project `Strem-Serializer-Extensions-Full`, which will contain advanced serialization tools - Fixed a bug in `StreamSeralizer.IsTypeAllowed`: Types with a `StreamSerializerAttribute` are now allowed per default --- README.md | 129 +- docs/api/toc.html | 62 +- .../wan24.StreamSerializerExtensions..html | 177 + ...Extensions.AutoStreamSerializerBase-1.html | 167 +- ...tensions.AutoStreamSerializerConfig-1.html | 100 +- ...alizerInfo.AsyncDeserializer_Delegate.html | 28 +- ...rializerInfo.AsyncSerializer_Delegate.html | 24 +- ...mSerializerInfo.Deserializer_Delegate.html | 22 +- ...eamSerializerInfo.Serializer_Delegate.html | 18 +- ...erExtensions.AutoStreamSerializerInfo.html | 88 +- ...erExtensions.DefaultSerializerOptions.html | 28 +- ...ializerExtensions.DeserializerContext.html | 1056 ++ ...s.DeserializerContextFluentExtensions.html | 305 + ....DisposableAutoStreamSerializerBase-1.html | 198 +- ...nsions.DisposableStreamSerializerBase.html | 311 +- ...numerator.StreamAsyncEnumeratorBase-1.html | 234 +- ...ons.Enumerator.StreamEnumeratorBase-1.html | 198 +- ...merator.StreamNumberAsyncEnumerator-1.html | 215 +- ...s.Enumerator.StreamNumberEnumerator-1.html | 200 +- ...tor.StreamSerializerAsyncEnumerator-1.html | 129 +- ...umerator.StreamSerializerEnumerator-1.html | 122 +- ...numerator.StreamStringAsyncEnumerator.html | 197 +- ...ons.Enumerator.StreamStringEnumerator.html | 182 +- ...lizerExtensions.IAutoStreamSerializer.html | 18 +- ...xtensions.IAutoStreamSerializerConfig.html | 8 +- ...zerExtensions.IDeserializationContext.html | 843 ++ ...lizerExtensions.ISerializationContext.html | 828 ++ ...rializerExtensions.ISerializerContext.html | 720 + ...rializerExtensions.ISerializerOptions.html | 164 +- ...erializerExtensions.IStreamSerializer.html | 94 +- ...erExtensions.IStreamSerializerVersion.html | 18 +- ...zerExtensions.ItemDeserializerContext.html | 803 ++ ...lizerExtensions.ItemSerializerContext.html | 999 ++ ...treamSerializerExtensions.NumberTypes.html | 20 +- ...treamSerializerExtensions.ObjectTypes.html | 114 +- ...eamSerializerExtensions.SequenceTypes.html | 182 + ...rializerExtensions.SerializedTypeInfo.html | 1370 ++ ...erializerExtensions.SerializerContext.html | 1187 ++ ...lizerExtensions.SerializerContextBase.html | 917 ++ ...lizerExtensions.SerializerEventArgs-1.html | 6 +- ...ializerExtensions.SerializerException.html | 6 +- ...SerializerExtensions.SerializerHelper.html | 1501 +- ...lizerExtensions.SerializerOptionsBase.html | 156 +- ...ons.SerializerOptionsFluentExtensions.html | 304 + ...mSerializerExtensions.SerializerTypes.html | 237 + ...tensions.AsyncNullableWriter_Delegate.html | 155 + ...ons.AsyncStreamNullableWiter_Delegate.html | 174 + ...eamExtensions.NullableWriter_Delegate.html | 140 + ...tensions.StreamNullableWiter_Delegate.html | 174 + ...SerializerExtensions.StreamExtensions.html | 11735 +++++++++------- ...Serializer.AsyncDeserializer_Delegate.html | 180 + ...amSerializer.AsyncSerializer_Delegate.html | 179 + ...treamSerializer.Deserializer_Delegate.html | 180 + ...alizer.FindAsyncDeserializer_Delegate.html | 12 +- ...rializer.FindAsyncSerializer_Delegate.html | 12 +- ...ializer.FindSyncDeserializer_Delegate.html | 12 +- ...erializer.FindSyncSerializer_Delegate.html | 12 +- ...nsions.StreamSerializer.Init_Delegate.html | 8 +- ...amSerializer.InstanceFactory_Delegate.html | 28 +- ...ns.StreamSerializer.LoadType_Delegate.html | 8 +- ....StreamSerializer.Serializer_Delegate.html | 164 + ...SerializerExtensions.StreamSerializer.html | 274 +- ...zerExtensions.StreamSerializerAdapter.html | 50 +- ...ute.SerializerOptionsFactory_Delegate.html | 30 +- ...lizerAttribute.StreamFactory_Delegate.html | 26 +- ...rExtensions.StreamSerializerAttribute.html | 252 +- ...alizerExtensions.StreamSerializerBase.html | 258 +- ...lizerExtensions.StreamSerializerModes.html | 6 +- ...erializerExtensions.TypeLoadEventArgs.html | 6 +- .../api/wan24.StreamSerializerExtensions.html | 64 +- docs/index.html | 249 +- docs/manifest.json | 338 +- docs/xrefmap.yml | 10609 +++++++++----- .../index.md | 163 +- src/Stream-Serializer-Extensions Docs/log.txt | 9 + .../A_Initialization.cs | 3 + .../StreamSerializer_Tests.cs | 1 - src/Stream-Serializer-Extensions-Full/LICENSE | 21 + .../README.md | 610 + .../Stream-Serializer-Extensions-Full.csproj | 58 + src/Stream-Serializer-Extensions.sln | 8 + .../AutoStreamSerializerBase.cs | 10 +- .../AutoStreamSerializerConfig.cs | 48 +- .../AutoStreamSerializerInfo.cs | 103 +- .../ContextRecursion.cs | 26 + .../DeserializerContext.cs | 384 + .../DeserializerContextFluentExtensions.cs | 43 + .../DisposableAutoStreamSerializerBase.cs | 10 +- .../DisposableStreamSerializerBase.cs | 110 +- .../Enumerator/StreamAsyncEnumeratorBase.cs | 40 +- .../Enumerator/StreamEnumeratorBase.cs | 33 +- .../Enumerator/StreamNumberAsyncEnumerator.cs | 29 +- .../Enumerator/StreamNumberEnumerator.cs | 24 +- .../StreamSerializerAsyncEnumerator.cs | 8 +- .../Enumerator/StreamSerializerEnumerator.cs | 7 +- .../Enumerator/StreamStringAsyncEnumerator.cs | 33 +- .../Enumerator/StreamStringEnumerator.cs | 22 +- .../IDeserializationContext.cs | 79 + .../ISerializationContext.cs | 77 + .../ISerializerContext.cs | 90 + .../IStreamSerializer.cs | 20 +- .../ItemDeserializerContext.cs | 154 + .../ItemSerializerContext.cs | 165 + .../NumberTypes.cs | 4 +- .../ObjectTypes.cs | 10 +- src/Stream-Serializer-Extensions/README.md | 129 +- .../SequenceTypes.cs | 33 + .../SerializedTypeInfo.IStreamSerializer.cs | 124 +- .../SerializedTypeInfo.cs | 18 +- .../SerializerContext.cs | 658 + .../SerializerContextBase.cs | 133 + .../SerializerHelper.NumberTypes.cs | 361 + .../SerializerHelper.ObjectTypes.cs | 366 + .../SerializerHelper.Reflection.cs | 61 + .../SerializerHelper.SerializerTypes.cs | 79 + .../SerializerHelper.Type.cs | 58 + .../SerializerHelper.cs | 848 +- .../SerializerOptionsBase.cs | 4 +- .../SerializerTypes.cs | 6 +- .../Stream-Serializer-Extensions.csproj | 1 + .../StreamExtensions.Enumerate.cs | 100 +- .../StreamExtensions.Read.Any.cs | 309 +- .../StreamExtensions.Read.Array.cs | 193 +- .../StreamExtensions.Read.Basic.cs | 584 +- .../StreamExtensions.Read.Bytes.cs | 141 +- .../StreamExtensions.Read.Dictionary.cs | 625 +- .../StreamExtensions.Read.Enum.cs | 135 +- .../StreamExtensions.Read.FixedArray.cs | 525 +- .../StreamExtensions.Read.Items.cs | 427 +- .../StreamExtensions.Read.List.cs | 424 +- .../StreamExtensions.Read.Number.cs | 351 +- .../StreamExtensions.Read.Object.cs | 601 +- .../StreamExtensions.Read.Serialized.cs | 114 +- .../StreamExtensions.Read.Stream.cs | 107 +- .../StreamExtensions.Read.String.cs | 286 +- .../StreamExtensions.Read.Struct.cs | 69 +- .../StreamExtensions.Read.Type.cs | 112 +- .../StreamExtensions.Read.cs | 45 +- .../StreamExtensions.SerializationContext.cs | 39 + .../StreamExtensions.Write.Any.cs | 112 +- .../StreamExtensions.Write.Array.cs | 44 +- .../StreamExtensions.Write.Basic.cs | 505 +- .../StreamExtensions.Write.Bytes.cs | 54 +- .../StreamExtensions.Write.Dictionary.cs | 381 +- .../StreamExtensions.Write.Enum.cs | 80 +- .../StreamExtensions.Write.FixedArray.cs | 345 +- .../StreamExtensions.Write.Items.cs | 414 +- .../StreamExtensions.Write.List.cs | 207 +- .../StreamExtensions.Write.Number.cs | 145 +- .../StreamExtensions.Write.Object.cs | 216 +- .../StreamExtensions.Write.Serialized.cs | 108 +- .../StreamExtensions.Write.Stream.cs | 73 +- .../StreamExtensions.Write.String.cs | 222 +- .../StreamExtensions.Write.Struct.cs | 84 +- .../StreamExtensions.Write.Type.cs | 38 +- .../StreamExtensions.Write.cs | 185 +- .../StreamSerializer.Serializer.cs | 330 + .../StreamSerializer.cs | 472 +- .../StreamSerializerAdapter.cs | 27 +- .../StreamSerializerAttribute.cs | 88 +- .../StreamSerializerBase.cs | 97 +- 161 files changed, 35997 insertions(+), 18718 deletions(-) create mode 100644 docs/api/wan24.StreamSerializerExtensions..html create mode 100644 docs/api/wan24.StreamSerializerExtensions.DeserializerContext.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.IDeserializationContext.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.ISerializationContext.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.ISerializerContext.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.ItemSerializerContext.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.SequenceTypes.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.SerializerContext.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.SerializerContextBase.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.SerializerTypes.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate.html create mode 100644 docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.html create mode 100644 src/Stream-Serializer-Extensions-Full/LICENSE create mode 100644 src/Stream-Serializer-Extensions-Full/README.md create mode 100644 src/Stream-Serializer-Extensions-Full/Stream-Serializer-Extensions-Full.csproj create mode 100644 src/Stream-Serializer-Extensions/ContextRecursion.cs create mode 100644 src/Stream-Serializer-Extensions/DeserializerContext.cs create mode 100644 src/Stream-Serializer-Extensions/DeserializerContextFluentExtensions.cs create mode 100644 src/Stream-Serializer-Extensions/IDeserializationContext.cs create mode 100644 src/Stream-Serializer-Extensions/ISerializationContext.cs create mode 100644 src/Stream-Serializer-Extensions/ISerializerContext.cs create mode 100644 src/Stream-Serializer-Extensions/ItemDeserializerContext.cs create mode 100644 src/Stream-Serializer-Extensions/ItemSerializerContext.cs create mode 100644 src/Stream-Serializer-Extensions/SequenceTypes.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerContext.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerContextBase.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerHelper.NumberTypes.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerHelper.ObjectTypes.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerHelper.Reflection.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerHelper.SerializerTypes.cs create mode 100644 src/Stream-Serializer-Extensions/SerializerHelper.Type.cs create mode 100644 src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs create mode 100644 src/Stream-Serializer-Extensions/StreamSerializer.Serializer.cs diff --git a/README.md b/README.md index 3d165e8..c85de16 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ The built in serializer supports binary serialization of - dictionaries - byte arrays - structures -- possibly any other objects with a parameterless public constructor -- streams +- possibly any other types +- streams (embedded) - CLR type informations and exports an asynchronous fluent API for writing operations, too. @@ -29,39 +29,93 @@ binary serializable with backward compatibility, easily. The serializer is designed to produce only a minimum of absolutely required overhead, which sometimes can result in even less data, too (compared to -usually used serialization methods). +usually used serialization methods). The produced binary sequences are + +- processor architecture independent +- platform independent +- runtime independent +- language independent +- type and type version safe +- compatible with newer serializer versions +- as small as possible (trade off between complexity <-> performance <-> size) +- using aggressive caching + +In theory it'd by possible to deserialize a binary sequence using a language +such as JavaScript or C++. However, at present there's only a .NET +implementation of the (de)serializer available. + +**NOTE**: The deserialized type must be present at the processing computer. +The deserializer won't create anonymous types. Only for deserializing CLR type +informations there's a type implemented which can be used to browse the +seqenced CLR type informations before trying to get a `Type` instance, finally. + +Most people think of object serialization, but this library can be used to +deserialize any binary sequence, and also a text format (which is an encoded +binary sequence at a higher level) may be parsed as well. And since a stream +is a quiet abstract type, the output/input must not be a file all the time. +Using some creativity just everything can be serialized or deserialized and +target any stream consuming interface. The API is fully synchronous and asynchronous - you choose depending on the used stream type. +**TIP**: Because often very tiny sequences will be written/red, you may want +to use a buffering stream to gain more performance! Streams will be accessed +non-seeking and sequential only. + Cold storage of serialized sequences can be challenging. Using the build in sequencer versioning you can ensure that a sequence can be deserialized at any time after a component was updated. -## Methods +## How to get it + +This library is available as +[NuGet package "Stream-Serializer-Extensions"](https://www.nuget.org/packages/Stream-Serializer-Extensions/). + +There's also another +[NuGet package "Stream-Serializer-Extensions-Full"](https://www.nuget.org/packages/Stream-Serializer-Extensions-Full/), +which contains advanced serialization tools. -The `Write` and `WriteAsync` methods will be extended with supported types, -while serializing some types is being done with specialized methods: +## Methods -| Type | Serialization method | Deserialization method | +| Type | Serialization | Deserialization | | --- | --- | --- | -| `string` | `WriteString*` | `ReadString*` | -| `Enum` | `WriteEnum*` | `ReadEnum*` | -| `Array` | `Write*Array*` | `Read*Array*` | -| `List` | `WriteList*` | `ReadList*` | -| `Dictionary` | `WriteDict*` | `ReadDict*` | -| `IStreamSerializer` | `WriteSerialized*` | `ReadSerialized*` | -| `byte[]` | `WriteBytes*` | `ReadBytes*` | -| `Stream` | `WriteStream*` | `ReadStream*` | -| Structure | `WriteStruct*` | `ReadStruct*` | -| (any other) | `WriteAnyObject*` | `ReadAnyObject*` | +| `bool` | `Write` | `ReadBool` | +| `sbyte` | `Write` | `ReadOneSByte` | +| `byte` | `Write` | `ReadOneByte` | +| `short` | `Write` | `ReadShort` | +| `ushort` | `Write` | `ReadUShort` | +| `int` | `Write` | `ReadInt` | +| `uint` | `Write` | `ReadUInt` | +| `long` | `Write` | `ReadLong` | +| `ulong` | `Write` | `ReadULong` | +| `float` | `Write` | `ReadFloat` | +| `double` | `Write` | `ReadDouble` | +| `decimal` | `Write` | `ReadDecimal` | +| (U)Int 8-64, `float`, `double`, `decimal` | `WriteNumber` | `ReadNumber` | +| `Enum` | `WriteEnum` | `ReadEnum` | +| `byte[]` | `WriteBytes` | `ReadBytes` | +| `string` (UTF-8) | `WriteString` | `ReadString` | +| `string` (UTF-16) | `WriteString16` | `ReadString16` | +| `string` (UTF-32) | `WriteString32` | `ReadString32` | +| `IStreamSerializer` (class) | `WriteSerialized` | `ReadSerialized` | +| `IStreamSerializer` (structure) | `WriteSerializedStruct` | `ReadSerializedStruct` | +| Structures | `WriteStruct` | `ReadStruct` | +| `Array` (variable length) | `WriteArray` | `ReadArray` | +| `Array` (fixed length) | `WriteFixedArray` | `ReadFixedArray` | +| `IList` | `WriteList` | `ReadList` | +| `IDictionary` | `WriteDict` | `ReadDict` | +| `Stream` | `WriteStream` | `ReadStream` | +| `Type` | `WriteType` | `ReadType` | + +**NOTE**: In general you should use the opposite method for reading a binary +sequence that you've used for writing it! For all methods there is an `*Async` +version also. Use the `*Nullable*` methods for writing/reading nullable +values. Some may have to add an extra byte for `null` detection. Using the `WriteObject*` and `ReadObject*` methods you can let the library decide which method to use for the given object type. -Using the `WriteAny*` and `ReadAny*` methods, you can write and read an object -with a dynamic type. - Using the `WriteAnyObject*` and `ReadAnyObject*` methods you can also (de)serialize objects which have a constructor without parameters. The serializer will process public properties which have a public getter and @@ -69,18 +123,15 @@ setter. If in the future the object changes, it's not possible to deserialize an older binary sequence, unless you work with the `StreamSerializerAttribute` and set an object version to the type and its properties. -**NOTE**: Please use the `*Nullable*` methods for working with nullables. -They'll add an extra byte for `null` value detection. - -**NOTE**: In general you should use the opposite method for reading a binary -sequence that you've used for writing it! +Using the `WriteAny*` and `ReadAny*` methods, you can write and read an object +with a dynamic type. Most methods are designed specially for one type, while other methods work more generic. This is when to choose which method: | Method | Condition | | --- | --- | -| `*Serialized*` | The fixed type is a stream serializer base object | +| `*Serialized*` | The fixed type implements `IStreamSerializer` | | `*Object*` | The fixed type has a specialized serializer | | `*Struct*` | The fixed type is a marshalable structure | | `*AnyObject*` | The type uses attributes (or no serializer contract information at all) and doesn't have a specialized serializer | @@ -104,7 +155,7 @@ data. Seekable streams will just be copied, having their length as header, while non-seekable streams will be embedded chunked. When deserializing an embedded stream using generic read-methods (like -`ReadObject` or `ReadAny`), a temporary `FileStream` will be created, which +`ReadObject` or `ReadAny`), a temporary `TempStream` will be created, which will delete the temporary file when disposing. You can define a stream factory using `StreamSerializerAttribute.StreamFactoryType` and `StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom @@ -508,8 +559,8 @@ These enumerators are implemented at present: ## Type cache By calling `StreamSerializer.EnableTypeCache()`, you can use a type cache, -which enables the serializer to write type information about types with -implement the `IStreamSerializer` interface using only 4 bytes. For this all +which enables the serializer to write type information about types which +implement the `IStreamSerializer` interface using only 6 bytes. For this all matching types will be stored in the `wan24.Core.TypeCache`. **CAUTION**: Calling this method will ensure that the `wan24-Core` @@ -522,11 +573,19 @@ opposite isn't a problem. **CAUTION**: Because the type cache uses the types hash code, you shouldn't use this feature, if you want to cold store a sequence, or if if the -deserializing peer may know a different version if the type. +deserializing peer may know a different version if the type: If the type +changes, its hash code may change! + +## Stream-Serializer-Extensions-Full + +This library is an add-on which contains advanced serialization tools: -When using the type cache, every `IStreamSerializer` type information can be -written using only about 7 bytes. Without the type cache, the information will -contain much more bytes, depending on the type properties. +- `SerializerStream` which manages a `SerializerContext` and/or +`DeserializerContext` and has its own extension methods without the context +argument +- `Write/ReadAll` extensions for writing/reading a type sequence +- `ReadUntil` extension for reading until any byte sequence (requires a +seekable stream!) ## Security @@ -552,7 +611,7 @@ could harm your computer! The job of the serializer is to write and read objects to/from a binary sequence. There's no compression, encryption or hashing built in. If you want to compress/protect a created binary sequence, you can apply compression, -encryption and hashing on the result as you want. +encryption and hashing on the result as you need. Object validation will be applied to deserialized objects to ensure their -validity. +validity (using `ObjectValidation`). diff --git a/docs/api/toc.html b/docs/api/toc.html index 746835c..621bb25 100644 --- a/docs/api/toc.html +++ b/docs/api/toc.html @@ -17,6 +17,9 @@ wan24.StreamSerializerExtensions diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html index 6a8a489..3a6cf7b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate Task AsyncSerializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object value, Stream stream, CancellationToken cancellationToken);
    +
    public delegate Task AsyncSerializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object value, ISerializationContext context);
    Parameters
    @@ -113,19 +113,13 @@
    Parameters
    - - - - - - - - - + + @@ -146,6 +140,9 @@
    Returns
    System.Object value

    Value to serialize

    +

    Value

    Streamstream

    Stream

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Extension Methods

    +
    @@ -155,9 +152,6 @@

    Extension Methods

    - @@ -169,7 +163,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html index 330d957..e1d00c2 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate object Deserializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, Stream stream, int version);
    +
    public delegate object Deserializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, IDeserializationContext context);
    Parameters
    @@ -111,15 +111,9 @@
    Parameters
    - - - - - - - - + + @@ -141,6 +135,9 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    Extension Methods

    +
    @@ -150,9 +147,6 @@

    Extension Methods

    - @@ -164,7 +158,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html index e552536..2855c05 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate void Serializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object value, Stream stream);
    +
    public delegate void Serializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object value, ISerializationContext context);
    Parameters
    @@ -113,18 +113,21 @@
    Parameters
    - - - - + +
    System.Object value

    Value to serialize

    +

    Value

    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    Extension Methods

    +
    @@ -134,9 +137,6 @@

    Extension Methods

    - @@ -148,7 +148,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html index 4b20d00..2be2466 100644 --- a/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html +++ b/docs/api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html @@ -115,13 +115,13 @@

    Constructors

    | - Improve this Doc + Improve this Doc View Source -

    AutoStreamSerializerInfo(PropertyInfoExt)

    +

    AutoStreamSerializerInfo(PropertyInfoExt)

    Constructor

    @@ -140,7 +140,7 @@
    Parameters
    - wan24.Core.PropertyInfoExt + PropertyInfoExt property

    Property

    @@ -330,7 +330,7 @@
    Property Value
    - wan24.Core.PropertyInfoExt + PropertyInfoExt @@ -370,19 +370,19 @@

    Methods

    | - Improve this Doc + Improve this Doc View Source -

    Deserialize<T>(IAutoStreamSerializerConfig, T, Stream, Int32)

    +

    Deserialize<T>(IAutoStreamSerializerConfig, T, IDeserializationContext)

    Deserialize

    Declaration
    -
    public void Deserialize<T>(IAutoStreamSerializerConfig config, T obj, Stream stream, int version)
    +    
    public void Deserialize<T>(IAutoStreamSerializerConfig config, T obj, IDeserializationContext context)
         where T : IAutoStreamSerializer
    Parameters
    @@ -408,15 +408,9 @@
    Parameters
    - Stream - stream -

    Stream

    - - - - System.Int32 - version -

    Serializer version

    + IDeserializationContext + context +

    Context

    @@ -439,19 +433,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DeserializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken)

    +

    DeserializeAsync<T>(IAutoStreamSerializerConfig, T, IDeserializationContext)

    Deserialize

    Declaration
    -
    public async Task DeserializeAsync<T>(IAutoStreamSerializerConfig config, T obj, Stream stream, int version, CancellationToken cancellationToken)
    +    
    public async Task DeserializeAsync<T>(IAutoStreamSerializerConfig config, T obj, IDeserializationContext context)
         where T : IAutoStreamSerializer
    Parameters
    @@ -477,21 +471,9 @@
    Parameters
    - Stream - stream -

    Stream

    - - - - System.Int32 - version -

    Serializer version

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -529,19 +511,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc View Source -

    Serialize<T>(IAutoStreamSerializerConfig, T, Stream)

    +

    Serialize<T>(IAutoStreamSerializerConfig, T, ISerializationContext)

    Serialize

    Declaration
    -
    public void Serialize<T>(IAutoStreamSerializerConfig config, T obj, Stream stream)
    +    
    public void Serialize<T>(IAutoStreamSerializerConfig config, T obj, ISerializationContext context)
         where T : IAutoStreamSerializer
    Parameters
    @@ -567,9 +549,9 @@
    Parameters
    - Stream - stream -

    Stream

    + ISerializationContext + context +

    Context

    @@ -592,19 +574,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc View Source -

    SerializeAsync<T>(IAutoStreamSerializerConfig, T, Stream, CancellationToken)

    +

    SerializeAsync<T>(IAutoStreamSerializerConfig, T, ISerializationContext)

    Serialize

    Declaration
    -
    public async Task SerializeAsync<T>(IAutoStreamSerializerConfig config, T obj, Stream stream, CancellationToken cancellationToken)
    +    
    public async Task SerializeAsync<T>(IAutoStreamSerializerConfig config, T obj, ISerializationContext context)
         where T : IAutoStreamSerializer
    Parameters
    @@ -630,15 +612,9 @@
    Parameters
    - Stream - stream -

    Stream

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -675,6 +651,9 @@
    Type Parameters

    Extension Methods

    + @@ -684,9 +663,6 @@

    Extension Methods

    - diff --git a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html index 4fe7dcc..0cc4056 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html @@ -94,6 +94,18 @@
    Inherited Members
    + + + + @@ -138,19 +150,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc View Source -

    DefaultSerializerOptions(PropertyInfoExt, StreamSerializerAttribute)

    +

    DefaultSerializerOptions(Nullable<PropertyInfoExt>, StreamSerializerAttribute)

    Constructor

    Declaration
    -
    public DefaultSerializerOptions(PropertyInfoExt property, StreamSerializerAttribute attr = null)
    +
    public DefaultSerializerOptions(PropertyInfoExt? property, StreamSerializerAttribute attr = null)
    Parameters
    @@ -163,7 +175,7 @@
    Parameters
    - + @@ -181,6 +193,9 @@

    Implements

    ISerializerOptions

    Extension Methods

    + @@ -191,7 +206,10 @@

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) + diff --git a/docs/api/wan24.StreamSerializerExtensions.DeserializerContext.html b/docs/api/wan24.StreamSerializerExtensions.DeserializerContext.html new file mode 100644 index 0000000..7fce47c --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.DeserializerContext.html @@ -0,0 +1,1056 @@ + + + + + + + + Class DeserializerContext + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    +
    wan24.Core.PropertyInfoExtSystem.Nullable<PropertyInfoExt> property

    Target property

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream (won't be disposed)

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Nullable<System.Int32>cacheSize

    Cache size

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +

    Fields +

    + + | + Improve this Doc + + + View Source + +

    _Cache

    +

    Cache

    +
    +
    +
    Declaration
    +
    +
    protected object[] _Cache
    +
    +
    Field Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Object[]
    +

    Properties +

    + + | + Improve this Doc + + + View Source + + +

    Cache

    +

    Cache

    +
    +
    +
    Declaration
    +
    +
    public Memory<object> Cache { get; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    Memory<System.Object>
    + + | + Improve this Doc + + + View Source + + +

    CacheSize

    +

    Cache size (zero to (temporary?) disable caching)

    +
    +
    +
    Declaration
    +
    +
    public override int CacheSize { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Int32
    +
    Overrides
    + + + | + Improve this Doc + + + View Source + + +

    Options

    +

    Options

    +
    +
    +
    Declaration
    +
    +
    public ISerializerOptions Options { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    ISerializerOptions
    +

    Methods +

    + + | + Improve this Doc + + + View Source + + +

    AddToCache<T>(T)

    +

    Add an object to the cache

    +
    +
    +
    Declaration
    +
    +
    public T AddToCache<T>(T obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    Tobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    T

    Object

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    Dispose(Boolean)

    +
    +
    +
    Declaration
    +
    +
    protected override void Dispose(bool disposing)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.Booleandisposing
    + + | + Improve this Doc + + + View Source + + +

    TryReadCached<T>(out T)

    +

    Try to read an object cached

    +
    +
    +
    Declaration
    +
    +
    public bool TryReadCached<T>(out T obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    Tobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Succeed?

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    TryReadCachedAsync<T>()

    +

    Try to read an object cached

    +
    +
    +
    Declaration
    +
    +
    public async Task<(bool Succeed, T Object)> TryReadCachedAsync<T>()
    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.ValueTuple<System.Boolean, T>>

    If succeed and the object

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    TryReadCachedNumber<T>(out Nullable<T>, Boolean)

    +

    Try to read a number cached

    +
    +
    +
    Declaration
    +
    +
    public bool TryReadCachedNumber<T>(out T? obj, bool readType = false)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.Nullable<T>obj

    Number

    +
    System.BooleanreadType

    Read the type flags?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Succeed?

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    TryReadCachedNumberAsync<T>(Boolean)

    +

    Try to read a number cached

    +
    +
    +
    Declaration
    +
    +
    public async Task<(bool Succeed, T? Object)> TryReadCachedNumberAsync<T>(bool readType = false)
    +    where T : struct, IConvertible
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.BooleanreadType

    Read the type flags?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.ValueTuple<System.Boolean, System.Nullable<T>>>

    If succeed and the number

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    TryReadCachedObject<T>(out T, Boolean)

    +

    Try to read an object cached

    +
    +
    +
    Declaration
    +
    +
    public bool TryReadCachedObject<T>(out T obj, bool readType = false)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Tobj

    Object

    +
    System.BooleanreadType

    Read the type flags?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Succeed?

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    TryReadCachedObjectAsync<T>(Boolean)

    +

    Try to read an object cached

    +
    +
    +
    Declaration
    +
    +
    public async Task<(bool Succeed, T Object)> TryReadCachedObjectAsync<T>(bool readType = false)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.BooleanreadType

    Read the type flags?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.ValueTuple<System.Boolean, T>>

    If succeed and the object

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    TryReadCachedObjectCountable<T>(out T, out Int64, Boolean)

    +

    Try to read a countable object cached

    +
    +
    +
    Declaration
    +
    +
    public bool TryReadCachedObjectCountable<T>(out T obj, out long len, bool readType = false)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Tobj

    Object

    +
    System.Int64len

    Length

    +
    System.BooleanreadType

    Read the type flags?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Succeed?

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    TryReadCachedObjectCountableAsync<T>(Boolean)

    +

    Try to read a countable object cached

    +
    +
    +
    Declaration
    +
    +
    public async Task<(bool Succeed, T Object, long Length)> TryReadCachedObjectCountableAsync<T>(bool readType = false)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.BooleanreadType

    Read the type flags?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.ValueTuple<System.Boolean, T, System.Int64>>

    If succeed, the object (if cached) and the length (if not cached)

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Object type

    +
    +

    Implements

    + + +
    + IDisposableObject +
    +

    Extension Methods

    + + + + + + + + + + + + + +
    +
    + +
    + + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html b/docs/api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html new file mode 100644 index 0000000..8a3b1af --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html @@ -0,0 +1,305 @@ + + + + + + + + Class DeserializerContextFluentExtensions + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html index cd34127..89064b4 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html @@ -79,17 +79,12 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    - -
    DisposableAutoStreamSerializerBase<T>
    + +
    DisposableAutoStreamSerializerBase<T>
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    -
    wan24.ObjectValidation.IObjectValidatable
    -
    System.ComponentModel.DataAnnotations.IValidatableObject
    +
    IObjectValidatable
    @@ -109,92 +104,23 @@
    Inherited Members
    DisposableStreamSerializerBase.IStreamSerializerVersion.SerializerVersion
    -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.Dispose(System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    Namespace: wan24.StreamSerializerExtensions
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class DisposableAutoStreamSerializerBase<T> : DisposableStreamSerializerBase, IDisposableObject, IDisposable, IAsyncDisposable, IObjectValidatable, IValidatableObject, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : DisposableAutoStreamSerializerBase<T>
    +
    public abstract class DisposableAutoStreamSerializerBase<T> : DisposableStreamSerializerBase, IAutoStreamSerializer, IStreamSerializerVersion, IStreamSerializer where T : DisposableAutoStreamSerializerBase<T>
    Type Parameters
    @@ -266,19 +192,19 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Deserialize(Stream, Int32)

    +

    Deserialize(IDeserializationContext)

    Deserialize

    Declaration
    -
    protected override void Deserialize(Stream stream, int version)
    +
    protected override void Deserialize(IDeserializationContext context)
    Parameters
    @@ -291,36 +217,30 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    Overrides
    - + | - Improve this Doc + Improve this Doc - View Source + View Source -

    DeserializeAsync(Stream, Int32, CancellationToken)

    +

    DeserializeAsync(IDeserializationContext)

    Deserialize

    Declaration
    -
    protected override Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken)
    +
    protected override Task DeserializeAsync(IDeserializationContext context)
    Parameters
    @@ -333,21 +253,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -368,22 +276,22 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Overrides
    - + | - Improve this Doc + Improve this Doc View Source -

    Serialize(Stream)

    +

    Serialize(ISerializationContext)

    Serialize

    Declaration
    -
    protected override void Serialize(Stream stream)
    +
    protected override void Serialize(ISerializationContext context)
    Parameters
    @@ -396,30 +304,30 @@
    Parameters
    - - - + +
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    Overrides
    - + | - Improve this Doc + Improve this Doc View Source -

    SerializeAsync(Stream, CancellationToken)

    +

    SerializeAsync(ISerializationContext)

    Serialize

    Declaration
    -
    protected override Task SerializeAsync(Stream stream, CancellationToken cancellationToken)
    +
    protected override Task SerializeAsync(ISerializationContext context)
    Parameters
    @@ -432,15 +340,9 @@
    Parameters
    - - - - - - - - + + @@ -461,7 +363,7 @@
    Returns
    Streamstream

    Stream

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Overrides
    - +

    Explicit Interface Implementations

    @@ -497,19 +399,7 @@
    Returns

    Implements

    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    -
    - wan24.ObjectValidation.IObjectValidatable -
    -
    - System.ComponentModel.DataAnnotations.IValidatableObject + IObjectValidatable
    IAutoStreamSerializer @@ -522,19 +412,19 @@

    Implements

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html index 7355e39..8d66f6e 100644 --- a/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html @@ -73,121 +73,44 @@

    Class DisposableStreamSerializerBase

    -

    Base class for a disposable stream serializing type

    +

    Base class for a stream serializing type

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    -
    DisposableStreamSerializerBase
    - +
    DisposableStreamSerializerBase
    +
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    -
    wan24.ObjectValidation.IObjectValidatable
    -
    System.ComponentModel.DataAnnotations.IValidatableObject
    -
    -
    -
    Inherited Members
    -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.Dispose(System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    - System.Object.ToString() -
    +
    IObjectValidatable
    Namespace: wan24.StreamSerializerExtensions
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class DisposableStreamSerializerBase : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable, IStreamSerializerVersion, IStreamSerializer, IObjectValidatable, IValidatableObject
    +
    public abstract class DisposableStreamSerializerBase : DisposableBase, IStreamSerializerVersion, IStreamSerializer

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DisposableStreamSerializerBase(Stream, Int32, Nullable<Int32>)

    +

    DisposableStreamSerializerBase(Nullable<Int32>)

    Constructor

    Declaration
    -
    protected DisposableStreamSerializerBase(Stream stream, int version, int? objectVersion = null)
    +
    protected DisposableStreamSerializerBase(int? objectVersion = null)
    Parameters
    @@ -199,18 +122,6 @@
    Parameters
    - - - - - - - - - - @@ -221,19 +132,19 @@
    Parameters
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    System.Nullable<System.Int32> objectVersion
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DisposableStreamSerializerBase(Nullable<Int32>)

    +

    DisposableStreamSerializerBase(IDeserializationContext, Nullable<Int32>)

    Constructor

    Declaration
    -
    protected DisposableStreamSerializerBase(int? objectVersion = null)
    +
    protected DisposableStreamSerializerBase(IDeserializationContext context, int? objectVersion = null)
    Parameters
    @@ -245,6 +156,12 @@
    Parameters
    + + + + + @@ -289,19 +206,19 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Deserialize(Stream, Int32)

    +

    Deserialize(IDeserializationContext)

    Deserialize

    Declaration
    -
    protected abstract void Deserialize(Stream stream, int version)
    +
    protected abstract void Deserialize(IDeserializationContext context)
    Parameters
    IDeserializationContextcontext

    Context

    +
    System.Nullable<System.Int32> objectVersion
    @@ -314,34 +231,28 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DeserializeAsync(Stream, Int32, CancellationToken)

    +

    DeserializeAsync(IDeserializationContext)

    Deserialize

    Declaration
    -
    protected virtual async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken)
    +
    protected virtual async Task DeserializeAsync(IDeserializationContext context)
    Parameters
    @@ -354,21 +265,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -390,19 +289,19 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Serialize(Stream)

    +

    Serialize(ISerializationContext)

    Serialize

    Declaration
    -
    protected abstract void Serialize(Stream stream)
    +
    protected abstract void Serialize(ISerializationContext context)
    Parameters
    @@ -415,28 +314,28 @@
    Parameters
    - - - + +
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    SerializeAsync(Stream, CancellationToken)

    +

    SerializeAsync(ISerializationContext)

    Serialize

    Declaration
    -
    protected virtual async Task SerializeAsync(Stream stream, CancellationToken cancellationToken)
    +
    protected virtual async Task SerializeAsync(ISerializationContext context)
    Parameters
    @@ -449,15 +348,9 @@
    Parameters
    - - - - - - - - + + @@ -481,19 +374,19 @@

    Explicit Interface Implementations

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.Deserialize(Stream, Int32)

    +

    IStreamSerializer.Deserialize(IDeserializationContext)

    Deserialize

    Declaration
    -
    void IStreamSerializer.Deserialize(Stream stream, int version)
    +
    void IStreamSerializer.Deserialize(IDeserializationContext context)
    Parameters
    Streamstream

    Stream

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    @@ -506,34 +399,28 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken)

    +

    IStreamSerializer.DeserializeAsync(IDeserializationContext)

    Deserialize

    Declaration
    -
    Task IStreamSerializer.DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken)
    +
    Task IStreamSerializer.DeserializeAsync(IDeserializationContext context)
    Parameters
    @@ -546,21 +433,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -582,19 +457,19 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.Serialize(Stream)

    +

    IStreamSerializer.Serialize(ISerializationContext)

    Serialize

    Declaration
    -
    void IStreamSerializer.Serialize(Stream stream)
    +
    void IStreamSerializer.Serialize(ISerializationContext context)
    Parameters
    @@ -607,28 +482,28 @@
    Parameters
    - - - + +
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.SerializeAsync(Stream, CancellationToken)

    +

    IStreamSerializer.SerializeAsync(ISerializationContext)

    Serialize

    Declaration
    -
    Task IStreamSerializer.SerializeAsync(Stream stream, CancellationToken cancellationToken)
    +
    Task IStreamSerializer.SerializeAsync(ISerializationContext context)
    Parameters
    @@ -641,15 +516,9 @@
    Parameters
    - - - - - - - - + + @@ -674,7 +543,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IStreamSerializerVersion.ObjectVersion

    @@ -705,7 +574,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IStreamSerializerVersion.SerializedObjectVersion

    @@ -736,7 +605,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IStreamSerializerVersion.SerializerVersion

    @@ -763,15 +632,6 @@
    Returns
    Streamstream

    Stream

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    @@ -779,26 +639,23 @@

    Implements

    IStreamSerializer
    - wan24.ObjectValidation.IObjectValidatable -
    -
    - System.ComponentModel.DataAnnotations.IValidatableObject + IObjectValidatable

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html index 85e1290..bfb65d3 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html @@ -79,93 +79,20 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    -
    StreamAsyncEnumeratorBase<T>
    - - - +
    StreamAsyncEnumeratorBase<T>
    + + +
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    IAsyncEnumerator<T>
    -
    -
    Inherited Members
    -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    - System.Object.ToString() -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class StreamAsyncEnumeratorBase<T> : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable
    +
    public abstract class StreamAsyncEnumeratorBase<T> : DisposableBase
    Type Parameters
    @@ -187,19 +114,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamAsyncEnumeratorBase(Stream, Nullable<Int32>, CancellationToken)

    +

    StreamAsyncEnumeratorBase(IDeserializationContext)

    Constructor

    Declaration
    -
    protected StreamAsyncEnumeratorBase(Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    protected StreamAsyncEnumeratorBase(IDeserializationContext context)
    Parameters
    @@ -212,21 +139,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -238,7 +153,7 @@

    Fields Improve this Doc - View Source + View Source

    _Current

    Current object

    @@ -265,78 +180,18 @@
    Field Value
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Cancellation

    -

    Cancellation token

    -
    -
    -
    Declaration
    -
    -
    protected readonly CancellationToken Cancellation
    -
    -
    Field Value
    - - - - - - - - - - - - - -
    TypeDescription
    CancellationToken
    - - | - Improve this Doc - - - View Source - -

    SerializerVersion

    -

    Serializer version

    -
    -
    -
    Declaration
    -
    -
    protected readonly int SerializerVersion
    -
    -
    Field Value
    - - - - - - - - - - - - - -
    TypeDescription
    System.Int32
    - - | - Improve this Doc - - - View Source - -

    Stream

    +

    Context

    Stream

    Declaration
    -
    protected readonly Stream Stream
    +
    protected readonly IDeserializationContext Context
    Field Value
    @@ -348,7 +203,7 @@
    Field Value
    - + @@ -360,7 +215,7 @@

    Properties Improve this Doc - View Source + View Source

    Current

    @@ -392,7 +247,7 @@

    Methods Improve this Doc - View Source + View Source

    Dispose(Boolean)

    @@ -419,23 +274,21 @@
    Parameters
    StreamIDeserializationContext
    -
    Overrides
    -
    wan24.Core.DisposableBase.Dispose(System.Boolean)
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnumerateAsync<tEnumerator>(Stream, Nullable<Int32>, CancellationToken)

    +

    EnumerateAsync<tEnumerator>(IDeserializationContext)

    Enumerate

    Declaration
    -
    public static async IAsyncEnumerable<T> EnumerateAsync<tEnumerator>(Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +    
    public static async IAsyncEnumerable<T> EnumerateAsync<tEnumerator>(IDeserializationContext context)
         where tEnumerator : StreamAsyncEnumeratorBase<T>
    Parameters
    @@ -449,21 +302,9 @@
    Parameters
    - Stream - stream -

    Stream

    - - - - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -505,7 +346,7 @@
    Type Parameters
    Improve this Doc
    - View Source + View Source

    MoveNextAsync()

    @@ -535,7 +376,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadObjectAsync()

    @@ -563,19 +404,13 @@
    Returns

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    IAsyncEnumerator<>

    Extension Methods

    + @@ -585,9 +420,6 @@

    Extension Methods

    - @@ -599,7 +431,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html index e9576dd..1965f20 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html @@ -79,93 +79,20 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    -
    StreamEnumeratorBase<T>
    - - - +
    StreamEnumeratorBase<T>
    + + +
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    System.Collections.IEnumerator<T>
    -
    -
    Inherited Members
    -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    - System.Object.ToString() -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class StreamEnumeratorBase<T> : DisposableBase, IDisposableObject, IDisposable, IAsyncDisposable
    +
    public abstract class StreamEnumeratorBase<T> : DisposableBase
    Type Parameters
    @@ -187,19 +114,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamEnumeratorBase(Stream, Nullable<Int32>)

    +

    StreamEnumeratorBase(IDeserializationContext)

    Constructor

    Declaration
    -
    protected StreamEnumeratorBase(Stream stream, int? version = null)
    +
    protected StreamEnumeratorBase(IDeserializationContext context)
    Parameters
    @@ -212,15 +139,9 @@
    Parameters
    - - - - - - - - + + @@ -232,7 +153,7 @@

    Fields Improve this Doc - View Source + View Source

    _Current

    Current object

    @@ -259,18 +180,18 @@
    Field Value
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    SerializerVersion

    -

    Serializer version

    +

    Context

    +

    Stream

    Declaration
    -
    protected readonly int SerializerVersion
    +
    protected readonly IDeserializationContext Context
    Field Value
    @@ -282,7 +203,7 @@
    Field Value
    - + @@ -292,7 +213,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    StartPosition

    Stream start position

    @@ -317,36 +238,6 @@
    Field Value
    System.Int32IDeserializationContext
    - - | - Improve this Doc - - - View Source - -

    Stream

    -

    Stream

    -
    -
    -
    Declaration
    -
    -
    protected readonly Stream Stream
    -
    -
    Field Value
    - - - - - - - - - - - - - -
    TypeDescription
    Stream

    Properties

    @@ -354,7 +245,7 @@

    Properties Improve this Doc - View Source + View Source

    Current

    @@ -386,7 +277,7 @@

    Methods Improve this Doc - View Source + View Source

    Dispose(Boolean)

    @@ -413,23 +304,21 @@
    Parameters
    -
    Overrides
    -
    wan24.Core.DisposableBase.Dispose(System.Boolean)
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Enumerate<tEnumerator>(Stream, Nullable<Int32>)

    +

    Enumerate<tEnumerator>(IDeserializationContext)

    Enumerate

    Declaration
    -
    public static IEnumerable<T> Enumerate<tEnumerator>(Stream stream, int? version = null)
    +    
    public static IEnumerable<T> Enumerate<tEnumerator>(IDeserializationContext context)
         where tEnumerator : StreamEnumeratorBase<T>
    Parameters
    @@ -443,15 +332,9 @@
    Parameters
    - Stream - stream -

    Stream

    - - - - System.Nullable<System.Int32> - version -

    Serializer version

    + IDeserializationContext + context +

    Context

    @@ -493,7 +376,7 @@
    Type Parameters
    Improve this Doc
    - View Source + View Source

    MoveNext()

    @@ -523,7 +406,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ReadObject()

    @@ -555,7 +438,7 @@
    Returns
    Improve this Doc - View Source + View Source

    Reset()

    @@ -572,7 +455,7 @@

    Explicit Interface Implementations Improve this Doc - View Source + View Source

    IEnumerator.Current

    @@ -598,19 +481,13 @@
    Returns

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    System.Collections.IEnumerator<>

    Extension Methods

    + @@ -620,9 +497,6 @@

    Extension Methods

    -
    diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html index 39ac32e..1cf2551 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html @@ -79,27 +79,17 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    - -
    StreamNumberAsyncEnumerator<T>
    + +
    StreamNumberAsyncEnumerator<T>
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    IAsyncEnumerator<T>
    Inherited Members
    - - -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamNumberAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : struct, IConvertible
    +
    public class StreamNumberAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T> where T : struct, IConvertible
    Type Parameters
    @@ -209,19 +133,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamNumberAsyncEnumerator(Stream, Nullable<Int32>, CancellationToken)

    +

    StreamNumberAsyncEnumerator(IDeserializationContext)

    Constructor

    Declaration
    -
    public StreamNumberAsyncEnumerator(Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    public StreamNumberAsyncEnumerator(IDeserializationContext context)
    Parameters
    @@ -234,109 +158,13 @@
    Parameters
    - - - - - - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    - - | - Improve this Doc - - - View Source - - -

    StreamNumberAsyncEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    -

    Constructor

    -
    -
    -
    Declaration
    -
    -
    public StreamNumberAsyncEnumerator(Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    -
    -
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeNameDescription
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    -
    -

    Fields -

    - - | - Improve this Doc - - - View Source - -

    Pool

    -

    Array pool

    -
    -
    -
    Declaration
    -
    -
    protected readonly ArrayPool<byte> Pool
    -
    -
    Field Value
    - - - - - - - - - - - - - -
    TypeDescription
    System.Buffers.ArrayPool<System.Byte>

    Methods

    @@ -344,7 +172,7 @@

    Methods Improve this Doc - View Source + View Source

    ReadObjectAsync()

    @@ -374,19 +202,13 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<T>.ReadObjectAsync()

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    IAsyncEnumerator<>

    Extension Methods

    + @@ -396,9 +218,6 @@

    Extension Methods

    - @@ -410,7 +229,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html index 4c3c0c3..b3d23ef 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html @@ -79,24 +79,17 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    - -
    StreamNumberEnumerator<T>
    + +
    StreamNumberEnumerator<T>
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    System.Collections.IEnumerator<T>
    Inherited Members
    - -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamNumberEnumerator<T> : StreamEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : struct, IConvertible
    +
    public class StreamNumberEnumerator<T> : StreamEnumeratorBase<T> where T : struct, IConvertible
    Type Parameters
    @@ -215,19 +142,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamNumberEnumerator(Stream, Nullable<Int32>)

    +

    StreamNumberEnumerator(IDeserializationContext)

    Constructor

    Declaration
    -
    public StreamNumberEnumerator(Stream stream, int? version = null)
    +
    public StreamNumberEnumerator(IDeserializationContext context)
    Parameters
    @@ -240,97 +167,13 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    - - | - Improve this Doc - - - View Source - - -

    StreamNumberEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Constructor

    -
    -
    -
    Declaration
    -
    -
    public StreamNumberEnumerator(Stream stream, int? version = null, ArrayPool<byte> pool = null)
    -
    -
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeNameDescription
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    -

    Fields -

    - - | - Improve this Doc - - - View Source - -

    Pool

    -

    Array pool

    -
    -
    -
    Declaration
    -
    -
    protected readonly ArrayPool<byte> Pool
    -
    -
    Field Value
    - - - - - - - - - - - - - -
    TypeDescription
    System.Buffers.ArrayPool<System.Byte>

    Methods

    @@ -338,7 +181,7 @@

    Methods Improve this Doc - View Source + View Source

    ReadObject()

    @@ -368,19 +211,13 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<T>.ReadObject()

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    System.Collections.IEnumerator<>

    Extension Methods

    + @@ -390,9 +227,6 @@

    Extension Methods

    - @@ -404,7 +238,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html index 6d0159a..792e7ff 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html @@ -79,27 +79,17 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    - -
    StreamSerializerAsyncEnumerator<T>
    + +
    StreamSerializerAsyncEnumerator<T>
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    IAsyncEnumerator<T>
    Inherited Members
    - - -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamSerializerAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : class, IStreamSerializer
    +
    public class StreamSerializerAsyncEnumerator<T> : StreamAsyncEnumeratorBase<T> where T : class, IStreamSerializer
    Type Parameters
    @@ -209,19 +133,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamSerializerAsyncEnumerator(Stream, Nullable<Int32>, CancellationToken)

    +

    StreamSerializerAsyncEnumerator(IDeserializationContext)

    Constructor

    Declaration
    -
    public StreamSerializerAsyncEnumerator(Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    public StreamSerializerAsyncEnumerator(IDeserializationContext context)
    Parameters
    @@ -234,21 +158,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -260,7 +172,7 @@

    Methods Improve this Doc - View Source + View Source

    ReadObjectAsync()

    @@ -290,19 +202,13 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<T>.ReadObjectAsync()

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    IAsyncEnumerator<>

    Extension Methods

    + @@ -312,9 +218,6 @@

    Extension Methods

    - diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html index 9891c53..8874b37 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html @@ -79,24 +79,17 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    - -
    StreamSerializerEnumerator<T>
    + +
    StreamSerializerEnumerator<T>
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    System.Collections.IEnumerator<T>
    Inherited Members
    - -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamSerializerEnumerator<T> : StreamEnumeratorBase<T>, IDisposableObject, IDisposable, IAsyncDisposable where T : class, IStreamSerializer
    +
    public class StreamSerializerEnumerator<T> : StreamEnumeratorBase<T> where T : class, IStreamSerializer
    Type Parameters
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    @@ -212,19 +139,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamSerializerEnumerator(Stream, Nullable<Int32>)

    +

    StreamSerializerEnumerator(IDeserializationContext)

    Constructor

    Declaration
    -
    public StreamSerializerEnumerator(Stream stream, int? version = null)
    +
    public StreamSerializerEnumerator(IDeserializationContext context)
    Parameters
    @@ -237,15 +164,9 @@
    Parameters
    - - - - - - - - + + @@ -257,7 +178,7 @@

    Methods Improve this Doc - View Source + View Source

    Dispose(Boolean)

    @@ -291,7 +212,7 @@
    Overrides
    Improve this Doc - View Source + View Source

    ReadObject()

    @@ -321,19 +242,13 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<T>.ReadObject()

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    System.Collections.IEnumerator<>

    Extension Methods

    + @@ -343,9 +258,6 @@

    Extension Methods

    - diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html index d7eaf48..0862251 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html @@ -79,27 +79,17 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    - -
    StreamStringAsyncEnumerator
    + +
    StreamStringAsyncEnumerator
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    IAsyncEnumerator<System.String>
    Inherited Members
    - - -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase<string>, IDisposableObject, IDisposable, IAsyncDisposable
    +
    public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase<string>

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamStringAsyncEnumerator(Stream, Nullable<Int32>, CancellationToken)

    +

    StreamStringAsyncEnumerator(IDeserializationContext)

    Constructor

    Declaration
    -
    public StreamStringAsyncEnumerator(Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    public StreamStringAsyncEnumerator(IDeserializationContext context)
    Parameters
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    @@ -218,40 +142,28 @@
    Parameters
    - - - - - - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamStringAsyncEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    +

    StreamStringAsyncEnumerator(IDeserializationContext, Int32, Int32)

    Constructor

    Declaration
    -
    public StreamStringAsyncEnumerator(Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public StreamStringAsyncEnumerator(IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -264,21 +176,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -291,12 +191,6 @@
    Parameters
    - - - - - @@ -308,7 +202,7 @@

    Fields Improve this Doc - View Source + View Source

    MaxLen

    Maximum UTF-8 string bytes length

    @@ -338,7 +232,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    MinLen

    Minimum UTF-8 string bytes length

    @@ -363,36 +257,6 @@
    Field Value
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum UTF-8 string bytes length

    -
    CancellationTokencancellationToken

    Cancellation token

    - - | - Improve this Doc - - - View Source - -

    Pool

    -

    Array pool

    -
    -
    -
    Declaration
    -
    -
    protected readonly ArrayPool<byte> Pool
    -
    -
    Field Value
    - - - - - - - - - - - - - -
    TypeDescription
    System.Buffers.ArrayPool<System.Byte>

    Methods

    @@ -400,7 +264,7 @@

    Methods Improve this Doc - View Source + View Source

    ReadObjectAsync()

    @@ -430,19 +294,13 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase<System.String>.ReadObjectAsync()

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    IAsyncEnumerator<>

    Extension Methods

    + @@ -452,9 +310,6 @@

    Extension Methods

    - @@ -466,7 +321,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html index 4cd8301..ce239f0 100644 --- a/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html +++ b/docs/api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html @@ -79,24 +79,17 @@

    Inheritance
    System.Object
    -
    wan24.Core.DisposableBase
    -
    StreamEnumeratorBase<System.String>
    -
    StreamStringEnumerator
    +
    StreamEnumeratorBase<System.String>
    +
    StreamStringEnumerator
    Implements
    -
    wan24.Core.IDisposableObject
    -
    System.IDisposable
    -
    System.IAsyncDisposable
    System.Collections.IEnumerator<System.String>
    Inherited Members
    - -
    - wan24.Core.DisposableBase.DisposeSyncObject -
    -
    - wan24.Core.DisposableBase.EnsureUndisposed(System.Boolean, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(T, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed(System.Action, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposed<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.IfUndisposedNullable<T>(System.Func<T>, System.Boolean) -
    -
    - wan24.Core.DisposableBase.DisposeCore() -
    -
    - wan24.Core.DisposableBase.DisposeAttributes() -
    -
    - wan24.Core.DisposableBase.DisposeAttributesAsync() -
    -
    - wan24.Core.DisposableBase.Dispose() -
    -
    - wan24.Core.DisposableBase.DisposeAsync() -
    -
    - wan24.Core.DisposableBase.IsDisposing -
    -
    - wan24.Core.DisposableBase.IsDisposed -
    -
    - wan24.Core.DisposableBase.OnDisposing -
    -
    - wan24.Core.DisposableBase.OnDisposed -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    Namespace: wan24.StreamSerializerExtensions.Enumerator
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public class StreamStringEnumerator : StreamEnumeratorBase<string>, IDisposableObject, IDisposable, IAsyncDisposable
    +
    public class StreamStringEnumerator : StreamEnumeratorBase<string>

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamStringEnumerator(Stream, Nullable<Int32>)

    +

    StreamStringEnumerator(IDeserializationContext)

    Constructor

    Declaration
    -
    public StreamStringEnumerator(Stream stream, int? version = null)
    +
    public StreamStringEnumerator(IDeserializationContext context)
    Parameters
    @@ -224,34 +151,28 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamStringEnumerator(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    +

    StreamStringEnumerator(IDeserializationContext, Int32, Int32)

    Constructor

    Declaration
    -
    public StreamStringEnumerator(Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public StreamStringEnumerator(IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -264,21 +185,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -302,7 +211,7 @@

    Fields Improve this Doc - View Source + View Source

    MaxLen

    Maximum UTF-8 string bytes length

    @@ -332,7 +241,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    MinLen

    Minimum UTF-8 string bytes length

    @@ -357,36 +266,6 @@
    Field Value
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    - - | - Improve this Doc - - - View Source - -

    Pool

    -

    Array pool

    -
    -
    -
    Declaration
    -
    -
    protected readonly ArrayPool<byte> Pool
    -
    -
    Field Value
    - - - - - - - - - - - - - -
    TypeDescription
    System.Buffers.ArrayPool<System.Byte>

    Methods

    @@ -394,7 +273,7 @@

    Methods Improve this Doc - View Source + View Source

    ReadObject()

    @@ -424,19 +303,13 @@
    Returns
    Overrides
    wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase<System.String>.ReadObject()

    Implements

    -
    - wan24.Core.IDisposableObject -
    -
    - System.IDisposable -
    -
    - System.IAsyncDisposable -
    System.Collections.IEnumerator<>

    Extension Methods

    + @@ -446,9 +319,6 @@

    Extension Methods

    - @@ -460,7 +330,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html index 23aa3ab..5d44604 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html @@ -88,16 +88,16 @@
    Inherited Members
    IStreamSerializerVersion.SerializerVersion
    Namespace: wan24.StreamSerializerExtensions
    @@ -141,19 +141,19 @@
    Property Value

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html index bcfb239..24fa59a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html +++ b/docs/api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html @@ -172,7 +172,7 @@
    Property Value
    - wan24.Core.OrderedDictionary<System.String, AutoStreamSerializerInfo> + OrderedDictionary<System.String, AutoStreamSerializerInfo> @@ -209,6 +209,9 @@
    Property Value

    Extension Methods

    + @@ -218,9 +221,6 @@

    Extension Methods

    - diff --git a/docs/api/wan24.StreamSerializerExtensions.IDeserializationContext.html b/docs/api/wan24.StreamSerializerExtensions.IDeserializationContext.html new file mode 100644 index 0000000..258795e --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.IDeserializationContext.html @@ -0,0 +1,843 @@ + + + + + + + + Interface IDeserializationContext + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.ISerializationContext.html b/docs/api/wan24.StreamSerializerExtensions.ISerializationContext.html new file mode 100644 index 0000000..03da5d7 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.ISerializationContext.html @@ -0,0 +1,828 @@ + + + + + + + + Interface ISerializationContext + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.ISerializerContext.html b/docs/api/wan24.StreamSerializerExtensions.ISerializerContext.html new file mode 100644 index 0000000..7fae46e --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.ISerializerContext.html @@ -0,0 +1,720 @@ + + + + + + + + Interface ISerializerContext + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html index cc4f02e..a04107a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html +++ b/docs/api/wan24.StreamSerializerExtensions.ISerializerOptions.html @@ -86,10 +86,10 @@

    Properties

    | - Improve this Doc + Improve this Doc - View Source + View Source

    Attribute

    @@ -117,10 +117,72 @@
    Property Value
    | - Improve this Doc + Improve this Doc - View Source + View Source + + +

    IsNullable

    +

    Is the value nullable?

    +
    +
    +
    Declaration
    +
    +
    bool IsNullable { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean
    + + | + Improve this Doc + + + View Source + + +

    KeyOptions

    +

    Key serializer options

    +
    +
    +
    Declaration
    +
    +
    ISerializerOptions KeyOptions { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    ISerializerOptions
    + + | + Improve this Doc + + + View Source

    Property

    @@ -129,7 +191,38 @@

    Declaration
    -
    PropertyInfoExt Property { get; }
    +
    PropertyInfoExt? Property { get; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Nullable<PropertyInfoExt>
    + + | + Improve this Doc + + + View Source + + +

    Serializer

    +

    Serializer type

    +
    +
    +
    Declaration
    +
    +
    SerializerTypes? Serializer { get; set; }
    Property Value
    @@ -141,7 +234,38 @@
    Property Value
    - + + + + +
    wan24.Core.PropertyInfoExtSystem.Nullable<SerializerTypes>
    + + | + Improve this Doc + + + View Source + + +

    ValueOptions

    +

    Value serializer options

    +
    +
    +
    Declaration
    +
    +
    ISerializerOptions ValueOptions { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + @@ -150,10 +274,10 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source

    GetMaxLen(Int32)

    @@ -200,10 +324,10 @@
    Returns
    TypeDescription
    ISerializerOptions
    | - Improve this Doc + Improve this Doc - View Source + View Source

    GetMaxLen(Int64)

    @@ -250,10 +374,10 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source

    GetMinLen(Int32)

    @@ -300,10 +424,10 @@
    Returns
    | - Improve this Doc + Improve this Doc - View Source + View Source

    GetMinLen(Int64)

    @@ -349,6 +473,9 @@
    Returns

    Extension Methods

    + @@ -359,7 +486,10 @@

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) + @@ -369,10 +499,10 @@

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html index 2713e6a..0e37e8a 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializer.html @@ -86,19 +86,19 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Deserialize(Stream, Int32)

    +

    Deserialize(IDeserializationContext)

    Deserialize

    Declaration
    -
    void Deserialize(Stream stream, int version)
    +
    void Deserialize(IDeserializationContext context)
    Parameters
    @@ -111,34 +111,28 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DeserializeAsync(Stream, Int32, CancellationToken)

    +

    DeserializeAsync(IDeserializationContext)

    Deserialize

    Declaration
    -
    Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken)
    +
    Task DeserializeAsync(IDeserializationContext context)
    Parameters
    @@ -151,21 +145,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -187,19 +169,19 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Serialize(Stream)

    +

    Serialize(ISerializationContext)

    Serialize

    Declaration
    -
    void Serialize(Stream stream)
    +
    void Serialize(ISerializationContext context)
    Parameters
    @@ -212,28 +194,28 @@
    Parameters
    - - - + +
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    SerializeAsync(Stream, CancellationToken)

    +

    SerializeAsync(ISerializationContext)

    Serialize

    Declaration
    -
    Task SerializeAsync(Stream stream, CancellationToken cancellationToken)
    +
    Task SerializeAsync(ISerializationContext context)
    Parameters
    @@ -246,15 +228,9 @@
    Parameters
    - - - - - - - - + + @@ -276,19 +252,19 @@
    Returns
    Streamstream

    Stream

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Extension Methods

    @@ -298,10 +274,10 @@

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html index 81c62bb..7ee13fe 100644 --- a/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html +++ b/docs/api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html @@ -79,16 +79,16 @@

    Inherited Members
    Namespace: wan24.StreamSerializerExtensions
    @@ -194,19 +194,19 @@
    Property Value

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html b/docs/api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html new file mode 100644 index 0000000..8642821 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html @@ -0,0 +1,803 @@ + + + + + + + + Class ItemDeserializerContext + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.ItemSerializerContext.html b/docs/api/wan24.StreamSerializerExtensions.ItemSerializerContext.html new file mode 100644 index 0000000..099c839 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.ItemSerializerContext.html @@ -0,0 +1,999 @@ + + + + + + + + Class ItemSerializerContext + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html b/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html index 8b4d6c4..82aed18 100644 --- a/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html +++ b/docs/api/wan24.StreamSerializerExtensions.NumberTypes.html @@ -125,6 +125,11 @@

    Fields Int

    Integer

    + + + + IsNull +

    null (for nullable writing/reading)

    @@ -145,11 +150,6 @@

    Fields None

    None

    - - - - Null -

    null (for nullable writing/reading)

    @@ -175,6 +175,9 @@

    Fields

    Extension Methods

    + @@ -193,6 +196,9 @@

    Extension Methods

    + @@ -203,10 +209,10 @@

    Extension Methods

    SerializerHelper.GetNumberAndType<NumberTypes>() diff --git a/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html b/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html index c3a67f7..432a687 100644 --- a/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html +++ b/docs/api/wan24.StreamSerializerExtensions.ObjectTypes.html @@ -95,11 +95,21 @@

    Fields Array

    Array

    + + + + BasicTypeInfo +

    Is a basic SerializedTypeInfo (serialized to only one byte using ObjectTypes)

    Bool -

    Boolean (boolean true)

    +

    Boolean

    + + + + Break +

    Enumeration termination

    @@ -110,6 +120,21 @@

    Fields Bytes

    Bytes

    + + + + Cached +

    Using the object type from the type cache, or the object from the object cache (if this flag is being used alone)

    + + + + CachedSerializable +

    Cached serializeable IStreamSerializer assignable

    + + + + ClrType +

    @@ -129,7 +154,12 @@

    Fields Empty -

    Empty (or zero or boolean false)

    +

    Empty (array, list, etc.)

    + + + + False +

    false

    @@ -140,11 +170,21 @@

    Fields Float

    Single

    + + + + Generic +

    Generic type

    Int

    Int32

    + + + + LastItemType +

    Use the last item type

    @@ -155,6 +195,11 @@

    Fields Long

    Int64

    + + + + NoRank +

    No array rank

    @@ -185,44 +230,103 @@

    Fields String

    String

    + + + + String16 +

    String UTF-16

    + + + + String32 +

    String UTF-32

    Struct

    Struct

    + + + + True +

    true

    Unsigned

    Unsigned number

    + + + + Zero +

    Zero numeric value

    Extension Methods

    + + + + + + + + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.SequenceTypes.html b/docs/api/wan24.StreamSerializerExtensions.SequenceTypes.html new file mode 100644 index 0000000..94d7791 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.SequenceTypes.html @@ -0,0 +1,182 @@ + + + + + + + + Enum SequenceTypes + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html b/docs/api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html new file mode 100644 index 0000000..9e40c78 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html @@ -0,0 +1,1370 @@ + + + + + + + + Class SerializedTypeInfo + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerContext.html b/docs/api/wan24.StreamSerializerExtensions.SerializerContext.html new file mode 100644 index 0000000..c149a9d --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerContext.html @@ -0,0 +1,1187 @@ + + + + + + + + Class SerializerContext + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerContextBase.html b/docs/api/wan24.StreamSerializerExtensions.SerializerContextBase.html new file mode 100644 index 0000000..14f7409 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerContextBase.html @@ -0,0 +1,917 @@ + + + + + + + + Class SerializerContextBase + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html b/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html index 5fa17ec..68a0c90 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html @@ -204,6 +204,9 @@
    Property Value

    Extension Methods

    + @@ -213,9 +216,6 @@

    Extension Methods

    - diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html index 24cd670..10fe899 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerException.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerException.html @@ -480,6 +480,9 @@
    Type Parameters

    Extension Methods

    + @@ -489,9 +492,6 @@

    Extension Methods

    - diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html index 72705a2..2453218 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerHelper.html @@ -115,20 +115,188 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source + + +

    EnsureCorrectObjectType(ObjectTypes, PropertyInfoExt)

    +

    Ensure a correct object type, based on additional serializer options for a property

    +
    +
    +
    Declaration
    +
    +
    public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, PropertyInfoExt pi)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypesobjType

    Object type

    +
    PropertyInfoExtpi

    Property

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ObjectTypes

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    EnsureCorrectObjectType(ObjectTypes, ISerializerOptions)

    +

    Ensure a correct object type, based on additional serializer options

    +
    +
    +
    Declaration
    +
    +
    public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, ISerializerOptions options)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypesobjType

    Object type

    +
    ISerializerOptionsoptions

    Options

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ObjectTypes

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    EnsureCorrectObjectType(ObjectTypes, StreamSerializerAttribute)

    +

    Ensure a correct object type, based on additional serializer options

    +
    +
    +
    Declaration
    +
    +
    public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, StreamSerializerAttribute attr)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypesobjType

    Object type

    +
    StreamSerializerAttributeattr

    Attribute

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ObjectTypes

    Object type

    +
    + + | + Improve this Doc + + + View Source -

    EnsureNotNull<T>(T)

    +

    EnsureNotNull<T>(T, String)

    Ensure a non-null value

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T EnsureNotNull<T>(T value)
    +public static T EnsureNotNull<T>(T value, string name = null)
    Parameters
    @@ -144,6 +312,12 @@
    Parameters
    + + + + + @@ -185,7 +359,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int32, Int32, Int32)

    @@ -248,7 +422,7 @@
    Returns
    Improve this Doc - View Source + View Source

    EnsureValidLength(Int64, Int64, Int64)

    @@ -308,20 +482,19 @@
    Returns
    T value

    Value

    +
    System.Stringname

    Argument value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    -

    Get the key serializer options

    + +

    FindDeserializer(Type)

    +

    Find type deserializers

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static ISerializerOptions GetKeySerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken)
    +
    public static (StreamSerializer.Deserializer_Delegate Deserializer, StreamSerializer.AsyncDeserializer_Delegate AsyncDeserializer) FindDeserializer(this Type type)
    Parameters
    @@ -334,27 +507,59 @@
    Parameters
    - - - + + + +
    wan24.Core.PropertyInfoExtpi

    Property

    +
    Typetype

    Type

    +
    Returns
    + + - - - + + + + - - - + + +
    Streamstream

    Stream

    -
    TypeDescription
    System.Int32version

    Serializer version

    +
    System.ValueTuple<StreamSerializer.Deserializer_Delegate, StreamSerializer.AsyncDeserializer_Delegate>

    Synchronous and asynchronous deserializers

    + + | + Improve this Doc + + + View Source + + +

    FindSerializer(Type)

    +

    Find type serializers

    +
    +
    +
    Declaration
    +
    +
    public static (StreamSerializer.Serializer_Delegate Serializer, StreamSerializer.AsyncSerializer_Delegate AsyncSerializer) FindSerializer(this Type type)
    +
    +
    Parameters
    + + + + + + + + + - - - + + @@ -369,27 +574,27 @@
    Returns
    - - +
    TypeNameDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    Typetype

    Type

    ISerializerOptions

    Serializer options

    +
    System.ValueTuple<StreamSerializer.Serializer_Delegate, StreamSerializer.AsyncSerializer_Delegate>

    Synchronous and asynchronous serializers

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    GetNumberAndType<T>(T)

    -

    Get the best matching number type

    + +

    GetClrType(NumberTypes)

    +

    Get the CLR type of a number type

    Declaration
    -
    public static (object Number, NumberTypes Type) GetNumberAndType<T>(this T number)
    +
    public static Type GetClrType(this NumberTypes type)
    Parameters
    @@ -402,9 +607,9 @@
    Parameters
    - - - + + @@ -419,43 +624,89 @@
    Returns
    - - +
    Tnumber

    Number

    +
    NumberTypestype

    Number type

    System.ValueTuple<System.Object, NumberTypes>

    Number and type

    +
    Type

    CLR type

    -
    Type Parameters
    + + | + Improve this Doc + + + View Source + + +

    GetItemDeserializerInfo(Type, ObjectTypes, Boolean)

    +

    Get item deserialization informations from a type

    +
    +
    +
    Declaration
    +
    +
    public static (SerializerTypes Type, StreamSerializer.Deserializer_Delegate Deserializer, StreamSerializer.AsyncDeserializer_Delegate AsyncDeserializer) GetItemDeserializerInfo(this Type type, ObjectTypes objType, bool isAsync)
    +
    +
    Parameters
    + - - + + + + + + + + + + + + + + +
    Type Name Description
    T

    Number type

    +
    Typetype

    Item type

    +
    ObjectTypesobjType

    Object type

    +
    System.BooleanisAsync

    Is an asynchronous context?

    +
    +
    Returns
    + + + + + + + + + + +
    TypeDescription
    System.ValueTuple<SerializerTypes, StreamSerializer.Deserializer_Delegate, StreamSerializer.AsyncDeserializer_Delegate>

    Serializer type, synchronous deserializer and asynchronous deserializer

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    GetNumberType<T>(T, Boolean)

    -

    Get the type of a number

    + +

    GetItemSerializerInfo(Type, ObjectTypes, Boolean)

    +

    Get item serialization informations from a type

    Declaration
    -
    public static NumberTypes GetNumberType<T>(this T number, bool useFlags = true)
    +
    public static (SerializerTypes Type, StreamSerializer.Serializer_Delegate Serializer, StreamSerializer.AsyncSerializer_Delegate AsyncSerializer) GetItemSerializerInfo(this Type type, ObjectTypes objType, bool isAsync)
    Parameters
    @@ -468,15 +719,787 @@
    Parameters
    - - - + + - - - + + + + + + + + + +
    Tnumber

    Number

    +
    Typetype

    Item type

    System.BooleanuseFlags

    Use the flags?

    +
    ObjectTypesobjType

    Object type

    +
    System.BooleanisAsync

    Is an asynchronous context?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.ValueTuple<SerializerTypes, StreamSerializer.Serializer_Delegate, StreamSerializer.AsyncSerializer_Delegate>

    Serializer type, synchronous serializer and asynchronous serializer

    +
    + + | + Improve this Doc + + + View Source + + +

    GetKeySerializerOptions(PropertyInfoExt, ISerializerContext)

    +

    Get the key serializer options

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static ISerializerOptions GetKeySerializerOptions(this PropertyInfoExt pi, ISerializerContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    PropertyInfoExtpi

    Property

    +
    ISerializerContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ISerializerOptions

    Serializer options

    +
    + + | + Improve this Doc + + + View Source + + +

    GetNumberAndType<T>(T)

    +

    Get the best matching number type

    +
    +
    +
    Declaration
    +
    +
    public static (object Number, NumberTypes Type) GetNumberAndType<T>(this T number)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    Tnumber

    Number

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.ValueTuple<System.Object, NumberTypes>

    Number and type

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    GetNumberType<T>(T, Boolean)

    +

    Get the type of a number

    +
    +
    +
    Declaration
    +
    +
    public static NumberTypes GetNumberType<T>(this T number, bool useFlags = true)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Tnumber

    Number

    +
    System.BooleanuseFlags

    Use the flags?

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    NumberTypes

    Number type

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Number type

    +
    + + | + Improve this Doc + + + View Source + + +

    GetObjectSerializerInfo(Object)

    +

    Get object serializer informations

    +
    +
    +
    Declaration
    +
    +
    public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObject) GetObjectSerializerInfo(this object obj)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    System.Objectobj

    Object

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.ValueTuple<Type, ObjectTypes, System.Boolean, System.Boolean>

    Informations

    +
    + + | + Improve this Doc + + + View Source + + +

    GetObjectType(Type)

    +

    Get the object type of a type

    +
    +
    +
    Declaration
    +
    +
    public static ObjectTypes GetObjectType(this Type type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    Typetype

    Type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ObjectTypes

    Object type

    +
    + + | + Improve this Doc + + + View Source + + +

    GetSerializerOptions(PropertyInfoExt, ISerializerContext)

    +

    Get the serializer options

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static ISerializerOptions GetSerializerOptions(this PropertyInfoExt pi, ISerializerContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    PropertyInfoExtpi

    Property

    +
    ISerializerContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ISerializerOptions

    Serializer options

    +
    + + | + Improve this Doc + + + View Source + + +

    GetValueSerializerOptions(PropertyInfoExt, ISerializerContext)

    +

    Get the value serializer options

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static ISerializerOptions GetValueSerializerOptions(this PropertyInfoExt pi, ISerializerContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    PropertyInfoExtpi

    Property

    +
    ISerializerContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ISerializerOptions

    Serializer options

    +
    + + | + Improve this Doc + + + View Source + + +

    HasValueFlags(NumberTypes)

    +

    Determine if the number type has value flags

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool HasValueFlags(this NumberTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    NumberTypestype

    Type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Has value flags?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsArray(ObjectTypes)

    +

    Is an array?

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsArray(this ObjectTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypestype

    Type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    An array?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsBasicTypeInfo(ObjectTypes)

    +

    Is a basic type info?

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsBasicTypeInfo(this ObjectTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypestype

    Type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Is a basic type info?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsBreak(ObjectTypes)

    +

    Is enumeration break?

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsBreak(this ObjectTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypestype

    Type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Break?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsCached(ObjectTypes)

    +

    Is cached?

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsCached(this ObjectTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypestype

    Type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Cached?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsCachedSerializable(ObjectTypes)

    +

    Is a cached serializable type?

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsCachedSerializable(this ObjectTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypestype

    Type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean

    Is cached serializable?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsEmpty(ObjectTypes)

    +

    Is empty?

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsEmpty(this ObjectTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + + @@ -491,43 +1514,79 @@
    Returns
    - - + + + +
    TypeNameDescription
    ObjectTypestype

    Type

    NumberTypes

    Number type

    +
    System.Boolean

    Empty?

    +
    + + | + Improve this Doc + + + View Source + + +

    IsGeneric(ObjectTypes)

    +

    Is generic?

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsGeneric(this ObjectTypes type)
    +
    +
    Parameters
    + + + + + + + + + + + + +
    TypeNameDescription
    ObjectTypestype

    Type

    -
    Type Parameters
    +
    Returns
    - + - - +
    NameType Description
    T

    Number type

    +
    System.Boolean

    Generic?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    GetObjectSerializerInfo(Object)

    -

    Get object serializer informations

    + +

    IsMaxValue(NumberTypes)

    +

    Is max. value?

    Declaration
    -
    public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObject) GetObjectSerializerInfo(this object obj)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool IsMaxValue(this NumberTypes type)
    Parameters
    @@ -540,9 +1599,9 @@
    Parameters
    - - - + + @@ -557,28 +1616,28 @@
    Returns
    - - +
    System.Objectobj

    Object

    +
    NumberTypestype

    Type

    System.ValueTuple<Type, ObjectTypes, System.Boolean, System.Boolean>

    Informations

    +
    System.Boolean

    Max. value?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    -

    Get the serializer options

    + +

    IsMinValue(NumberTypes)

    +

    Is min. value?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static ISerializerOptions GetSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken)
    +public static bool IsMinValue(this NumberTypes type)
    Parameters
    @@ -591,27 +1650,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + @@ -626,28 +1667,28 @@
    Returns
    - - +
    wan24.Core.PropertyInfoExtpi

    Property

    -
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    NumberTypestype

    Type

    ISerializerOptions

    Serializer options

    +
    System.Boolean

    Min.value?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    -

    Get the value serializer options

    + +

    IsNotRanked(ObjectTypes)

    +

    Is not ranked?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static ISerializerOptions GetValueSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken)
    +public static bool IsNotRanked(this ObjectTypes type)
    Parameters
    @@ -660,27 +1701,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + @@ -695,28 +1718,28 @@
    Returns
    - - +
    wan24.Core.PropertyInfoExtpi

    Property

    -
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ObjectTypestype

    Type

    ISerializerOptions

    Serializer options

    +
    System.Boolean

    Not ranked?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    HasValueFlags(NumberTypes)

    -

    Determine if the number type has value flags

    + +

    IsNumber(ObjectTypes)

    +

    Is a number?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool HasValueFlags(this NumberTypes type)
    +public static bool IsNumber(this ObjectTypes type)
    Parameters
    @@ -729,7 +1752,7 @@
    Parameters
    - + @@ -747,27 +1770,27 @@
    Returns
    -
    NumberTypesObjectTypes type

    Type

    System.Boolean

    Has value flags?

    +

    A number?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsEmpty(ObjectTypes)

    -

    Is empty?

    + +

    IsSerializerConstructor(ConstructorInfo, Boolean)

    +

    Determine if the constructor is the serializer constructor

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsEmpty(this ObjectTypes type)
    +public static bool IsSerializerConstructor(this ConstructorInfo ci, bool requireAttribute = false)
    Parameters
    @@ -780,9 +1803,15 @@
    Parameters
    - - - + + + + + + + @@ -798,27 +1827,27 @@
    Returns
    -
    ObjectTypestype

    Type

    +
    System.Reflection.ConstructorInfoci

    Constructor

    +
    System.BooleanrequireAttribute

    Require the StreamSerializerAttribute?

    System.Boolean

    Empty?

    +

    Is the serializer constructor?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsMaxValue(NumberTypes)

    -

    Is max. value?

    + +

    IsUnsigned(NumberTypes)

    +

    Is unsigned?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsMaxValue(this NumberTypes type)
    +public static bool IsUnsigned(this NumberTypes type)
    Parameters
    @@ -849,27 +1878,27 @@
    Returns
    -
    System.Boolean

    Max. value?

    +

    Unsigned?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsMinValue(NumberTypes)

    -

    Is min. value?

    + +

    IsUnsigned(ObjectTypes)

    +

    Is unsigned?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsMinValue(this NumberTypes type)
    +public static bool IsUnsigned(this ObjectTypes type)
    Parameters
    @@ -882,7 +1911,7 @@
    Parameters
    - + @@ -900,27 +1929,27 @@
    Returns
    -
    NumberTypesObjectTypes type

    Type

    System.Boolean

    Min.value?

    +

    Unsigned?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsNumber(ObjectTypes)

    -

    Is a number?

    + +

    IsZero(NumberTypes)

    +

    Is zero?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsNumber(this ObjectTypes type)
    +public static bool IsZero(this NumberTypes type)
    Parameters
    @@ -933,7 +1962,7 @@
    Parameters
    - + @@ -951,27 +1980,27 @@
    Returns
    -
    ObjectTypesNumberTypes type

    Type

    System.Boolean

    A number?

    +

    Zero?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsSerializerConstructor(ConstructorInfo, Boolean)

    -

    Determine if the constructor is the serializer constructor

    + +

    IsZero(ObjectTypes)

    +

    Is zero?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsSerializerConstructor(this ConstructorInfo ci, bool requireAttribute = false)
    +public static bool IsZero(this ObjectTypes type)
    Parameters
    @@ -984,15 +2013,9 @@
    Parameters
    - - - - - - - - + + @@ -1008,27 +2031,27 @@
    Returns
    -
    System.Reflection.ConstructorInfoci

    Constructor

    -
    System.BooleanrequireAttribute

    Require the StreamSerializerAttribute?

    +
    ObjectTypestype

    Type

    System.Boolean

    Is the serializer constructor?

    +

    Zero?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsUnsigned(NumberTypes)

    -

    Is unsigned?

    + +

    RemoveFlags(NumberTypes)

    +

    Remove flags

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsUnsigned(this NumberTypes type)
    +public static NumberTypes RemoveFlags(this NumberTypes type)
    Parameters
    @@ -1058,28 +2081,28 @@
    Returns
    - - +
    System.Boolean

    Unsigned?

    +
    NumberTypes

    Type without flags

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsUnsigned(ObjectTypes)

    -

    Is unsigned?

    + +

    RemoveFlags(ObjectTypes)

    +

    Remove flags

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsUnsigned(this ObjectTypes type)
    +public static ObjectTypes RemoveFlags(this ObjectTypes type)
    Parameters
    @@ -1109,28 +2132,28 @@
    Returns
    - - +
    System.Boolean

    Unsigned?

    +
    ObjectTypes

    Type without flags

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    IsZero(NumberTypes)

    -

    Is zero?

    + +

    RemoveValueFlags(NumberTypes)

    +

    Remove value flags

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool IsZero(this NumberTypes type)
    +public static NumberTypes RemoveValueFlags(this NumberTypes type)
    Parameters
    @@ -1160,28 +2183,28 @@
    Returns
    - - +
    System.Boolean

    Zero?

    +
    NumberTypes

    Type without value flags

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    RemoveFlags(NumberTypes)

    -

    Remove flags

    + +

    RequiresObjectWriting(NumberTypes)

    +

    Does the type require to write the serialized object?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static NumberTypes RemoveFlags(this NumberTypes type)
    +public static bool RequiresObjectWriting(this NumberTypes type)
    Parameters
    @@ -1211,28 +2234,28 @@
    Returns
    - - +
    NumberTypes

    Type without flags

    +
    System.Boolean

    Is required?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    RemoveFlags(ObjectTypes)

    -

    Remove flags

    + +

    RequiresObjectWriting(ObjectTypes)

    +

    Does the type require to write the serialized object?

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static ObjectTypes RemoveFlags(this ObjectTypes type)
    +public static bool RequiresObjectWriting(this ObjectTypes type)
    Parameters
    @@ -1262,28 +2285,28 @@
    Returns
    - - +
    ObjectTypes

    Type without flags

    +
    System.Boolean

    Is required?

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    RemoveValueFlags(NumberTypes)

    -

    Remove value flags

    + +

    RequiresType(ObjectTypes)

    +

    Determine if a type is required

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static NumberTypes RemoveValueFlags(this NumberTypes type)
    +public static bool RequiresType(this ObjectTypes type)
    Parameters
    @@ -1296,7 +2319,7 @@
    Parameters
    - + @@ -1313,8 +2336,8 @@
    Returns
    - - + @@ -1324,7 +2347,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToBytes(IStreamSerializer, Boolean)

    @@ -1381,7 +2404,7 @@
    Returns
    Improve this Doc - View Source + View Source

    ToObject<T>(Byte[], Boolean)

    @@ -1455,7 +2478,7 @@
    Type Parameters
    Improve this Doc - View Source + View Source

    ValidateDeserializedObject<T>(T)

    @@ -1544,7 +2567,7 @@
    Exceptions
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html index 6b4995a..3a9f826 100644 --- a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html @@ -120,19 +120,19 @@

    Constructors

    | - Improve this Doc + Improve this Doc View Source -

    SerializerOptionsBase(PropertyInfoExt, StreamSerializerAttribute)

    +

    SerializerOptionsBase(Nullable<PropertyInfoExt>, StreamSerializerAttribute)

    Constructor

    Declaration
    -
    protected SerializerOptionsBase(PropertyInfoExt property, StreamSerializerAttribute attr = null)
    +
    protected SerializerOptionsBase(PropertyInfoExt? property, StreamSerializerAttribute attr = null)
    Parameters
    NumberTypesObjectTypes type

    Type

    NumberTypes

    Type without value flags

    +
    System.Boolean

    Is required?

    @@ -145,7 +145,7 @@
    Parameters
    - + @@ -165,7 +165,7 @@

    Properties Improve this Doc - View Source + View Source

    Attribute

    @@ -191,12 +191,74 @@
    Property Value
    wan24.Core.PropertyInfoExtSystem.Nullable<PropertyInfoExt> property

    Target property

    + + | + Improve this Doc + + + View Source + + +

    IsNullable

    +

    Is the value nullable?

    +
    +
    +
    Declaration
    +
    +
    public bool IsNullable { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean
    + + | + Improve this Doc + + + View Source + + +

    KeyOptions

    +

    Key serializer options

    +
    +
    +
    Declaration
    +
    +
    public ISerializerOptions KeyOptions { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    ISerializerOptions
    | Improve this Doc - View Source + View Source

    Property

    @@ -205,7 +267,38 @@

    Declaration
    -
    public PropertyInfoExt Property { get; }
    +
    public PropertyInfoExt? Property { get; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Nullable<PropertyInfoExt>
    + + | + Improve this Doc + + + View Source + + +

    Serializer

    +

    Serializer type

    +
    +
    +
    Declaration
    +
    +
    public SerializerTypes? Serializer { get; set; }
    Property Value
    @@ -217,7 +310,38 @@
    Property Value
    - + + + + +
    wan24.Core.PropertyInfoExtSystem.Nullable<SerializerTypes>
    + + | + Improve this Doc + + + View Source + + +

    ValueOptions

    +

    Value serializer options

    +
    +
    +
    Declaration
    +
    +
    public ISerializerOptions ValueOptions { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + @@ -229,7 +353,7 @@

    Methods Improve this Doc - View Source + View Source

    GetMaxLen(Int32)

    @@ -279,7 +403,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetMaxLen(Int64)

    @@ -329,7 +453,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetMinLen(Int32)

    @@ -379,7 +503,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetMinLen(Int64)

    @@ -429,6 +553,9 @@

    Implements

    ISerializerOptions

    Extension Methods

    + @@ -439,7 +566,10 @@

    Extension Methods

    SerializerHelper.GetObjectSerializerInfo(Object) + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html new file mode 100644 index 0000000..14917f3 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html @@ -0,0 +1,304 @@ + + + + + + + + Class SerializerOptionsFluentExtensions + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    +
    TypeDescription
    ISerializerOptions
    + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Toptions

    Options

    +
    ISerializerOptionskeyOptions

    Key options

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    T

    Options

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Options type

    +
    + + | + Improve this Doc + + + View Source + + +

    WithValueOptions<T>(T, ISerializerOptions)

    +

    Configure value serializer options

    +
    +
    +
    Declaration
    +
    +
    public static T WithValueOptions<T>(this T options, ISerializerOptions valueOptions)
    +    where T : ISerializerOptions
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Toptions

    Options

    +
    ISerializerOptionsvalueOptions

    value options

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    T

    Options

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Options type

    +
    + +
    + + +
    +
    + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.SerializerTypes.html b/docs/api/wan24.StreamSerializerExtensions.SerializerTypes.html new file mode 100644 index 0000000..84f46e7 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.SerializerTypes.html @@ -0,0 +1,237 @@ + + + + + + + + Enum SerializerTypes + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate.html new file mode 100644 index 0000000..ba0a762 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate.html @@ -0,0 +1,155 @@ + + + + + + + + Delegate StreamExtensions.AsyncNullableWriter_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate.html new file mode 100644 index 0000000..6ee006b --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate.html @@ -0,0 +1,174 @@ + + + + + + + + Delegate StreamExtensions.AsyncStreamNullableWiter_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate.html new file mode 100644 index 0000000..32c8067 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate.html @@ -0,0 +1,140 @@ + + + + + + + + Delegate StreamExtensions.NullableWriter_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate.html new file mode 100644 index 0000000..5df5c50 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate.html @@ -0,0 +1,174 @@ + + + + + + + + Delegate StreamExtensions.StreamNullableWiter_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html index 924b4fd..d3b8a9e 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -118,7 +118,7 @@

    Fields Improve this Doc - View Source + View Source

    ArrayEmptyMethod

    Array empty method

    @@ -148,7 +148,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    ReadStructAsyncMethod

    Read struct method

    @@ -178,7 +178,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    ReadStructMethod

    Read struct method

    @@ -203,6 +203,66 @@
    Field Value
    + + | + Improve this Doc + + + View Source + +

    ReadStructNullableAsyncMethod

    +

    Read nullable struct method

    +
    +
    +
    Declaration
    +
    +
    public static readonly MethodInfo ReadStructNullableAsyncMethod
    +
    +
    Field Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Reflection.MethodInfo
    + + | + Improve this Doc + + + View Source + +

    ReadStructNullableMethod

    +

    Read nullable struct method

    +
    +
    +
    Declaration
    +
    +
    public static readonly MethodInfo ReadStructNullableMethod
    +
    +
    Field Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Reflection.MethodInfo

    Properties

    @@ -210,11 +270,11 @@

    Properties Improve this Doc - View Source + View Source

    AnyObjectAttributeRequired

    -

    Require the StreamSerializerAttribute attribute when using ReadAnyObject<T>(Stream, Nullable<Int32>) etc.?

    +
    Declaration
    @@ -243,7 +303,7 @@

    Methods Improve this Doc - View Source + View Source

    ConvertStructureEndianess(Type, Memory<Byte>, StreamSerializerAttribute)

    @@ -286,20 +346,152 @@
    Parameters
    | - Improve this Doc + Improve this Doc + + + View Source + + +

    CreateDeserializationContext(Stream, Nullable<Int32>, Nullable<Int32>, CancellationToken)

    +

    Create a deserialization context for reading from the stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static IDeserializationContext CreateDeserializationContext(this Stream stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream (won't be disposed)

    +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Nullable<System.Int32>cacheSize

    Cache size

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    IDeserializationContext

    Context (don't forget to dispose!)

    +
    + + | + Improve this Doc + + + View Source + + +

    CreateSerializationContext(Stream, Nullable<Int32>, CancellationToken)

    +

    Create a serialization context for writing to the stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static ISerializationContext CreateSerializationContext(this Stream stream, int? cacheSize = null, CancellationToken cancellationToken = null)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream (won't be disposed)

    +
    System.Nullable<System.Int32>cacheSize

    Cache size

    +
    CancellationTokencancellationToken

    Cancellation token

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    ISerializationContext

    Context (don't forget to dispose!)

    +
    + + | + Improve this Doc - View Source + View Source -

    Enumerate<tObject, tEnumerator>(Stream, Nullable<Int32>)

    +

    Enumerate<tObject, tEnumerator>(Stream, IDeserializationContext)

    Enumerate serialized objects

    Declaration
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static IEnumerable<tObject> Enumerate<tObject, tEnumerator>(this Stream stream, int? version = null)
    +public static IEnumerable<tObject> Enumerate<tObject, tEnumerator>(this Stream stream, IDeserializationContext context)
         where tEnumerator : StreamEnumeratorBase<tObject>
    Parameters
    @@ -319,9 +511,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    + IDeserializationContext + context +

    Context

    @@ -365,19 +557,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnumerateAsync<tObject, tEnumerator>(Stream, Nullable<Int32>, CancellationToken)

    +

    EnumerateAsync<tObject, tEnumerator>(Stream, IDeserializationContext)

    Enumerate serialized objects

    Declaration
    -
    public static async IAsyncEnumerable<tObject> EnumerateAsync<tObject, tEnumerator>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +    
    public static async IAsyncEnumerable<tObject> EnumerateAsync<tObject, tEnumerator>(this Stream stream, IDeserializationContext context)
         where tEnumerator : StreamAsyncEnumeratorBase<tObject>
    Parameters
    @@ -397,15 +589,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -449,19 +635,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnumerateNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    EnumerateNumber<T>(Stream, IDeserializationContext)

    Enumerate numbers

    Declaration
    -
    public static IEnumerable<T> EnumerateNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +    
    public static IEnumerable<T> EnumerateNumber<T>(this Stream stream, IDeserializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -481,15 +667,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    + IDeserializationContext + context +

    Context

    @@ -528,19 +708,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnumerateNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    EnumerateNumberAsync<T>(Stream, IDeserializationContext)

    Enumerate numbers

    Declaration
    -
    public static async IAsyncEnumerable<T> EnumerateNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +    
    public static async IAsyncEnumerable<T> EnumerateNumberAsync<T>(this Stream stream, IDeserializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -560,21 +740,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -613,20 +781,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnumerateSerialized<T>(Stream, Nullable<Int32>)

    +

    EnumerateSerialized<T>(Stream, IDeserializationContext)

    Enumerate serialized objects

    Declaration
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static IEnumerable<T> EnumerateSerialized<T>(this Stream stream, int? version = null)
    +public static IEnumerable<T> EnumerateSerialized<T>(this Stream stream, IDeserializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -646,9 +814,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Version

    + IDeserializationContext + context +

    Context

    @@ -687,19 +855,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc View Source -

    EnumerateSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    +

    EnumerateSerializedAsync<T>(Stream, IDeserializationContext)

    Enumerate serialized objects

    Declaration
    -
    public static async IAsyncEnumerable<T> EnumerateSerializedAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +    
    public static async IAsyncEnumerable<T> EnumerateSerializedAsync<T>(this Stream stream, IDeserializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -719,15 +887,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Version

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -766,19 +928,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnumerateString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    +

    EnumerateString(Stream, IDeserializationContext, Int32, Int32)

    Enumerate strings

    Declaration
    -
    public static IEnumerable<string> EnumerateString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static IEnumerable<string> EnumerateString(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -797,15 +959,9 @@
    Parameters
    - - - - - - - - + + @@ -840,19 +996,19 @@
    Returns
    System.Nullable<System.Int32>version

    Version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    EnumerateStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    +

    EnumerateStringAsync(Stream, IDeserializationContext, Int32, Int32)

    Enumerate strings

    Declaration
    -
    public static async IAsyncEnumerable<string> EnumerateStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static async IAsyncEnumerable<string> EnumerateStringAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -871,15 +1027,9 @@
    Parameters
    - - - - - - - - + + @@ -892,12 +1042,6 @@
    Parameters
    - - - - - @@ -920,20 +1064,20 @@
    Returns
    System.Nullable<System.Int32>version

    Version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum UTF-8 string bytes length

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAny(Stream, Nullable<Int32>, ISerializerOptions)

    +

    ReadAny(Stream, IDeserializationContext)

    Read any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions options = null)
    +public static object ReadAny(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -952,15 +1096,9 @@
    Parameters
    - - - - - - - - + + @@ -983,20 +1121,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadAnyAsync(Stream, IDeserializationContext)

    Read any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<object> ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static async Task<object> ReadAnyAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -1015,21 +1153,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -1052,20 +1178,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadAnyNullable(Stream, Nullable<Int32>, ISerializerOptions)

    -

    Read any object

    + +

    ReadAnyItemHeader(ItemDeserializerContext, Int32, Type)

    +

    Read an item header, if the final item type is not specified

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions options = null)
    +
    public static object ReadAnyItemHeader(ItemDeserializerContext context, int index, Type elementType)
    Parameters
    @@ -1078,21 +1203,21 @@
    Parameters
    - - - + + - - - + + - - - + + @@ -1108,27 +1233,26 @@
    Returns
    -
    Streamstream

    Stream

    +
    ItemDeserializerContextcontext

    Context

    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Int32index

    Item index

    ISerializerOptionsoptions

    Options

    +
    TypeelementType

    Element type

    System.Object

    Object

    +

    Cached object

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadAnyNullableAsync(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    -

    Read any object

    + +

    ReadAnyItemHeaderAsync(ItemDeserializerContext, Int32, Type)

    +

    Read an item header, if the final item type is not specified

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<object> ReadAnyNullableAsync(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +
    public static async Task<object> ReadAnyItemHeaderAsync(ItemDeserializerContext context, int index, Type elementType)
    Parameters
    @@ -1141,27 +1265,135 @@
    Parameters
    - - - + + - - - + + - - - + + + +
    Streamstream

    Stream

    +
    ItemDeserializerContextcontext

    Context

    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Int32index

    Item index

    ISerializerOptionsoptions

    Options

    +
    TypeelementType

    Item element type

    +
    Returns
    + + - - - + + + + + + + + + +
    CancellationTokencancellationToken

    Cancellation token

    +
    TypeDescription
    Task<System.Object>

    Item informations

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadAnyNullable(Stream, IDeserializationContext)

    +

    Read any object

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static object ReadAnyNullable(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Object

    Object

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadAnyNullableAsync(Stream, IDeserializationContext)

    +

    Read any object

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<object> ReadAnyNullableAsync(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + @@ -1184,19 +1416,19 @@
    Returns
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObject(Stream, Type, Nullable<Int32>)

    +

    ReadAnyObject(Stream, Type, IDeserializationContext)

    Read any object

    Declaration
    -
    public static object ReadAnyObject(this Stream stream, Type type, int? version = null)
    +
    public static object ReadAnyObject(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -1221,9 +1453,9 @@
    Parameters
    - - - + + @@ -1246,19 +1478,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObject<T>(Stream, Nullable<Int32>)

    +

    ReadAnyObject<T>(Stream, IDeserializationContext)

    Read any object

    Declaration
    -
    public static T ReadAnyObject<T>(this Stream stream, int? version = null)
    +    
    public static T ReadAnyObject<T>(this Stream stream, IDeserializationContext context)
         where T : class, new()
    Parameters
    @@ -1278,9 +1510,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    + IDeserializationContext + context +

    Context

    @@ -1319,19 +1551,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    +

    ReadAnyObjectAsync(Stream, Type, IDeserializationContext)

    Read any object

    Declaration
    -
    public static async Task<object> ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
    +
    public static async Task<object> ReadAnyObjectAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -1356,15 +1588,9 @@
    Parameters
    - - - - - - - - + + @@ -1387,19 +1613,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObjectAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    +

    ReadAnyObjectAsync<T>(Stream, IDeserializationContext)

    Read any object

    Declaration
    -
    public static async Task<T> ReadAnyObjectAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +    
    public static async Task<T> ReadAnyObjectAsync<T>(this Stream stream, IDeserializationContext context)
         where T : class, new()
    Parameters
    @@ -1419,15 +1645,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -1466,20 +1686,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObjectNullable(Stream, Type, Nullable<Int32>)

    +

    ReadAnyObjectNullable(Stream, Type, IDeserializationContext)

    Read any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadAnyObjectNullable(this Stream stream, Type type, int? version = null)
    +public static object ReadAnyObjectNullable(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -1504,9 +1724,9 @@
    Parameters
    - - - + + @@ -1529,20 +1749,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObjectNullable<T>(Stream, Nullable<Int32>)

    +

    ReadAnyObjectNullable<T>(Stream, IDeserializationContext)

    Read any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T ReadAnyObjectNullable<T>(this Stream stream, int? version = null)
    +public static T ReadAnyObjectNullable<T>(this Stream stream, IDeserializationContext context)
         where T : class, new()
    Parameters
    @@ -1562,9 +1782,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    + IDeserializationContext + context +

    Context

    @@ -1603,20 +1823,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObjectNullableAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    +

    ReadAnyObjectNullableAsync(Stream, Type, IDeserializationContext)

    Read any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<object> ReadAnyObjectNullableAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
    +public static async Task<object> ReadAnyObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -1641,15 +1861,9 @@
    Parameters
    - - - - - - - - + + @@ -1672,20 +1886,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadAnyObjectNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    +

    ReadAnyObjectNullableAsync<T>(Stream, IDeserializationContext)

    Read any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T> ReadAnyObjectNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +public static async Task<T> ReadAnyObjectNullableAsync<T>(this Stream stream, IDeserializationContext context)
         where T : class, new()
    Parameters
    @@ -1705,15 +1919,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -1752,20 +1960,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArray(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    +

    ReadArray(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Array ReadArray(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static Array ReadArray(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -1790,15 +1998,9 @@
    Parameters
    - - - - - - - - + + @@ -1811,12 +2013,6 @@
    Parameters
    - - - - - @@ -1839,20 +2035,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArray<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    +

    ReadArray<T>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T[] ReadArray<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static T[] ReadArray<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -1871,15 +2067,9 @@
    Parameters
    - - - - - - - - + + @@ -1892,12 +2082,6 @@
    Parameters
    - - - - - @@ -1936,20 +2120,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArrayAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadArrayAsync(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Array> ReadArrayAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<Array> ReadArrayAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -1974,15 +2158,9 @@
    Parameters
    - - - - - - - - + + @@ -1995,18 +2173,6 @@
    Parameters
    - - - - - - - - - - @@ -2029,20 +2195,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArrayAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadArrayAsync<T>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T[]> ReadArrayAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<T[]> ReadArrayAsync<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2061,15 +2227,9 @@
    Parameters
    - - - - - - - - + + @@ -2082,18 +2242,6 @@
    Parameters
    - - - - - - - - - - @@ -2132,20 +2280,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArrayNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    +

    ReadArrayNullable(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Array? ReadArrayNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static Array? ReadArrayNullable(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2170,15 +2318,9 @@
    Parameters
    - - - - - - - - + + @@ -2191,12 +2333,6 @@
    Parameters
    - - - - - @@ -2219,20 +2355,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArrayNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    +

    ReadArrayNullable<T>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T[] ReadArrayNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static T[] ReadArrayNullable<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2251,15 +2387,9 @@
    Parameters
    - - - - - - - - + + @@ -2272,12 +2402,6 @@
    Parameters
    - - - - - @@ -2316,20 +2440,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArrayNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadArrayNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Array?> ReadArrayNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<Array?> ReadArrayNullableAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2354,15 +2478,9 @@
    Parameters
    - - - - - - - - + + @@ -2375,18 +2493,6 @@
    Parameters
    - - - - - - - - - - @@ -2409,20 +2515,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadArrayNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadArrayNullableAsync<T>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T[]> ReadArrayNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<T[]> ReadArrayNullableAsync<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2441,15 +2547,9 @@
    Parameters
    - - - - - - - - + + @@ -2462,18 +2562,6 @@
    Parameters
    - - - - - - - - - - @@ -2512,19 +2600,19 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBool(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadBool(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static bool ReadBool(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static bool ReadBool(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -2543,15 +2631,9 @@
    Parameters
    - - - - - - - - + + @@ -2574,19 +2656,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBoolAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadBoolAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<bool> ReadBoolAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<bool> ReadBoolAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -2605,21 +2687,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -2642,20 +2712,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBoolNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadBoolNullable(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +public static bool? ReadBoolNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -2674,15 +2744,9 @@
    Parameters
    - - - - - - - - + + @@ -2705,20 +2769,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBoolNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadBoolNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<bool?> ReadBoolNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<bool?> ReadBoolNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -2737,21 +2801,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -2774,19 +2826,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBytes(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

    +

    ReadBytes(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    -
    public static (byte[] Value, int Length) ReadBytes(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static (byte[] Value, int Length) ReadBytes(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2805,21 +2857,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -2854,19 +2894,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Result buffer to use

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBytesAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

    +

    ReadBytesAsync(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    -
    public static async Task<(byte[] Value, int Length)> ReadBytesAsync(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static async Task<(byte[] Value, int Length)> ReadBytesAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2885,21 +2925,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -2912,12 +2940,6 @@
    Parameters
    - - - - - @@ -2940,20 +2962,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Result buffer to use

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the pool after use!)

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBytesNullable(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32)

    +

    ReadBytesNullable(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static (byte[] Value, int Length)? ReadBytesNullable(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +public static (byte[] Value, int Length)? ReadBytesNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -2972,22 +2994,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -3022,20 +3031,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Result buffer to use

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the -pool after use!)

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadBytesNullableAsync(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, Int32, Int32, CancellationToken)

    +

    ReadBytesNullableAsync(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<(byte[] Value, int Length)?> ReadBytesNullableAsync(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +public static async Task<(byte[] Value, int Length)?> ReadBytesNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -3054,22 +3063,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -3082,12 +3078,6 @@
    Parameters
    - - - - - @@ -3110,19 +3100,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Result buffer to use

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (if given, and buffer is null, the returned value is a pool array which needs to be returned to the -pool after use!)

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDecimal(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadDecimal(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static decimal ReadDecimal(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -3141,15 +3131,9 @@
    Parameters
    - - - - - - - - + + @@ -3172,19 +3156,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDecimalAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadDecimalAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<decimal> ReadDecimalAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<decimal> ReadDecimalAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -3203,21 +3187,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -3240,19 +3212,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDecimalNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadDecimalNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static decimal? ReadDecimalNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -3271,15 +3243,9 @@
    Parameters
    - - - - - - - - + + @@ -3302,19 +3268,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDecimalNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadDecimalNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<decimal?> ReadDecimalNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<decimal?> ReadDecimalNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -3333,21 +3299,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -3370,20 +3324,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDict(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    +

    ReadDict(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static IDictionary ReadDict(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    +public static IDictionary ReadDict(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -3408,15 +3362,9 @@
    Parameters
    - - - - - - - - + + @@ -3429,18 +3377,6 @@
    Parameters
    - - - - - - - - - - @@ -3463,20 +3399,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDict<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    +

    ReadDict<tKey, tValue>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Dictionary<tKey, tValue> ReadDict<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    +public static Dictionary<tKey, tValue> ReadDict<tKey, tValue>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -3495,15 +3431,9 @@
    Parameters
    - - - - - - - - + + @@ -3516,18 +3446,6 @@
    Parameters
    - - - - - - - - - - @@ -3571,20 +3489,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDictAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    +

    ReadDictAsync(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<IDictionary> ReadDictAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<IDictionary> ReadDictAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -3609,15 +3527,9 @@
    Parameters
    - - - - - - - - + + @@ -3630,24 +3542,6 @@
    Parameters
    - - - - - - - - - - - - - - - @@ -3670,20 +3564,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDictAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    +

    ReadDictAsync<tKey, tValue>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Dictionary<tKey, tValue>> ReadDictAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<Dictionary<tKey, tValue>> ReadDictAsync<tKey, tValue>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -3702,15 +3596,9 @@
    Parameters
    - - - - - - - - + + @@ -3723,24 +3611,6 @@
    Parameters
    - - - - - - - - - - - - - - - @@ -3784,20 +3654,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDictNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    +

    ReadDictNullable(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static IDictionary ReadDictNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    +public static IDictionary ReadDictNullable(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -3822,15 +3692,9 @@
    Parameters
    - - - - - - - - + + @@ -3843,18 +3707,6 @@
    Parameters
    - - - - - - - - - - @@ -3877,20 +3729,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDictNullable<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions)

    +

    ReadDictNullable<tKey, tValue>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Dictionary<tKey, tValue>? ReadDictNullable<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null)
    +public static Dictionary<tKey, tValue>? ReadDictNullable<tKey, tValue>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -3909,15 +3761,9 @@
    Parameters
    - - - - - - - - + + @@ -3930,18 +3776,6 @@
    Parameters
    - - - - - - - - - - @@ -3985,20 +3819,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDictNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    +

    ReadDictNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<IDictionary> ReadDictNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<IDictionary> ReadDictNullableAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -4023,15 +3857,9 @@
    Parameters
    - - - - - - - - + + @@ -4044,24 +3872,6 @@
    Parameters
    - - - - - - - - - - - - - - - @@ -4084,20 +3894,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDictNullableAsync<tKey, tValue>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken)

    +

    ReadDictNullableAsync<tKey, tValue>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Dictionary<tKey, tValue>?> ReadDictNullableAsync<tKey, tValue>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions keyOptions = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<Dictionary<tKey, tValue>?> ReadDictNullableAsync<tKey, tValue>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -4116,15 +3926,9 @@
    Parameters
    - - - - - - - - + + @@ -4137,24 +3941,6 @@
    Parameters
    - - - - - - - - - - - - - - - @@ -4198,19 +3984,19 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionskeyOptions

    Key serializer options

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDouble(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadDouble(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static double ReadDouble(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static double ReadDouble(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -4229,15 +4015,9 @@
    Parameters
    - - - - - - - - + + @@ -4260,19 +4040,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDoubleAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadDoubleAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<double> ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<double> ReadDoubleAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -4291,21 +4071,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -4328,19 +4096,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDoubleNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadDoubleNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static double? ReadDoubleNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -4359,15 +4127,9 @@
    Parameters
    - - - - - - - - + + @@ -4390,19 +4152,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadDoubleNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadDoubleNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<double?> ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<double?> ReadDoubleNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -4421,21 +4183,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -4458,19 +4208,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnum(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadEnum(Stream, Type, IDeserializationContext)

    Read

    Declaration
    -
    public static Enum ReadEnum(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    +
    public static Enum ReadEnum(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -4495,15 +4245,9 @@
    Parameters
    - - - - - - - - + + @@ -4526,19 +4270,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnum<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadEnum<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static T ReadEnum<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +    
    public static T ReadEnum<T>(this Stream stream, IDeserializationContext context)
         where T : struct, Enum
    Parameters
    @@ -4558,15 +4302,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    + IDeserializationContext + context +

    Context

    @@ -4605,19 +4343,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnumAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadEnumAsync(Stream, Type, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<Enum> ReadEnumAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<Enum> ReadEnumAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -4642,21 +4380,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -4679,19 +4405,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnumAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadEnumAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static async Task<T> ReadEnumAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +    
    public static async Task<T> ReadEnumAsync<T>(this Stream stream, IDeserializationContext context)
         where T : struct, Enum
    Parameters
    @@ -4711,21 +4437,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -4764,20 +4478,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnumNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadEnumNullable(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Enum? ReadEnumNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    +public static Enum? ReadEnumNullable(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -4802,15 +4516,9 @@
    Parameters
    - - - - - - - - + + @@ -4833,20 +4541,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnumNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadEnumNullable<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T? ReadEnumNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +public static T? ReadEnumNullable<T>(this Stream stream, IDeserializationContext context)
         where T : struct, Enum
    Parameters
    @@ -4866,15 +4574,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    + IDeserializationContext + context +

    Context

    @@ -4913,20 +4615,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnumNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadEnumNullableAsync(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Enum?> ReadEnumNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<Enum?> ReadEnumNullableAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -4951,21 +4653,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -4988,20 +4678,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadEnumNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadEnumNullableAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T?> ReadEnumNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<T?> ReadEnumNullableAsync<T>(this Stream stream, IDeserializationContext context)
         where T : struct, Enum
    Parameters
    @@ -5021,21 +4711,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -5074,20 +4752,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFixedArray(Stream, Array, Nullable<Int32>, ISerializerOptions)

    +

    ReadFixedArray(Stream, Array, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Array ReadFixedArray(this Stream stream, Array arr, int? version = null, ISerializerOptions valueOptions = null)
    +public static Array ReadFixedArray(this Stream stream, Array arr, IDeserializationContext context)
    Parameters
    @@ -5112,15 +4790,9 @@
    Parameters
    - - - - - - - - + + @@ -5143,20 +4815,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFixedArray<T>(Stream, T[], Nullable<Int32>, ISerializerOptions)

    +

    ReadFixedArray<T>(Stream, T[], IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T[] ReadFixedArray<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null)
    +public static T[] ReadFixedArray<T>(this Stream stream, T[] arr, IDeserializationContext context)
    Parameters
    @@ -5181,15 +4853,9 @@
    Parameters
    - - - - - - - - + + @@ -5228,20 +4894,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFixedArray<T>(Stream, Span<T>, Nullable<Int32>, ISerializerOptions)

    +

    ReadFixedArray<T>(Stream, Span<T>, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Span<T> ReadFixedArray<T>(this Stream stream, Span<T> arr, int? version = null, ISerializerOptions valueOptions = null)
    +public static Span<T> ReadFixedArray<T>(this Stream stream, Span<T> arr, IDeserializationContext context)
    Parameters
    @@ -5266,15 +4932,9 @@
    Parameters
    - - - - - - - - + + @@ -5313,20 +4973,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFixedArrayAsync(Stream, Array, Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadFixedArrayAsync(Stream, Array, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Array> ReadFixedArrayAsync(this Stream stream, Array arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<Array> ReadFixedArrayAsync(this Stream stream, Array arr, IDeserializationContext context)
    Parameters
    @@ -5351,21 +5011,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -5388,20 +5036,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFixedArrayAsync<T>(Stream, T[], Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadFixedArrayAsync<T>(Stream, T[], IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T[]> ReadFixedArrayAsync<T>(this Stream stream, T[] arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<T[]> ReadFixedArrayAsync<T>(this Stream stream, T[] arr, IDeserializationContext context)
    Parameters
    @@ -5426,21 +5074,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -5479,20 +5115,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFixedArrayAsync<T>(Stream, Memory<T>, Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadFixedArrayAsync<T>(Stream, Memory<T>, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Memory<T>> ReadFixedArrayAsync<T>(this Stream stream, Memory<T> arr, int? version = null, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<Memory<T>> ReadFixedArrayAsync<T>(this Stream stream, Memory<T> arr, IDeserializationContext context)
    Parameters
    @@ -5517,21 +5153,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -5570,19 +5194,19 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsvalueOptions

    Value deserializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFloat(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadFloat(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static float ReadFloat(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static float ReadFloat(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -5601,15 +5225,9 @@
    Parameters
    - - - - - - - - + + @@ -5632,19 +5250,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFloatAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadFloatAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<float> ReadFloatAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<float> ReadFloatAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -5663,21 +5281,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -5700,19 +5306,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFloatNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadFloatNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static float? ReadFloatNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -5731,15 +5337,9 @@
    Parameters
    - - - - - - - - + + @@ -5762,19 +5362,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadFloatNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadFloatNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<float?> ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<float?> ReadFloatNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -5793,21 +5393,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -5830,19 +5418,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadInt(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static int ReadInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static int ReadInt(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -5861,15 +5449,9 @@
    Parameters
    - - - - - - - - + + @@ -5892,19 +5474,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadIntAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<int> ReadIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<int> ReadIntAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -5923,21 +5505,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -5960,19 +5530,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadIntNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static int? ReadIntNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -5991,15 +5561,9 @@
    Parameters
    - - - - - - - - + + @@ -6022,19 +5586,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadIntNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<int?> ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<int?> ReadIntNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -6053,21 +5617,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -6090,20 +5642,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadList(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    -

    Read

    + +

    ReadItem(ItemDeserializerContext)

    +

    Read an item using a specified serializer

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static IList ReadList(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +
    public static dynamic ReadItem(ItemDeserializerContext context)
    Parameters
    @@ -6116,45 +5667,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -6169,28 +5684,27 @@
    Returns
    - - +
    Streamstream

    Stream

    -
    Typetype

    List type

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length

    -
    System.Int32maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    +
    ItemDeserializerContextcontext

    Context

    System.Collections.IList

    Value

    +
    System.Object

    Item

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadList<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    -

    Read

    + +

    ReadItemAsync(ItemDeserializerContext)

    +

    Read an item using a specified serializer

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static List<T> ReadList<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +
    public static async Task<dynamic> ReadItemAsync(ItemDeserializerContext context)
    Parameters
    @@ -6203,21 +5717,72 @@
    Parameters
    - - - + + - - - - +
    Streamstream

    Stream

    +
    ItemDeserializerContextcontext

    Context

    System.Nullable<System.Int32>version

    Serializer version

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.Object>

    Item

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadList(Stream, Type, IDeserializationContext, Int32, Int32)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static IList ReadList(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + - - - + + @@ -6230,12 +5795,75 @@
    Parameters
    + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Typetype

    List type

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Collections.IList

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadList<T>(Stream, IDeserializationContext, Int32, Int32)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static List<T> ReadList<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + - - - + + @@ -6274,20 +5902,20 @@
    Type Parameters
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length

    ISerializerOptionsvalueOptions

    Value serializer options

    +
    System.Int32maxLen

    Maximum length

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadListAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadListAsync(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<IList> ReadListAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<IList> ReadListAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -6312,15 +5940,9 @@
    Parameters
    - - - - - - - - + + @@ -6333,18 +5955,6 @@
    Parameters
    - - - - - - - - - - @@ -6367,20 +5977,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadListAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadListAsync<T>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<List<T>> ReadListAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<List<T>> ReadListAsync<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -6399,15 +6009,9 @@
    Parameters
    - - - - - - - - + + @@ -6420,18 +6024,6 @@
    Parameters
    - - - - - - - - - - @@ -6470,20 +6062,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadListNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    +

    ReadListNullable(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static IList ReadListNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static IList ReadListNullable(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -6508,15 +6100,9 @@
    Parameters
    - - - - - - - - + + @@ -6529,12 +6115,6 @@
    Parameters
    - - - - - @@ -6557,20 +6137,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadListNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions)

    +

    ReadListNullable<T>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static List<T>? ReadListNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null)
    +public static List<T>? ReadListNullable<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -6589,15 +6169,9 @@
    Parameters
    - - - - - - - - + + @@ -6610,12 +6184,6 @@
    Parameters
    - - - - - @@ -6654,20 +6222,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadListNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadListNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<IList> ReadListNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<IList> ReadListNullableAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -6692,15 +6260,9 @@
    Parameters
    - - - - - - - - + + @@ -6713,18 +6275,6 @@
    Parameters
    - - - - - - - - - - @@ -6747,20 +6297,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadListNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, ISerializerOptions, CancellationToken)

    +

    ReadListNullableAsync<T>(Stream, IDeserializationContext, Int32, Int32)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<List<T>?> ReadListNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, ISerializerOptions valueOptions = null, CancellationToken cancellationToken = null)
    +public static async Task<List<T>?> ReadListNullableAsync<T>(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    Parameters
    @@ -6779,15 +6329,9 @@
    Parameters
    - - - - - - - - + + @@ -6800,18 +6344,6 @@
    Parameters
    - - - - - - - - - - @@ -6850,19 +6382,19 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Int32 maxLen

    Maximum length

    -
    ISerializerOptionsvalueOptions

    Value serializer options

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadLong(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadLong(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static long ReadLong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static long ReadLong(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -6881,15 +6413,9 @@
    Parameters
    - - - - - - - - + + @@ -6912,19 +6438,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadLongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadLongAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<long> ReadLongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<long> ReadLongAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -6943,21 +6469,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -6980,19 +6494,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadLongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadLongNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static long? ReadLongNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -7011,15 +6525,9 @@
    Parameters
    - - - - - - - - + + @@ -7042,19 +6550,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadLongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadLongNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<long?> ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<long?> ReadLongNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -7073,21 +6581,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -7110,19 +6606,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc View Source -

    ReadNumber(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadNumber(Stream, Type, IDeserializationContext)

    Read

    Declaration
    -
    public static object ReadNumber(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    +
    public static object ReadNumber(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -7147,15 +6643,9 @@
    Parameters
    - - - - - - - - + + @@ -7178,19 +6668,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadNumber<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadNumber<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static T ReadNumber<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +    
    public static T ReadNumber<T>(this Stream stream, IDeserializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -7210,15 +6700,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    + IDeserializationContext + context +

    Context

    @@ -7256,19 +6740,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadNumberAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadNumberAsync(Stream, Type, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<object> ReadNumberAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<object> ReadNumberAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -7293,21 +6777,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -7330,19 +6802,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadNumberAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadNumberAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static async Task<T> ReadNumberAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +    
    public static async Task<T> ReadNumberAsync<T>(this Stream stream, IDeserializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -7362,21 +6834,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -7414,20 +6874,144 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc + + + View Source + + +

    ReadNumberInt(IDeserializationContext, Type, Nullable<NumberTypes>)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static object ReadNumberInt(IDeserializationContext context, Type resType, NumberTypes? numberType)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    IDeserializationContextcontext

    Context

    +
    TyperesType

    Resulting number type

    +
    System.Nullable<NumberTypes>numberType

    Number type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Object

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadNumberIntAsync(IDeserializationContext, Type, Nullable<NumberTypes>)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<object> ReadNumberIntAsync(IDeserializationContext context, Type resType, NumberTypes? numberType)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    IDeserializationContextcontext

    Context

    +
    TyperesType

    Resulting number type

    +
    System.Nullable<NumberTypes>numberType

    Number type

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.Object>

    Value

    +
    + + | + Improve this Doc - View Source + View Source -

    ReadNumberNullable(Stream, Type, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadNumberNullable(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null)
    +public static object ReadNumberNullable(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -7452,15 +7036,9 @@
    Parameters
    - - - - - - - - + + @@ -7483,20 +7061,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadNumberNullable<T>(Stream, Nullable<Int32>, ArrayPool<Byte>)

    +

    ReadNumberNullable<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T? ReadNumberNullable<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +public static T? ReadNumberNullable<T>(this Stream stream, IDeserializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -7516,15 +7094,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    + IDeserializationContext + context +

    Context

    @@ -7562,20 +7134,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadNumberNullableAsync(Stream, Type, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadNumberNullableAsync(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<object> ReadNumberNullableAsync(this Stream stream, Type type, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static Task<object> ReadNumberNullableAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -7600,21 +7172,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -7637,20 +7197,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadNumberNullableAsync<T>(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    +

    ReadNumberNullableAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<T?> ReadNumberNullableAsync<T>(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static Task<T?> ReadNumberNullableAsync<T>(this Stream stream, IDeserializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -7670,21 +7230,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - System.Buffers.ArrayPool<System.Byte> - pool -

    Array pool

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -7723,20 +7271,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadObject(Stream, Type, Nullable<Int32>, ISerializerOptions)

    +

    ReadObject(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadObject(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
    +public static object ReadObject(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -7761,15 +7309,9 @@
    Parameters
    - - - - - - - - + + @@ -7792,20 +7334,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc View Source -

    ReadObject<T>(Stream, Nullable<Int32>, ISerializerOptions)

    +

    ReadObject<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T ReadObject<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
    +public static T ReadObject<T>(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -7824,15 +7366,9 @@
    Parameters
    - - - - - - - - + + @@ -7871,20 +7407,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadObjectAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadObjectAsync(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<object> ReadObjectAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static Task<object> ReadObjectAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -7909,21 +7445,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -7946,20 +7470,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadObjectAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadObjectAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<T> ReadObjectAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static Task<T> ReadObjectAsync<T>(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -7978,21 +7502,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -8031,20 +7543,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadObjectNullable(Stream, Type, Nullable<Int32>, ISerializerOptions)

    +

    ReadObjectNullable(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static object ReadObjectNullable(this Stream stream, Type type, int? version = null, ISerializerOptions options = null)
    +public static object ReadObjectNullable(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -8069,15 +7581,9 @@
    Parameters
    - - - - - - - - + + @@ -8100,20 +7606,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadObjectNullable<T>(Stream, Nullable<Int32>, ISerializerOptions)

    +

    ReadObjectNullable<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T ReadObjectNullable<T>(this Stream stream, int? version = null, ISerializerOptions options = null)
    +public static T ReadObjectNullable<T>(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8132,15 +7638,9 @@
    Parameters
    - - - - - - - - + + @@ -8179,20 +7679,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadObjectNullableAsync(Stream, Type, Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadObjectNullableAsync(Stream, Type, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<object> ReadObjectNullableAsync(this Stream stream, Type type, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static async Task<object> ReadObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -8217,21 +7717,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -8254,20 +7742,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadObjectNullableAsync<T>(Stream, Nullable<Int32>, ISerializerOptions, CancellationToken)

    +

    ReadObjectNullableAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T> ReadObjectNullableAsync<T>(this Stream stream, int? version = null, ISerializerOptions options = null, CancellationToken cancellationToken = null)
    +public static async Task<T> ReadObjectNullableAsync<T>(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8286,21 +7774,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -8339,20 +7815,20 @@
    Type Parameters
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Options

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneByte(Stream, Nullable<Int32>)

    +

    ReadOneByte(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static byte ReadOneByte(this Stream stream, int? version = null)
    +public static byte ReadOneByte(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8371,9 +7847,9 @@
    Parameters
    - - - + + @@ -8396,20 +7872,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneByteAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    ReadOneByteAsync(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<byte> ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +public static Task<byte> ReadOneByteAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8428,15 +7904,9 @@
    Parameters
    - - - - - - - - + + @@ -8459,19 +7929,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneByteNullable(Stream, Nullable<Int32>)

    +

    ReadOneByteNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static ushort? ReadOneByteNullable(this Stream stream, int? version = null)
    +
    public static ushort? ReadOneByteNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8490,9 +7960,9 @@
    Parameters
    - - - + + @@ -8515,19 +7985,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    ReadOneByteNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<byte?> ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    public static Task<byte?> ReadOneByteNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8546,15 +8016,9 @@
    Parameters
    - - - - - - - - + + @@ -8577,20 +8041,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneSByte(Stream, Nullable<Int32>)

    +

    ReadOneSByte(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static sbyte ReadOneSByte(this Stream stream, int? version = null)
    +public static sbyte ReadOneSByte(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8609,9 +8073,9 @@
    Parameters
    - - - + + @@ -8634,20 +8098,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneSByteAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    ReadOneSByteAsync(Stream, IDeserializationContext)

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<sbyte> ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +public static Task<sbyte> ReadOneSByteAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8666,15 +8130,9 @@
    Parameters
    - - - - - - - - + + @@ -8697,19 +8155,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneSByteNullable(Stream, Nullable<Int32>)

    +

    ReadOneSByteNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null)
    +
    public static sbyte? ReadOneSByteNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8728,9 +8186,9 @@
    Parameters
    - - - + + @@ -8753,19 +8211,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadOneSByteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    ReadOneSByteNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<sbyte?> ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +
    public static Task<sbyte?> ReadOneSByteNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8784,15 +8242,9 @@
    Parameters
    - - - - - - - - + + @@ -8815,20 +8267,20 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerialized<T>(Stream, Nullable<Int32>)

    -

    Read

    + +

    ReadSerializableType(Stream, Int32, ObjectTypes, IDeserializationContext)

    +

    Read a serializable type (

    Declaration
    -
    public static T ReadSerialized<T>(this Stream stream, int? version = null)
    -    where T : class, IStreamSerializer
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Type ReadSerializableType(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context)
    Parameters
    @@ -8847,9 +8299,21 @@
    Parameters
    - - - + + + + + + + + + + + + @@ -8864,44 +8328,85 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Int32objVersion

    Pre-red object version

    +
    ObjectTypesobjType

    Pre-red object type

    +
    IDeserializationContextcontext

    Context

    T

    Object

    +
    Type

    Type

    -
    Type Parameters
    + + | + Improve this Doc + + + View Source + + +

    ReadSerializableType(Stream, IDeserializationContext)

    +

    Read a serializable type (

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Type ReadSerializableType(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + - - + + + + + + + + + +
    Type Name Description
    T

    Object type

    +
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + +
    TypeDescription
    Type

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    -

    Read

    + +

    ReadSerializableTypeAsync(Stream, Int32, ObjectTypes, IDeserializationContext)

    +

    Read a type

    Declaration
    -
    public static Task<T> ReadSerializedAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    -    where T : class, IStreamSerializer
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Type> ReadSerializableTypeAsync(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context)
    Parameters
    @@ -8920,15 +8425,21 @@
    Parameters
    - - - + + - - - + + + + + + + @@ -8943,44 +8454,85 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Int32objVersion

    Pre-red object version

    CancellationTokencancellationToken

    Cancellation token

    +
    ObjectTypesobjType

    Pre-red object type

    +
    IDeserializationContextcontext

    Context

    Task<T>

    Object

    +
    Task<Type>

    Type

    -
    Type Parameters
    + + | + Improve this Doc + + + View Source + + +

    ReadSerializableTypeAsync(Stream, IDeserializationContext)

    +

    Read a type

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Type> ReadSerializableTypeAsync(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + - - + + + + + + + + + +
    Type Name Description
    T

    Object type

    +
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + +
    TypeDescription
    Task<Type>

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedData(Stream, Int32, ArrayPool<Byte>)

    -

    Read serialized data

    + +

    ReadSerializableTypeNullable(Stream, IDeserializationContext)

    +

    Read a serializable type (

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool<byte> pool = null)
    +public static Type? ReadSerializableTypeNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -8999,15 +8551,9 @@
    Parameters
    - - - - - - - - + + @@ -9022,29 +8568,28 @@
    Returns
    - - +
    System.Int32len

    Length in bytes

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    IDeserializationContextcontext

    Context

    System.Byte[]

    Serialized data (a pool array which needs to be returned to the pool (BufferPool will be used per default) after use and might -be larger than the given length!)

    +
    System.Nullable<Type>

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedDataAsync(Stream, Int32, ArrayPool<Byte>, CancellationToken)

    -

    Read serialized data

    + +

    ReadSerializableTypeNullableAsync(Stream, IDeserializationContext)

    +

    Read a type

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<byte[]> ReadSerializedDataAsync(this Stream stream, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<Type?> ReadSerializableTypeNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -9063,21 +8608,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -9092,29 +8625,27 @@
    Returns
    - - +
    System.Int32len

    Length in bytes

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.Byte[]>

    Serialized data (a pool array which needs to be returned to the pool (BufferPool will be used per default) after use and might -be larger than the given length!)

    +
    Task<System.Nullable<Type>>

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedNullable<T>(Stream, Nullable<Int32>)

    + +

    ReadSerialized<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static T ReadSerializedNullable<T>(this Stream stream, int? version = null)
    +    
    public static T ReadSerialized<T>(this Stream stream, IDeserializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -9134,9 +8665,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    + IDeserializationContext + context +

    Context

    @@ -9175,20 +8706,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    + +

    ReadSerializedAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T> ReadSerializedNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    +    
    public static Task<T> ReadSerializedAsync<T>(this Stream stream, IDeserializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -9208,15 +8738,9 @@
    Parameters
    - System.Nullable<System.Int32> - version -

    Serializer version

    - - - - CancellationToken - cancellationToken -

    Cancellation token

    + IDeserializationContext + context +

    Context

    @@ -9255,19 +8779,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedObject(Stream, Type, Nullable<Int32>)

    -

    Read

    + +

    ReadSerializedData(Stream, Int32, IDeserializationContext)

    +

    Read serialized data

    Declaration
    -
    public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, int? version = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static byte[] ReadSerializedData(this Stream stream, int len, IDeserializationContext context)
    Parameters
    @@ -9286,15 +8811,15 @@
    Parameters
    - - - + + - - - + + @@ -9309,27 +8834,28 @@
    Returns
    - - +
    Typetype

    Object type

    +
    System.Int32len

    Length in bytes

    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    IStreamSerializer

    Object

    +
    System.Byte[]

    Serialized data (a pool array which needs to be returned to the context buffer pool after use and might be larger than the given length!)

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedObjectAsync(Stream, Type, Nullable<Int32>, CancellationToken)

    -

    Read

    + +

    ReadSerializedDataAsync(Stream, Int32, IDeserializationContext)

    +

    Read serialized data

    Declaration
    -
    public static Task<IStreamSerializer> ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<byte[]> ReadSerializedDataAsync(this Stream stream, int len, IDeserializationContext context)
    Parameters
    @@ -9348,21 +8874,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -9377,28 +8897,29 @@
    Returns
    - - +
    Typetype

    Type

    -
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Int32len

    Length in bytes

    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<IStreamSerializer>

    Object

    +
    Task<System.Byte[]>

    Serialized data (a pool array which needs to be returned to the context buffer pool after use and might be larger than the given length!)

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedStruct<T>(Stream, Nullable<Int32>)

    + +

    ReadSerializedNullable<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static T ReadSerializedStruct<T>(this Stream stream, int? version = null)
    -    where T : struct, IStreamSerializer
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static T ReadSerializedNullable<T>(this Stream stream, IDeserializationContext context)
    +    where T : class, IStreamSerializer
    Parameters
    @@ -9417,9 +8938,9 @@
    Parameters
    - - - + + @@ -9435,7 +8956,7 @@
    Returns
    - @@ -9451,27 +8972,28 @@
    Type Parameters
    -
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    T

    Structure

    +

    Object

    T

    Structure type

    +

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedStructAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    + +

    ReadSerializedNullableAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<T> ReadSerializedStructAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    -    where T : struct, IStreamSerializer
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<T> ReadSerializedNullableAsync<T>(this Stream stream, IDeserializationContext context)
    +    where T : class, IStreamSerializer
    Parameters
    @@ -9490,15 +9012,9 @@
    Parameters
    - - - - - - - - + + @@ -9514,7 +9030,7 @@
    Returns
    - @@ -9530,28 +9046,26 @@
    Type Parameters
    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<T>

    Structure

    +

    Object

    T

    Structure type

    +

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedStructNullable<T>(Stream, Nullable<Int32>)

    + +

    ReadSerializedObject(Stream, Type, IDeserializationContext)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static T? ReadSerializedStructNullable<T>(this Stream stream, int? version = null)
    -    where T : struct, IStreamSerializer
    +
    public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -9570,9 +9084,15 @@
    Parameters
    - - - + + + + + + + @@ -9587,45 +9107,27 @@
    Returns
    - - - - -
    System.Nullable<System.Int32>version

    Serializer version

    +
    Typetype

    Object type

    +
    IDeserializationContextcontext

    Context

    System.Nullable<T>

    Structure

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Structure type

    +
    IStreamSerializer

    Object

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializedStructNullableAsync<T>(Stream, Nullable<Int32>, CancellationToken)

    + +

    ReadSerializedObjectAsync(Stream, Type, IDeserializationContext)

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T?> ReadSerializedStructNullableAsync<T>(this Stream stream, int? version = null, CancellationToken cancellationToken = null)
    -    where T : struct, IStreamSerializer
    +
    public static Task<IStreamSerializer> ReadSerializedObjectAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -9644,15 +9146,15 @@
    Parameters
    - - - + + - - - + + @@ -9667,44 +9169,28 @@
    Returns
    - - - - -
    System.Nullable<System.Int32>version

    Serializer version

    +
    Typetype

    Type

    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.Nullable<T>>

    Structure

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Structure type

    +
    Task<IStreamSerializer>

    Object

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializerVersion(Stream)

    -

    Read the serializer version

    + +

    ReadSerializedObjectNullable(Stream, Type, IDeserializationContext)

    +

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static int ReadSerializerVersion(this Stream stream)
    +public static object ReadSerializedObjectNullable(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -9719,7 +9205,19 @@
    Parameters
    - + + + + + + + + + + @@ -9734,28 +9232,28 @@
    Returns
    - - +
    Stream stream

    Steam

    +

    Stream

    +
    Typetype

    Type

    +
    IDeserializationContextcontext

    Context

    System.Int32

    Serializer version

    +
    System.Object

    Object

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadSerializerVersionAsync(Stream, CancellationToken)

    -

    Read the serializer version

    + +

    ReadSerializedObjectNullableAsync(Stream, Type, IDeserializationContext)

    +

    Read

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<int> ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    +public static async Task<object> ReadSerializedObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context)
    Parameters
    @@ -9770,13 +9268,19 @@
    Parameters
    - - - - + + + + + + + @@ -9791,27 +9295,28 @@
    Returns
    - - +
    Stream stream

    Steam

    +

    Stream

    CancellationTokencancellationToken

    Cancellation token

    +
    Typetype

    Type

    +
    IDeserializationContextcontext

    Context

    Task<System.Int32>

    Serializer version

    +
    Task<System.Object>

    Object

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadSerializedStruct<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static short ReadShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    public static T ReadSerializedStruct<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct, IStreamSerializer
    Parameters
    @@ -9830,50 +9335,61 @@
    Parameters
    - - - + + + +
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    +
    Returns
    + + + + + + + + - - - +
    TypeDescription
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    T

    Structure

    -
    Returns
    +
    Type Parameters
    - + - - +
    TypeName Description
    System.Int16

    Value

    +
    T

    Structure type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadSerializedStructAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<short> ReadShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    public static Task<T> ReadSerializedStructAsync<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct, IStreamSerializer
    Parameters
    @@ -9892,56 +9408,62 @@
    Parameters
    - - - + + + +
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    +
    Returns
    + + - - - + + + + - - - +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    TypeDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    Task<T>

    Structure

    -
    Returns
    +
    Type Parameters
    - + - - +
    TypeName Description
    Task<System.Int16>

    Value

    +
    T

    Structure type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    + +

    ReadSerializedStructNullable<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static T? ReadSerializedStructNullable<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct, IStreamSerializer
    Parameters
    @@ -9960,50 +9482,62 @@
    Parameters
    - - - + + + +
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    +
    Returns
    + + + + + + + + - - - +
    TypeDescription
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<T>

    Structure

    -
    Returns
    +
    Type Parameters
    - + - - +
    TypeName Description
    System.Nullable<System.Int16>

    Value

    +
    T

    Structure type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    + +

    ReadSerializedStructNullableAsync<T>(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<short?> ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<T?> ReadSerializedStructNullableAsync<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct, IStreamSerializer
    Parameters
    @@ -10022,56 +9556,61 @@
    Parameters
    - - - + + + +
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    +
    Returns
    + + - - - + + + + - - - +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    TypeDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    Task<System.Nullable<T>>

    Structure

    -
    Returns
    +
    Type Parameters
    - + - - +
    TypeName Description
    Task<System.Nullable<System.Int16>>

    Value

    +
    T

    Structure type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStream(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

    -

    Read a stream

    + +

    ReadSerializerVersion(Stream, IDeserializationContext)

    +

    Read the serializer version

    Declaration
    -
    public static Stream ReadStream(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static int ReadSerializerVersion(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10086,43 +9625,13 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -10137,28 +9646,28 @@
    Returns
    - - +
    Stream stream

    Stream

    -
    Streamtarget

    Target stream (the position won't be reset)

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>maxBufferSize

    Maximum buffer size in bytes

    -
    System.Int64minLen

    Minimum stream length

    +

    Steam

    System.Int64maxLen

    Maximum stream length in bytes

    +
    IDeserializationContextcontext

    Context

    Stream

    Target stream

    +
    System.Int32

    Serializer version

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStreamAsync(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

    -

    Read a stream

    + +

    ReadSerializerVersionAsync(Stream, IDeserializationContext)

    +

    Read the serializer version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> ReadStreamAsync(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
    +public static async Task<int> ReadSerializerVersionAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10177,21 +9686,295 @@
    Parameters
    - - - + + + +
    Streamtarget

    Target stream (the position won't be reset)

    +
    IDeserializationContextcontext

    Context

    +
    Returns
    + + - - - + + + + - - - + + + +
    System.Nullable<System.Int32>version

    Serializer version

    -
    TypeDescription
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    Task<System.Int32>

    Serializer version

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadShort(Stream, IDeserializationContext)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static short ReadShort(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Int16

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadShortAsync(Stream, IDeserializationContext)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<short> ReadShortAsync(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.Int16>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadShortNullable(Stream, IDeserializationContext)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static short? ReadShortNullable(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Nullable<System.Int16>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadShortNullableAsync(Stream, IDeserializationContext)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<short?> ReadShortNullableAsync(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.Nullable<System.Int16>>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStream(Stream, Stream, IDeserializationContext, Nullable<Int32>, Int64, Int64)

    +

    Read a stream

    +
    +
    +
    Declaration
    +
    +
    public static Stream ReadStream(this Stream stream, Stream target, IDeserializationContext context, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + @@ -10212,46 +9995,1395 @@
    Parameters
    + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Streamtarget

    Target stream (the position won't be reset)

    +
    IDeserializationContextcontext

    Context

    Maximum stream length in bytes

    +
    Returns
    + + + + + + + + - - - + + + +
    TypeDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    Stream

    Target stream

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStreamAsync(Stream, Stream, IDeserializationContext, Nullable<Int32>, Int64, Int64)

    +

    Read a stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> ReadStreamAsync(this Stream stream, Stream target, IDeserializationContext context, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Streamtarget

    Target stream (the position won't be reset)

    +
    IDeserializationContextcontext

    Context

    +
    System.Nullable<System.Int32>maxBufferSize

    Maximum buffer size in bytes

    +
    System.Int64minLen

    Minimum stream length

    +
    System.Int64maxLen

    Maximum stream length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Target stream

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStreamNullable(Stream, Stream, IDeserializationContext, Nullable<Int32>, Int64, Int64)

    +

    Read a stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream? ReadStreamNullable(this Stream stream, Stream target, IDeserializationContext context, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Streamtarget

    Target stream (the position won't be reset; will be disposed, if the value is null)

    +
    IDeserializationContextcontext

    Context

    +
    System.Nullable<System.Int32>maxBufferSize

    Maximum buffer size in bytes

    +
    System.Int64minLen

    Minimum stream length

    +
    System.Int64maxLen

    Maximum stream length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Nullable<Stream>

    Target stream

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStreamNullableAsync(Stream, Stream, IDeserializationContext, Nullable<Int32>, Int64, Int64)

    +

    Read a stream

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream?> ReadStreamNullableAsync(this Stream stream, Stream target, IDeserializationContext context, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Streamtarget

    Target stream (the position won't be reset; will be disposed, if the value is null)

    +
    IDeserializationContextcontext

    Context

    +
    System.Nullable<System.Int32>maxBufferSize

    Maximum buffer size in bytes

    +
    System.Int64minLen

    Minimum stream length

    +
    System.Int64maxLen

    Maximum stream length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.Nullable<Stream>>

    Target stream

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString(Stream, IDeserializationContext, Int32, Int32)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static string ReadString(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.String

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString16(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static string ReadString16(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.String

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString16Async(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<string> ReadString16Async(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.String>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString16Nullable(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static string ReadString16Nullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.String

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString16NullableAsync(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-16 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<string> ReadString16NullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.String>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString32(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-32 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static string ReadString32(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.String

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString32Async(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-32 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<string> ReadString32Async(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.String>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString32Nullable(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-32 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static string ReadString32Nullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.String

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadString32NullableAsync(Stream, IDeserializationContext, Int32, Int32)

    +

    Read UTF-32 (little endian) string

    +
    +
    +
    Declaration
    +
    +
    public static Task<string> ReadString32NullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.String>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStringAsync(Stream, IDeserializationContext, Int32, Int32)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<string> ReadStringAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.String>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStringNullable(Stream, IDeserializationContext, Int32, Int32)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static string ReadStringNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.String

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStringNullableAsync(Stream, IDeserializationContext, Int32, Int32)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<string> ReadStringNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = 2147483647)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    System.Int32minLen

    Minimum length in bytes

    +
    System.Int32maxLen

    Maximum length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<System.String>

    Value

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStruct<T>(Stream, IDeserializationContext)

    +

    Read a struct

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static T ReadStruct<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Contxt

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    T

    Struct

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Struct type

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStructAsync<T>(Stream, IDeserializationContext)

    +

    Read a struct

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<T> ReadStructAsync<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<T>

    Struct

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Struct type

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStructNullable<T>(Stream, IDeserializationContext)

    +

    Read a struct

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static T? ReadStructNullable<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    System.Nullable<T>

    Struct

    +
    +
    Type Parameters
    + + + + + + + + + + + + + +
    NameDescription
    T

    Struct type

    +
    + + | + Improve this Doc + + + View Source + + +

    ReadStructNullableAsync<T>(Stream, IDeserializationContext)

    +

    Read a struct

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<T?> ReadStructNullableAsync<T>(this Stream stream, IDeserializationContext context)
    +    where T : struct
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + +
    TypeDescription
    Task<System.Nullable<T>>

    Struct

    -
    Returns
    +
    Type Parameters
    - + - - +
    TypeName Description
    Task<Stream>

    Target stream

    +
    T

    Struct type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStreamNullable(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64)

    -

    Read a stream

    + +

    ReadType(Stream, Int32, ObjectTypes, IDeserializationContext)

    +

    Read a type

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream? ReadStreamNullable(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L)
    +public static Type ReadType(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context)
    Parameters
    @@ -10270,39 +11402,21 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + - - - + + - - - + + @@ -10317,28 +11431,28 @@
    Returns
    - - +
    Streamtarget

    Target stream (the position won't be reset; will be disposed, if the value is null)

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>maxBufferSize

    Maximum buffer size in bytes

    +
    System.Int32objVersion

    Pre-red object version

    System.Int64minLen

    Minimum stream length

    +
    ObjectTypesobjType

    Pre-red object type

    System.Int64maxLen

    Maximum stream length in bytes

    +
    IDeserializationContextcontext

    Context

    System.Nullable<Stream>

    Target stream

    +
    Type

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStreamNullableAsync<T>(Stream, Stream, Nullable<Int32>, ArrayPool<Byte>, Nullable<Int32>, Int64, Int64, CancellationToken)

    -

    Read a stream

    + +

    ReadType(Stream, IDeserializationContext)

    +

    Read a type

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream?> ReadStreamNullableAsync<T>(this Stream stream, Stream target, int? version = null, ArrayPool<byte> pool = null, int? maxBufferSize = null, long minLen = 0L, long maxLen = 9223372036854775807L, CancellationToken cancellationToken = null)
    +public static Type ReadType(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10357,45 +11471,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -10410,42 +11488,28 @@
    Returns
    - - +
    Streamtarget

    Target stream (the position won't be reset; will be disposed, if the value is null)

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Nullable<System.Int32>maxBufferSize

    Maximum buffer size in bytes

    -
    System.Int64minLen

    Minimum stream length

    -
    System.Int64maxLen

    Maximum stream length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.Nullable<Stream>>

    Target stream

    +
    Type

    Type

    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    -

    Read

    + +

    ReadTypeAsync(Stream, Int32, ObjectTypes, IDeserializationContext)

    +

    Read a type

    Declaration
    -
    public static string ReadString(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Type> ReadTypeAsync(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context)
    Parameters
    @@ -10464,27 +11528,21 @@
    Parameters
    - - - - - - - - + + - - - + + - - - + + @@ -10499,27 +11557,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Int32objVersion

    Pre-red object version

    System.Int32minLen

    Minimum length in bytes

    +
    ObjectTypesobjType

    Pre-red object type

    System.Int32maxLen

    Maximum length in bytes

    +
    IDeserializationContextcontext

    Context

    System.String

    Value

    +
    Task<Type>

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString16(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    -

    Read UTF-16 (little endian) string

    + +

    ReadTypeAsync(Stream, IDeserializationContext)

    +

    Read a type

    Declaration
    -
    public static string ReadString16(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Type> ReadTypeAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10538,27 +11597,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + @@ -10573,27 +11614,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    +
    IDeserializationContextcontext

    Context

    System.String

    Value

    +
    Task<Type>

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString16Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    -

    Read UTF-16 (little endian) string

    + +

    ReadTypeNullable(Stream, IDeserializationContext)

    +

    Read a type

    Declaration
    -
    public static Task<string> ReadString16Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Type? ReadTypeNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10612,33 +11654,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - + + @@ -10653,27 +11671,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.String>

    Value

    +
    System.Nullable<Type>

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString16Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    -

    Read UTF-16 (little endian) string

    + +

    ReadTypeNullableAsync(Stream, IDeserializationContext)

    +

    Read a type

    Declaration
    -
    public static string ReadString16Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static async Task<Type?> ReadTypeNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10692,27 +11711,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + @@ -10727,27 +11728,27 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    +
    IDeserializationContextcontext

    Context

    System.String

    Value

    +
    Task<System.Nullable<Type>>

    Type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString16NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    -

    Read UTF-16 (little endian) string

    + +

    ReadUInt(Stream, IDeserializationContext)

    +

    Read

    Declaration
    -
    public static Task<string> ReadString16NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static uint ReadUInt(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10766,33 +11767,65 @@
    Parameters
    - - - + + + +
    System.Nullable<System.Int32>version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    +
    Returns
    + + - - - + + + + - - - + + +
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    TypeDescription
    System.Int32minLen

    Minimum length in bytes

    +
    System.UInt32

    Value

    + + | + Improve this Doc + + + View Source + + +

    ReadUIntAsync(Stream, IDeserializationContext)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<uint> ReadUIntAsync(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + + - - - + + + + + - - - + + + + + + + @@ -10807,7 +11840,7 @@
    Returns
    - + @@ -10815,19 +11848,19 @@
    Returns
    System.Int32maxLen

    Maximum length in bytes

    -
    TypeNameDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    Task<System.String>Task<System.UInt32>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString32(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    -

    Read UTF-32 (little endian) string

    + +

    ReadUIntNullable(Stream, IDeserializationContext)

    +

    Read

    Declaration
    -
    public static string ReadString32(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static uint? ReadUIntNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10846,27 +11879,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + @@ -10881,7 +11896,7 @@
    Returns
    - + @@ -10889,19 +11904,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    +
    IDeserializationContextcontext

    Context

    System.StringSystem.Nullable<System.UInt32>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString32Async(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    -

    Read UTF-32 (little endian) string

    + +

    ReadUIntNullableAsync(Stream, IDeserializationContext)

    +

    Read

    Declaration
    -
    public static Task<string> ReadString32Async(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<uint?> ReadUIntNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -10920,33 +11935,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - + + @@ -10961,7 +11952,7 @@
    Returns
    - + @@ -10969,19 +11960,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.String>Task<System.Nullable<System.UInt32>>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString32Nullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    -

    Read UTF-32 (little endian) string

    + +

    ReadULong(Stream, IDeserializationContext)

    +

    Read

    Declaration
    -
    public static string ReadString32Nullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static ulong ReadULong(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -11000,27 +11991,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + @@ -11035,7 +12008,7 @@
    Returns
    - + @@ -11043,19 +12016,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    +
    IDeserializationContextcontext

    Context

    System.StringSystem.UInt64

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadString32NullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    -

    Read UTF-32 (little endian) string

    + +

    ReadULongAsync(Stream, IDeserializationContext)

    +

    Read

    Declaration
    -
    public static Task<string> ReadString32NullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static Task<ulong> ReadULongAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -11074,33 +12047,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - + + @@ -11115,7 +12064,7 @@
    Returns
    - + @@ -11123,19 +12072,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.String>Task<System.UInt64>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStringAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    + +

    ReadULongNullable(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<string> ReadStringAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static ulong? ReadULongNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -11154,33 +12103,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - + + @@ -11195,7 +12120,7 @@
    Returns
    - + @@ -11203,19 +12128,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.String>System.Nullable<System.UInt64>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStringNullable(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32)

    + +

    ReadULongNullableAsync(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static string ReadStringNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647)
    +
    public static Task<ulong?> ReadULongNullableAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -11234,27 +12159,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - + + @@ -11269,7 +12176,7 @@
    Returns
    - + @@ -11277,19 +12184,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    +
    IDeserializationContextcontext

    Context

    System.StringTask<System.Nullable<System.UInt64>>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStringNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, Int32, Int32, CancellationToken)

    + +

    ReadUShort(Stream, IDeserializationContext)

    Read

    Declaration
    -
    public static Task<string> ReadStringNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, int minLen = 0, int maxLen = 2147483647, CancellationToken cancellationToken = null)
    +
    public static ushort ReadUShort(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -11308,33 +12215,9 @@
    Parameters
    - - - - - - - - - - - - - - - - - - - - - - - + + @@ -11349,7 +12232,7 @@
    Returns
    - + @@ -11357,21 +12240,19 @@
    Returns
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    -
    System.Int32minLen

    Minimum length in bytes

    -
    System.Int32maxLen

    Maximum length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Task<System.String>System.UInt16

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStruct<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

    -

    Read a struct

    + +

    ReadUShortAsync(Stream, IDeserializationContext)

    +

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static T ReadStruct<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null)
    -    where T : struct
    +
    public static Task<ushort> ReadUShortAsync(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -11390,21 +12271,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -11419,45 +12288,27 @@
    Returns
    - - - - -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Buffer

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Buffer pool

    +
    IDeserializationContextcontext

    Context

    T

    Struct

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Struct type

    +
    Task<System.UInt16>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStructAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

    -

    Read a struct

    + +

    ReadUShortNullable(Stream, IDeserializationContext)

    +

    Read

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<T> ReadStructAsync<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    -    where T : struct
    +
    public static ushort? ReadUShortNullable(this Stream stream, IDeserializationContext context)
    Parameters
    @@ -11476,80 +12327,101 @@
    Parameters
    - - - - - - - - + + + +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Buffer

    +
    IDeserializationContextcontext

    Context

    +
    Returns
    + + - - - + + + + - - - +
    System.Buffers.ArrayPool<System.Byte>pool

    Buffer pool

    -
    TypeDescription
    CancellationTokencancellationToken

    Cancellation token

    +
    System.Nullable<System.UInt16>

    Value

    -
    Returns
    + + | + Improve this Doc + + + View Source + + +

    ReadUShortNullableAsync(Stream, IDeserializationContext)

    +

    Read

    +
    +
    +
    Declaration
    +
    +
    public static Task<ushort?> ReadUShortNullableAsync(this Stream stream, IDeserializationContext context)
    +
    +
    Parameters
    + - - + + + + + + +
    TypeName Description
    Task<T>

    Struct

    +
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    -
    Type Parameters
    +
    Returns
    - + - - +
    NameType Description
    T

    Struct type

    +
    Task<System.Nullable<System.UInt16>>

    Value

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStructNullable<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>)

    -

    Read a struct

    + +

    Write(Stream, Boolean, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T? ReadStructNullable<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null)
    -    where T : struct
    +public static Stream Write(this Stream stream, bool value, ISerializationContext context)
    Parameters
    @@ -11568,21 +12440,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -11597,45 +12463,28 @@
    Returns
    - - - - -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Buffer

    +
    System.Booleanvalue

    Value to write

    System.Buffers.ArrayPool<System.Byte>pool

    Buffer pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<T>

    Struct

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Struct type

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadStructNullableAsync<T>(Stream, Nullable<Int32>, Byte[], ArrayPool<Byte>, CancellationToken)

    -

    Read a struct

    + +

    Write(Stream, Byte, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<T?> ReadStructNullableAsync<T>(this Stream stream, int? version = null, byte[] buffer = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    -    where T : struct
    +public static Stream Write(this Stream stream, byte value, ISerializationContext context)
    Parameters
    @@ -11654,27 +12503,15 @@
    Parameters
    - - - - - - - - - - - - - + + - - - + + @@ -11689,43 +12526,28 @@
    Returns
    - - - - -
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Byte[]buffer

    Buffer

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Buffer pool

    +
    System.Bytevalue

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<System.Nullable<T>>

    Struct

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Struct type

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUInt(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Read

    + +

    Write(Stream, Decimal, ISerializationContext)

    +

    Write

    Declaration
    -
    public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, decimal value, ISerializationContext context)
    Parameters
    @@ -11744,15 +12566,15 @@
    Parameters
    - - - + + - - - + + @@ -11767,27 +12589,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Decimalvalue

    Value to write

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.UInt32

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUIntAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    -

    Read

    + +

    Write(Stream, Double, ISerializationContext)

    +

    Write

    Declaration
    -
    public static Task<uint> ReadUIntAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, double value, ISerializationContext context)
    Parameters
    @@ -11806,21 +12629,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -11835,27 +12652,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Doublevalue

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<System.UInt32>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUIntNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Read

    + +

    Write(Stream, Int16, ISerializationContext)

    +

    Write

    Declaration
    -
    public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, short value, ISerializationContext context)
    Parameters
    @@ -11874,15 +12692,15 @@
    Parameters
    - - - + + - - - + + @@ -11897,27 +12715,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Int16value

    Value to write

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.UInt32>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUIntNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    -

    Read

    + +

    Write(Stream, Int32, ISerializationContext)

    +

    Write

    Declaration
    -
    public static Task<uint?> ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, int value, ISerializationContext context)
    Parameters
    @@ -11936,21 +12755,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -11965,27 +12778,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Int32value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<System.Nullable<System.UInt32>>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadULong(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Read

    + +

    Write(Stream, Int64, ISerializationContext)

    +

    Write

    Declaration
    -
    public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, long value, ISerializationContext context)
    Parameters
    @@ -12004,15 +12818,15 @@
    Parameters
    - - - + + - - - + + @@ -12027,27 +12841,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Int64value

    Value to write

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.UInt64

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadULongAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    -

    Read

    + +

    Write(Stream, SByte, ISerializationContext)

    +

    Write

    Declaration
    -
    public static Task<ulong> ReadULongAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, sbyte value, ISerializationContext context)
    Parameters
    @@ -12066,21 +12881,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -12095,27 +12904,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.SBytevalue

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<System.UInt64>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadULongNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Read

    + +

    Write(Stream, Single, ISerializationContext)

    +

    Write

    Declaration
    -
    public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, float value, ISerializationContext context)
    Parameters
    @@ -12134,15 +12944,15 @@
    Parameters
    - - - + + - - - + + @@ -12157,27 +12967,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Singlevalue

    Value to write

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.UInt64>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadULongNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    -

    Read

    + +

    Write(Stream, UInt16, ISerializationContext)

    +

    Write

    Declaration
    -
    public static Task<ulong?> ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, ushort value, ISerializationContext context)
    Parameters
    @@ -12196,21 +13007,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -12225,27 +13030,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.UInt16value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<System.Nullable<System.UInt64>>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUShort(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Read

    + +

    Write(Stream, UInt32, ISerializationContext)

    +

    Write

    Declaration
    -
    public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, uint value, ISerializationContext context)
    Parameters
    @@ -12264,15 +13070,15 @@
    Parameters
    - - - + + - - - + + @@ -12287,27 +13093,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.UInt32value

    Value to write

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.UInt16

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUShortAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    -

    Read

    + +

    Write(Stream, UInt64, ISerializationContext)

    +

    Write

    Declaration
    -
    public static Task<ushort> ReadUShortAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, ulong value, ISerializationContext context)
    Parameters
    @@ -12326,21 +13133,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -12355,27 +13156,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.UInt64value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<System.UInt16>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUShortNullable(Stream, Nullable<Int32>, ArrayPool<Byte>)

    -

    Read

    + +

    Write(Stream, Type, ISerializationContext)

    +

    Write

    Declaration
    -
    public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool<byte> pool = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream Write(this Stream stream, Type type, ISerializationContext context)
    Parameters
    @@ -12394,15 +13196,15 @@
    Parameters
    - - - + + - - - + + @@ -12417,27 +13219,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    Typetype

    Type

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.UInt16>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    ReadUShortNullableAsync(Stream, Nullable<Int32>, ArrayPool<Byte>, CancellationToken)

    -

    Read

    + +

    WriteAny(Stream, Object, Nullable<ObjectTypes>, Boolean, ISerializationContext)

    +

    Write any object

    Declaration
    -
    public static Task<ushort?> ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteAny(this Stream stream, object obj, ObjectTypes? objType, bool writeObject, ISerializationContext context)
    Parameters
    @@ -12456,21 +13259,27 @@
    Parameters
    - - - + + - - - + + - - - + + + + + + + @@ -12485,28 +13294,28 @@
    Returns
    - - +
    System.Nullable<System.Int32>version

    Serializer version

    +
    System.Objectobj

    Object

    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    System.Nullable<ObjectTypes>objType

    Object type (if not null, no header will be written)

    CancellationTokencancellationToken

    Cancellation token

    +
    System.BooleanwriteObject

    Write the object? (may be overridden, if writing a header)

    +
    ISerializationContextcontext

    Context

    Task<System.Nullable<System.UInt16>>

    Value

    +
    Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Boolean)

    -

    Write

    + +

    WriteAny(Stream, Object, ISerializationContext)

    +

    Write any object

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, bool value)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Stream WriteAny(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -12525,9 +13334,15 @@
    Parameters
    - - - + + + + + + + @@ -12550,20 +13365,20 @@
    Returns
    System.Booleanvalue

    Value to write

    +
    System.Objectobj

    Object

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Byte)

    -

    Write

    + +

    WriteAnyAsync(Stream, Object, Nullable<ObjectTypes>, Boolean, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, byte value)
    +public static async Task<Stream> WriteAnyAsync(this Stream stream, object obj, ObjectTypes? objType, bool writeObject, ISerializationContext context)
    Parameters
    @@ -12582,9 +13397,27 @@
    Parameters
    - - - + + + + + + + + + + + + + + + + + @@ -12599,7 +13432,7 @@
    Returns
    - + @@ -12607,20 +13440,20 @@
    Returns
    System.Bytevalue

    Value to write

    +
    System.Objectobj

    Object

    +
    System.Nullable<ObjectTypes>objType

    Object type (if not null, no header will be written)

    +
    System.BooleanwriteObject

    Write the object? (may be overridden, if writing a header)

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Decimal)

    -

    Write

    + +

    WriteAnyAsync(Stream, Object, ISerializationContext)

    +

    Write any object

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, decimal value)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Task<Stream> WriteAnyAsync(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -12639,9 +13472,15 @@
    Parameters
    - - - + + + + + + + @@ -12656,7 +13495,7 @@
    Returns
    - + @@ -12664,20 +13503,20 @@
    Returns
    System.Decimalvalue

    Value to write

    +
    System.Objectobj

    Object

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Double)

    -

    Write

    + +

    WriteAnyAsync(Task<Stream>, Object, Nullable<ObjectTypes>, Boolean, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, double value)
    +public static Task<Stream> WriteAnyAsync(this Task<Stream> stream, object obj, ObjectTypes? objType, bool writeObject, ISerializationContext context)
    Parameters
    @@ -12690,15 +13529,33 @@
    Parameters
    - + - - - + + + + + + + + + + + + + + + + + @@ -12713,7 +13570,7 @@
    Returns
    - + @@ -12721,20 +13578,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Doublevalue

    Value to write

    +
    System.Objectobj

    Object

    +
    System.Nullable<ObjectTypes>objType

    Object type (if not null, no header will be written)

    +
    System.BooleanwriteObject

    Write the object? (may be overridden, if writing a header)

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Int16)

    -

    Write

    + +

    WriteAnyAsync(Task<Stream>, Object, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, short value)
    +public static Task<Stream> WriteAnyAsync(this Task<Stream> stream, object obj, ISerializationContext context)
    Parameters
    @@ -12747,15 +13604,21 @@
    Parameters
    - + - - - + + + + + + + @@ -12770,7 +13633,7 @@
    Returns
    - + @@ -12778,20 +13641,19 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Int16value

    Value to write

    +
    System.Objectobj

    Object

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Int32)

    -

    Write

    + +

    WriteAnyItemHeader<T>(ItemSerializerContext, T, Type)

    +

    Write an item header, if the used item type isn't specified

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, int value)
    +
    public static bool WriteAnyItemHeader<T>(ItemSerializerContext context, T item, Type itemType)
    Parameters
    @@ -12804,15 +13666,21 @@
    Parameters
    - - - + + - - - + + + + + + + @@ -12827,28 +13695,43 @@
    Returns
    - - + + + +
    Streamstream

    Stream

    +
    ItemSerializerContextcontext

    Context

    System.Int32value

    Value to write

    +
    Titem

    Item

    +
    TypeitemType

    Item type

    Stream

    Stream

    +
    System.Boolean

    All information written?

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Item type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Int64)

    -

    Write

    + +

    WriteAnyItemHeaderAsync<T>(ItemSerializerContext, T, Type)

    +

    Write an item header, if the used item type isn't specified

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, long value)
    +
    public static async Task<bool> WriteAnyItemHeaderAsync<T>(ItemSerializerContext context, T item, Type itemType)
    Parameters
    @@ -12861,15 +13744,21 @@
    Parameters
    - - - + + - - - + + + + + + + @@ -12884,28 +13773,43 @@
    Returns
    - - + + + +
    Streamstream

    Stream

    +
    ItemSerializerContextcontext

    Context

    System.Int64value

    Value to write

    +
    Titem

    Item

    +
    TypeitemType

    Item type

    Stream

    Stream

    +
    Task<System.Boolean>
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Item type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, SByte)

    -

    Write

    + +

    WriteAnyNullable(Stream, Object, Nullable<ObjectTypes>, Boolean, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, sbyte value)
    +public static Stream WriteAnyNullable(this Stream stream, object obj, ObjectTypes? objType, bool writeObject, ISerializationContext context)
    Parameters
    @@ -12924,9 +13828,27 @@
    Parameters
    - - - + + + + + + + + + + + + + + + + + @@ -12949,20 +13871,20 @@
    Returns
    System.SBytevalue

    Value to write

    +
    System.Objectobj

    Object

    +
    System.Nullable<ObjectTypes>objType

    Object type (if not null, no header will be written)

    +
    System.BooleanwriteObject

    Write the object? (may be overridden, if writing a header)

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, Single)

    -

    Write

    + +

    WriteAnyNullable(Stream, Object, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, float value)
    +public static Stream WriteAnyNullable(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -12981,9 +13903,15 @@
    Parameters
    - - - + + + + + + + @@ -13006,20 +13934,20 @@
    Returns
    System.Singlevalue

    Value to write

    +
    System.Objectobj

    Object

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, UInt16)

    -

    Write

    + +

    WriteAnyNullableAsync(Stream, Object, Nullable<ObjectTypes>, Boolean, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, ushort value)
    +public static async Task<Stream> WriteAnyNullableAsync(this Stream stream, object obj, ObjectTypes? objType, bool writeObject, ISerializationContext context)
    Parameters
    @@ -13038,9 +13966,27 @@
    Parameters
    - - - + + + + + + + + + + + + + + + + + @@ -13055,7 +14001,7 @@
    Returns
    - + @@ -13063,20 +14009,20 @@
    Returns
    System.UInt16value

    Value to write

    +
    System.Objectobj

    Object

    +
    System.Nullable<ObjectTypes>objType

    Object type (if not null, no header will be written)

    +
    System.BooleanwriteObject

    Write the object? (may be overridden, if writing a header)

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, UInt32)

    -

    Write

    + +

    WriteAnyNullableAsync(Stream, Object, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, uint value)
    +public static async Task<Stream> WriteAnyNullableAsync(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -13095,9 +14041,15 @@
    Parameters
    - - - + + + + + + + @@ -13112,7 +14064,7 @@
    Returns
    - + @@ -13120,20 +14072,20 @@
    Returns
    System.UInt32value

    Value to write

    +
    System.Objectobj

    Object

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    Write(Stream, UInt64)

    -

    Write

    + +

    WriteAnyNullableAsync(Task<Stream>, Object, Nullable<ObjectTypes>, Boolean, ISerializationContext)

    +

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream Write(this Stream stream, ulong value)
    +public static Task<Stream> WriteAnyNullableAsync(this Task<Stream> stream, object obj, ObjectTypes? objType, bool writeObject, ISerializationContext context)
    Parameters
    @@ -13146,15 +14098,33 @@
    Parameters
    - + - - - + + + + + + + + + + + + + + + + + @@ -13169,7 +14139,7 @@
    Returns
    - + @@ -13177,20 +14147,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.UInt64value

    Value to write

    +
    System.Objectobj

    Object

    +
    System.Nullable<ObjectTypes>objType

    Object type (if not null, no header will be written)

    +
    System.BooleanwriteObject

    Write the object? (may be overridden, if writing a header)

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAny(Stream, Object)

    + +

    WriteAnyNullableAsync(Task<Stream>, Object, ISerializationContext)

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteAny(this Stream stream, object obj)
    +public static Task<Stream> WriteAnyNullableAsync(this Task<Stream> stream, object obj, ISerializationContext context)
    Parameters
    @@ -13203,7 +14173,7 @@
    Parameters
    - + @@ -13212,6 +14182,12 @@
    Parameters
    + + + + + @@ -13226,7 +14202,7 @@
    Returns
    - + @@ -13234,20 +14210,19 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Object obj

    Object

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyAsync(Stream, Object, CancellationToken)

    + +

    WriteAnyObject(Stream, Object, ISerializationContext)

    Write any object

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    public static Stream WriteAnyObject(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -13272,9 +14247,9 @@
    Parameters
    - - - + + @@ -13289,7 +14264,7 @@
    Returns
    - + @@ -13297,20 +14272,19 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyAsync(Task<Stream>, Object, CancellationToken)

    + +

    WriteAnyObjectAsync(Stream, Object, ISerializationContext)

    Write any object

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAnyAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +
    public static async Task<Stream> WriteAnyObjectAsync(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -13323,7 +14297,7 @@
    Parameters
    - + @@ -13335,9 +14309,9 @@
    Parameters
    - - - + + @@ -13360,20 +14334,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyNullable(Stream, Object)

    + +

    WriteAnyObjectAsync(Task<Stream>, Object, ISerializationContext)

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteAnyNullable(this Stream stream, object obj)
    +public static Task<Stream> WriteAnyObjectAsync(this Task<Stream> stream, object obj, ISerializationContext context)
    Parameters
    @@ -13386,7 +14360,7 @@
    Parameters
    - + @@ -13395,6 +14369,12 @@
    Parameters
    + + + + + @@ -13409,7 +14389,7 @@
    Returns
    - + @@ -13417,20 +14397,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Object obj

    Object

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyNullableAsync(Stream, Object, CancellationToken)

    + +

    WriteAnyObjectNullable(Stream, Object, ISerializationContext)

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteAnyNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static Stream WriteAnyObjectNullable(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -13455,9 +14435,9 @@
    Parameters
    - - - + + @@ -13472,7 +14452,7 @@
    Returns
    - + @@ -13480,20 +14460,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyNullableAsync(Task<Stream>, Object, CancellationToken)

    + +

    WriteAnyObjectNullableAsync(Stream, Object, ISerializationContext)

    Write any object

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAnyNullableAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAnyObjectNullableAsync(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -13506,7 +14486,7 @@
    Parameters
    - + @@ -13518,9 +14498,9 @@
    Parameters
    - - - + + @@ -13543,19 +14523,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObject(Stream, Object)

    + +

    WriteAnyObjectNullableAsync(Task<Stream>, Object, ISerializationContext)

    Write any object

    Declaration
    -
    public static Stream WriteAnyObject(this Stream stream, object obj)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteAnyObjectNullableAsync(this Task<Stream> stream, object obj, ISerializationContext context)
    Parameters
    @@ -13568,7 +14549,7 @@
    Parameters
    - + @@ -13577,6 +14558,12 @@
    Parameters
    + + + + + @@ -13591,7 +14578,7 @@
    Returns
    - + @@ -13599,19 +14586,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Object obj

    Object

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectAsync(Stream, Object, CancellationToken)

    -

    Write any object

    + +

    WriteArray(Stream, Array, ISerializationContext)

    +

    Write

    Declaration
    -
    public static async Task<Stream> WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteArray(this Stream stream, Array value, ISerializationContext context)
    Parameters
    @@ -13630,15 +14618,15 @@
    Parameters
    - - - + + - - - + + @@ -13653,7 +14641,7 @@
    Returns
    - + @@ -13661,20 +14649,20 @@
    Returns
    System.Objectobj

    Object

    +
    Arrayvalue

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectAsync(Task<Stream>, Object, CancellationToken)

    -

    Write any object

    + +

    WriteArrayAsync(Stream, Array, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAnyObjectAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteArrayAsync(this Stream stream, Array value, ISerializationContext context)
    Parameters
    @@ -13687,21 +14675,21 @@
    Parameters
    - + - - - + + - - - + + @@ -13724,20 +14712,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.Objectobj

    Object

    +
    Arrayvalue

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectNullable(Stream, Object)

    -

    Write any object

    + +

    WriteArrayAsync(Task<Stream>, Array, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteAnyObjectNullable(this Stream stream, object obj)
    +public static Task<Stream> WriteArrayAsync(this Task<Stream> stream, Array value, ISerializationContext context)
    Parameters
    @@ -13750,15 +14738,21 @@
    Parameters
    - + - - - + + + + + + + @@ -13773,7 +14767,7 @@
    Returns
    - + @@ -13781,20 +14775,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Objectobj

    Object

    +
    Arrayvalue

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectNullableAsync(Stream, Object, CancellationToken)

    -

    Write any object

    + +

    WriteArrayNullable(Stream, Nullable<Array>, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAnyObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static Stream WriteArrayNullable(this Stream stream, Array? value, ISerializationContext context)
    Parameters
    @@ -13813,15 +14807,15 @@
    Parameters
    - - - + + - - - + + @@ -13836,7 +14830,7 @@
    Returns
    - + @@ -13844,20 +14838,20 @@
    Returns
    System.Objectobj

    Object

    +
    System.Nullable<Array>value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAnyObjectNullableAsync(Task<Stream>, Object, CancellationToken)

    -

    Write any object

    + +

    WriteArrayNullableAsync(Stream, Nullable<Array>, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAnyObjectNullableAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteArrayNullableAsync(this Stream stream, Array? value, ISerializationContext context)
    Parameters
    @@ -13870,21 +14864,21 @@
    Parameters
    - + - - - + + - - - + + @@ -13907,20 +14901,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.Objectobj

    Object

    +
    System.Nullable<Array>value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArray(Stream, Array)

    + +

    WriteArrayNullableAsync(Task<Stream>, Nullable<Array>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteArray(this Stream stream, Array value)
    +public static Task<Stream> WriteArrayNullableAsync(this Task<Stream> stream, Array? value, ISerializationContext context)
    Parameters
    @@ -13933,15 +14927,21 @@
    Parameters
    - + - + + + + + + @@ -13956,7 +14956,7 @@
    Returns
    - + @@ -13964,20 +14964,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    ArraySystem.Nullable<Array> value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayAsync(Stream, Array, CancellationToken)

    + +

    WriteAsync(Stream, Boolean, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, bool value, ISerializationContext context)
    Parameters
    @@ -13996,15 +14996,15 @@
    Parameters
    - + - - - + + @@ -14027,20 +15027,20 @@
    Returns
    ArraySystem.Boolean value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayAsync(Task<Stream>, Array, CancellationToken)

    + +

    WriteAsync(Stream, Byte, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteArrayAsync(this Task<Stream> stream, Array value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, byte value, ISerializationContext context)
    Parameters
    @@ -14053,21 +15053,21 @@
    Parameters
    - + - + - - - + + @@ -14090,20 +15090,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    ArraySystem.Byte value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayNullable(Stream, Nullable<Array>)

    + +

    WriteAsync(Stream, Decimal, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteArrayNullable(this Stream stream, Array? value)
    +public static Task<Stream> WriteAsync(this Stream stream, decimal value, ISerializationContext context)
    Parameters
    @@ -14122,9 +15122,15 @@
    Parameters
    - + + + + + + @@ -14139,7 +15145,7 @@
    Returns
    - + @@ -14147,20 +15153,20 @@
    Returns
    System.Nullable<Array>System.Decimal value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayNullableAsync(Stream, Nullable<Array>, CancellationToken)

    + +

    WriteAsync(Stream, Double, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteArrayNullableAsync(this Stream stream, Array? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, double value, ISerializationContext context)
    Parameters
    @@ -14179,15 +15185,15 @@
    Parameters
    - + - - - + + @@ -14210,20 +15216,20 @@
    Returns
    System.Nullable<Array>System.Double value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteArrayNullableAsync(Task<Stream>, Nullable<Array>, CancellationToken)

    + +

    WriteAsync(Stream, Int16, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteArrayNullableAsync(this Task<Stream> stream, Array? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, short value, ISerializationContext context)
    Parameters
    @@ -14236,21 +15242,21 @@
    Parameters
    - + - + - - - + + @@ -14273,20 +15279,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.Nullable<Array>System.Int16 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Boolean, CancellationToken)

    +

    WriteAsync(Stream, Int32, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, int value, ISerializationContext context)
    Parameters
    @@ -14305,15 +15311,15 @@
    Parameters
    - + - - - + + @@ -14336,20 +15342,20 @@
    Returns
    System.BooleanSystem.Int32 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Byte, CancellationToken)

    +

    WriteAsync(Stream, Int64, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, long value, ISerializationContext context)
    Parameters
    @@ -14368,15 +15374,15 @@
    Parameters
    - + - - - + + @@ -14399,20 +15405,20 @@
    Returns
    System.ByteSystem.Int64 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Decimal, CancellationToken)

    +

    WriteAsync(Stream, SByte, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, sbyte value, ISerializationContext context)
    Parameters
    @@ -14431,15 +15437,15 @@
    Parameters
    - + - - - + + @@ -14462,20 +15468,20 @@
    Returns
    System.DecimalSystem.SByte value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Double, CancellationToken)

    +

    WriteAsync(Stream, Single, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, float value, ISerializationContext context)
    Parameters
    @@ -14494,15 +15500,15 @@
    Parameters
    - + - - - + + @@ -14525,20 +15531,20 @@
    Returns
    System.DoubleSystem.Single value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Int16, CancellationToken)

    +

    WriteAsync(Stream, UInt16, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, ushort value, ISerializationContext context)
    Parameters
    @@ -14557,15 +15563,15 @@
    Parameters
    - + - - - + + @@ -14588,20 +15594,20 @@
    Returns
    System.Int16System.UInt16 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Int32, CancellationToken)

    +

    WriteAsync(Stream, UInt32, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, uint value, ISerializationContext context)
    Parameters
    @@ -14620,15 +15626,15 @@
    Parameters
    - + - - - + + @@ -14651,20 +15657,20 @@
    Returns
    System.Int32System.UInt32 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Int64, CancellationToken)

    +

    WriteAsync(Stream, UInt64, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, ulong value, ISerializationContext context)
    Parameters
    @@ -14683,15 +15689,15 @@
    Parameters
    - + - - - + + @@ -14714,20 +15720,20 @@
    Returns
    System.Int64System.UInt64 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, SByte, CancellationToken)

    +

    WriteAsync(Stream, Type, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Stream stream, Type type, ISerializationContext context)
    Parameters
    @@ -14746,15 +15752,15 @@
    Parameters
    - - - + + - - - + + @@ -14777,20 +15783,20 @@
    Returns
    System.SBytevalue

    Value to write

    +
    Typetype

    Type

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, Single, CancellationToken)

    +

    WriteAsync(Task<Stream>, Boolean, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, bool value, ISerializationContext context)
    Parameters
    @@ -14803,21 +15809,21 @@
    Parameters
    - + - + - - - + + @@ -14840,20 +15846,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.SingleSystem.Boolean value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, UInt16, CancellationToken)

    +

    WriteAsync(Task<Stream>, Byte, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, byte value, ISerializationContext context)
    Parameters
    @@ -14866,21 +15872,21 @@
    Parameters
    - + - + - - - + + @@ -14903,20 +15909,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.UInt16System.Byte value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, UInt32, CancellationToken)

    +

    WriteAsync(Task<Stream>, Decimal, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, decimal value, ISerializationContext context)
    Parameters
    @@ -14929,21 +15935,21 @@
    Parameters
    - + - + - - - + + @@ -14966,20 +15972,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.UInt32System.Decimal value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Stream, UInt64, CancellationToken)

    +

    WriteAsync(Task<Stream>, Double, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, double value, ISerializationContext context)
    Parameters
    @@ -14992,21 +15998,21 @@
    Parameters
    - + - + - - - + + @@ -15029,20 +16035,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.UInt64System.Double value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Boolean, CancellationToken)

    +

    WriteAsync(Task<Stream>, Int16, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, bool value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, short value, ISerializationContext context)
    Parameters
    @@ -15061,15 +16067,15 @@
    Parameters
    - + - - - + + @@ -15092,20 +16098,20 @@
    Returns
    System.BooleanSystem.Int16 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Byte, CancellationToken)

    +

    WriteAsync(Task<Stream>, Int32, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, byte value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, int value, ISerializationContext context)
    Parameters
    @@ -15124,15 +16130,15 @@
    Parameters
    - + - - - + + @@ -15155,20 +16161,20 @@
    Returns
    System.ByteSystem.Int32 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Decimal, CancellationToken)

    +

    WriteAsync(Task<Stream>, Int64, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, decimal value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, long value, ISerializationContext context)
    Parameters
    @@ -15187,15 +16193,15 @@
    Parameters
    - + - - - + + @@ -15218,20 +16224,20 @@
    Returns
    System.DecimalSystem.Int64 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Double, CancellationToken)

    +

    WriteAsync(Task<Stream>, SByte, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, double value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, sbyte value, ISerializationContext context)
    Parameters
    @@ -15250,15 +16256,15 @@
    Parameters
    - + - - - + + @@ -15281,20 +16287,20 @@
    Returns
    System.DoubleSystem.SByte value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Int16, CancellationToken)

    +

    WriteAsync(Task<Stream>, Single, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, short value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, float value, ISerializationContext context)
    Parameters
    @@ -15313,15 +16319,15 @@
    Parameters
    - + - - - + + @@ -15344,20 +16350,20 @@
    Returns
    System.Int16System.Single value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Int32, CancellationToken)

    +

    WriteAsync(Task<Stream>, UInt16, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, int value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, ushort value, ISerializationContext context)
    Parameters
    @@ -15376,15 +16382,15 @@
    Parameters
    - + - - - + + @@ -15407,20 +16413,20 @@
    Returns
    System.Int32System.UInt16 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Int64, CancellationToken)

    +

    WriteAsync(Task<Stream>, UInt32, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, long value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, uint value, ISerializationContext context)
    Parameters
    @@ -15439,15 +16445,15 @@
    Parameters
    - + - - - + + @@ -15470,20 +16476,20 @@
    Returns
    System.Int64System.UInt32 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, SByte, CancellationToken)

    +

    WriteAsync(Task<Stream>, UInt64, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, sbyte value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, ulong value, ISerializationContext context)
    Parameters
    @@ -15502,15 +16508,15 @@
    Parameters
    - + - - - + + @@ -15533,20 +16539,20 @@
    Returns
    System.SByteSystem.UInt64 value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteAsync(Task<Stream>, Single, CancellationToken)

    +

    WriteAsync(Task<Stream>, Type, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, float value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteAsync(this Task<Stream> stream, Type type, ISerializationContext context)
    Parameters
    @@ -15565,15 +16571,15 @@
    Parameters
    - - - + + - - - + + @@ -15596,20 +16602,20 @@
    Returns
    System.Singlevalue

    Value to write

    +
    Typetype

    Type

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Task<Stream>, UInt16, CancellationToken)

    + +

    WriteBytes(Stream, ReadOnlySpan<Byte>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, ushort value, CancellationToken cancellationToken = null)
    +public static Stream WriteBytes(this Stream stream, ReadOnlySpan<byte> value, ISerializationContext context)
    Parameters
    @@ -15622,21 +16628,21 @@
    Parameters
    - + - + - - - + + @@ -15651,7 +16657,7 @@
    Returns
    - + @@ -15659,20 +16665,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.UInt16ReadOnlySpan<System.Byte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Task<Stream>, UInt32, CancellationToken)

    + +

    WriteBytes(Stream, Span<Byte>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, uint value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Stream WriteBytes(this Stream stream, Span<byte> value, ISerializationContext context)
    Parameters
    @@ -15685,21 +16691,21 @@
    Parameters
    - + - + - - - + + @@ -15714,7 +16720,7 @@
    Returns
    - + @@ -15722,20 +16728,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.UInt32Span<System.Byte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteAsync(Task<Stream>, UInt64, CancellationToken)

    + +

    WriteBytesAsync(Stream, Memory<Byte>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteAsync(this Task<Stream> stream, ulong value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Task<Stream> WriteBytesAsync(this Stream stream, Memory<byte> value, ISerializationContext context)
    Parameters
    @@ -15748,21 +16754,21 @@
    Parameters
    - + - + - - - + + @@ -15785,20 +16791,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.UInt64Memory<System.Byte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytes(Stream, ReadOnlySpan<Byte>)

    + +

    WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteBytes(this Stream stream, ReadOnlySpan<byte> value)
    +public static Task<Stream> WriteBytesAsync(this Stream stream, ReadOnlyMemory<byte> value, ISerializationContext context)
    Parameters
    @@ -15817,9 +16823,15 @@
    Parameters
    - + + + + + + @@ -15834,7 +16846,7 @@
    Returns
    - + @@ -15842,20 +16854,20 @@
    Returns
    ReadOnlySpan<System.Byte>ReadOnlyMemory<System.Byte> value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytes(Stream, Span<Byte>)

    + +

    WriteBytesAsync(Task<Stream>, Memory<Byte>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Stream WriteBytes(this Stream stream, Span<byte> value)
    +public static Task<Stream> WriteBytesAsync(this Task<Stream> stream, Memory<byte> value, ISerializationContext context)
    Parameters
    @@ -15868,15 +16880,21 @@
    Parameters
    - + - + + + + + + @@ -15891,7 +16909,7 @@
    Returns
    - + @@ -15899,20 +16917,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    Span<System.Byte>Memory<System.Byte> value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteBytesAsync(Stream, Memory<Byte>, CancellationToken)

    +

    WriteBytesAsync(Task<Stream>, ReadOnlyMemory<Byte>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Task<Stream> WriteBytesAsync(this Stream stream, Memory<byte> value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteBytesAsync(this Task<Stream> stream, ReadOnlyMemory<byte> value, ISerializationContext context)
    Parameters
    @@ -15925,21 +16943,21 @@
    Parameters
    - + - + - - - + + @@ -15962,20 +16980,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    Memory<System.Byte>ReadOnlyMemory<System.Byte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesAsync(Stream, ReadOnlyMemory<Byte>, CancellationToken)

    + +

    WriteBytesNullable(Stream, Byte[], ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteBytesAsync(this Stream stream, ReadOnlyMemory<byte> value, CancellationToken cancellationToken = null)
    +public static Stream WriteBytesNullable(this Stream stream, byte[] value, ISerializationContext context)
    Parameters
    @@ -15994,15 +17012,15 @@
    Parameters
    - + - - - + + @@ -16017,7 +17035,7 @@
    Returns
    - + @@ -16025,20 +17043,20 @@
    Returns
    ReadOnlyMemory<System.Byte>System.Byte[] value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesAsync(Task<Stream>, Memory<Byte>, CancellationToken)

    + +

    WriteBytesNullableAsync(Stream, Byte[], ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Task<Stream> WriteBytesAsync(this Task<Stream> stream, Memory<byte> value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteBytesNullableAsync(this Stream stream, byte[] value, ISerializationContext context)
    Parameters
    @@ -16051,21 +17069,21 @@
    Parameters
    - + - + - - - + + @@ -16088,20 +17106,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    Memory<System.Byte>System.Byte[] value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesAsync(Task<Stream>, ReadOnlyMemory<Byte>, CancellationToken)

    + +

    WriteBytesNullableAsync(Task<Stream>, Byte[], ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteBytesAsync(this Task<Stream> stream, ReadOnlyMemory<byte> value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteBytesNullableAsync(this Task<Stream> stream, byte[] value, ISerializationContext context)
    Parameters
    @@ -16120,15 +17138,15 @@
    Parameters
    - + - - - + + @@ -16151,20 +17169,20 @@
    Returns
    ReadOnlyMemory<System.Byte>System.Byte[] value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesNullable(Stream, Byte[])

    + +

    WriteDict(Stream, IDictionary, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteBytesNullable(this Stream stream, byte[] value)
    +public static Stream WriteDict(this Stream stream, IDictionary value, ISerializationContext context)
    Parameters
    @@ -16183,9 +17201,15 @@
    Parameters
    - + + + + + + @@ -16208,20 +17232,20 @@
    Returns
    System.Byte[]System.Collections.IDictionary value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesNullableAsync(Stream, Byte[], CancellationToken)

    + +

    WriteDictAsync(Stream, IDictionary, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteBytesNullableAsync(this Stream stream, byte[] value, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteDictAsync(this Stream stream, IDictionary value, ISerializationContext context)
    Parameters
    @@ -16240,15 +17264,15 @@
    Parameters
    - + - - - + + @@ -16271,20 +17295,20 @@
    Returns
    System.Byte[]System.Collections.IDictionary value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteBytesNullableAsync(Task<Stream>, Byte[], CancellationToken)

    + +

    WriteDictAsync(Task<Stream>, IDictionary, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteBytesNullableAsync(this Task<Stream> stream, byte[] value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteDictAsync(this Task<Stream> stream, IDictionary value, ISerializationContext context)
    Parameters
    @@ -16303,15 +17327,15 @@
    Parameters
    - + - - - + + @@ -16334,20 +17358,20 @@
    Returns
    System.Byte[]System.Collections.IDictionary value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDict(Stream, IDictionary)

    + +

    WriteDictNullable(Stream, IDictionary, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteDict(this Stream stream, IDictionary value)
    +public static Stream WriteDictNullable(this Stream stream, IDictionary value, ISerializationContext context)
    Parameters
    @@ -16369,6 +17393,12 @@
    Parameters
    + + + + + @@ -16391,20 +17421,20 @@
    Returns
    System.Collections.IDictionary value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictAsync(Stream, IDictionary, CancellationToken)

    + +

    WriteDictNullableAsync(Stream, IDictionary, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteDictAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteDictNullableAsync(this Stream stream, IDictionary value, ISerializationContext context)
    Parameters
    @@ -16429,9 +17459,9 @@
    Parameters
    - - - + + @@ -16454,20 +17484,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictAsync(Task<Stream>, IDictionary, CancellationToken)

    + +

    WriteDictNullableAsync(Task<Stream>, IDictionary, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteDictAsync(this Task<Stream> stream, IDictionary value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteDictNullableAsync(this Task<Stream> stream, IDictionary value, ISerializationContext context)
    Parameters
    @@ -16492,9 +17522,9 @@
    Parameters
    - - - + + @@ -16517,20 +17547,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictNullable(Stream, IDictionary)

    + +

    WriteEnum(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteDictNullable(this Stream stream, IDictionary value)
    +public static Stream WriteEnum(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -16549,9 +17579,15 @@
    Parameters
    - + + + + + + @@ -16574,20 +17610,21 @@
    Returns
    System.Collections.IDictionarySystem.Object value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictNullableAsync(Stream, IDictionary, CancellationToken)

    + +

    WriteEnum<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteDictNullableAsync(this Stream stream, IDictionary value, CancellationToken cancellationToken = null)
    +public static Stream WriteEnum<T>(this Stream stream, T value, ISerializationContext context) + where T : struct, Enum
    Parameters
    @@ -16606,15 +17643,15 @@
    Parameters
    - + - - - + + @@ -16629,28 +17666,44 @@
    Returns
    - + + + +
    System.Collections.IDictionaryT value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteDictNullableAsync(Task<Stream>, IDictionary, CancellationToken)

    + +

    WriteEnumAsync(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteDictNullableAsync(this Task<Stream> stream, IDictionary value, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteEnumAsync(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -16663,21 +17716,21 @@
    Parameters
    - + - + - - - + + @@ -16700,20 +17753,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.Collections.IDictionarySystem.Object value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnum(Stream, Object)

    + +

    WriteEnumAsync(Task<Stream>, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnum(this Stream stream, object value)
    +public static Task<Stream> WriteEnumAsync(this Task<Stream> stream, object value, ISerializationContext context)
    Parameters
    @@ -16726,7 +17779,7 @@
    Parameters
    - + @@ -16735,6 +17788,12 @@
    Parameters
    + + + + + @@ -16749,7 +17808,7 @@
    Returns
    - + @@ -16757,20 +17816,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Object value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnum<T>(Stream, T)

    + +

    WriteEnumAsync<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnum<T>(this Stream stream, T value)
    +public static async Task<Stream> WriteEnumAsync<T>(this Stream stream, T value, ISerializationContext context)
         where T : struct, Enum
    Parameters
    @@ -16793,6 +17852,12 @@
    Parameters
    T value

    Value to write

    + + + + ISerializationContext + context +

    Context

    @@ -16807,7 +17872,7 @@
    Returns
    - Stream + Task<Stream>

    Stream

    @@ -16831,20 +17896,21 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteEnumAsync(Stream, Object, CancellationToken)

    +

    WriteEnumAsync<T>(Task<Stream>, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteEnumAsync<T>(this Task<Stream> stream, T value, ISerializationContext context) + where T : struct, Enum
    Parameters
    @@ -16857,21 +17923,21 @@
    Parameters
    - + - + - - - + + @@ -16888,26 +17954,42 @@
    Returns
    + + +
    StreamTask<Stream> stream

    Stream

    System.ObjectT value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumAsync(Task<Stream>, Object, CancellationToken)

    + +

    WriteEnumNullable(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteEnumAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    +public static Stream WriteEnumNullable(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -16920,7 +18002,7 @@
    Parameters
    - + @@ -16932,9 +18014,9 @@
    Parameters
    - - - + + @@ -16949,7 +18031,7 @@
    Returns
    - + @@ -16957,20 +18039,20 @@
    Returns
    Task<Stream>Stream stream

    Stream

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumAsync<T>(Stream, T, CancellationToken)

    + +

    WriteEnumNullable<T>(Stream, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteEnumAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    +public static Stream WriteEnumNullable<T>(this Stream stream, T? value, ISerializationContext context)
         where T : struct, Enum
    Parameters
    @@ -16990,15 +18072,15 @@
    Parameters
    - T + System.Nullable<T> value

    Value to write

    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -17013,7 +18095,7 @@
    Returns
    - Task<Stream> + Stream

    Stream

    @@ -17037,21 +18119,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumAsync<T>(Task<Stream>, T, CancellationToken)

    + +

    WriteEnumNullableAsync(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteEnumAsync<T>(this Task<Stream> stream, T value, CancellationToken cancellationToken = null)
    -    where T : struct, Enum
    +public static Task<Stream> WriteEnumNullableAsync(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -17064,21 +18145,21 @@
    Parameters
    - + - + - - - + + @@ -17095,42 +18176,26 @@
    Returns
    - - -
    Task<Stream>Stream stream

    Stream

    TSystem.Object value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullable(Stream, Object)

    + +

    WriteEnumNullableAsync(Task<Stream>, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnumNullable(this Stream stream, object value)
    +public static Task<Stream> WriteEnumNullableAsync(this Task<Stream> stream, object value, ISerializationContext context)
    Parameters
    @@ -17143,7 +18208,7 @@
    Parameters
    - + @@ -17152,6 +18217,12 @@
    Parameters
    + + + + + @@ -17166,7 +18237,7 @@
    Returns
    - + @@ -17174,20 +18245,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Object value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullable<T>(Stream, Nullable<T>)

    + +

    WriteEnumNullableAsync<T>(Stream, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteEnumNullable<T>(this Stream stream, T? value)
    +public static Task<Stream> WriteEnumNullableAsync<T>(this Stream stream, T? value, ISerializationContext context)
         where T : struct, Enum
    Parameters
    @@ -17210,6 +18281,12 @@
    Parameters
    System.Nullable<T> value

    Value to write

    + + + + ISerializationContext + context +

    Context

    @@ -17224,7 +18301,7 @@
    Returns
    - Stream + Task<Stream>

    Stream

    @@ -17248,20 +18325,21 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteEnumNullableAsync(Stream, Object, CancellationToken)

    +

    WriteEnumNullableAsync<T>(Task<Stream>, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteEnumNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteEnumNullableAsync<T>(this Task<Stream> stream, T? value, ISerializationContext context) + where T : struct, Enum
    Parameters
    @@ -17274,21 +18352,21 @@
    Parameters
    - + - + - - - + + @@ -17305,26 +18383,41 @@
    Returns
    + + +
    StreamTask<Stream> stream

    Stream

    System.ObjectSystem.Nullable<T> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Enumeration type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullableAsync(Task<Stream>, Object, CancellationToken)

    + +

    WriteFixedArray(Stream, Array, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteEnumNullableAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteFixedArray(this Stream stream, Array value, ISerializationContext context)
    Parameters
    @@ -17337,21 +18430,21 @@
    Parameters
    - + - + - - - + + @@ -17366,7 +18459,7 @@
    Returns
    - + @@ -17374,21 +18467,19 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.ObjectArray value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    + +

    WriteFixedArray<T>(Stream, ReadOnlySpan<T>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteEnumNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    -    where T : struct, Enum
    +
    public static Stream WriteFixedArray<T>(this Stream stream, ReadOnlySpan<T> value, ISerializationContext context)
    Parameters
    @@ -17407,15 +18498,15 @@
    Parameters
    - + - - - + + @@ -17430,7 +18521,7 @@
    Returns
    - + @@ -17447,28 +18538,27 @@
    Type Parameters
    -
    System.Nullable<T>ReadOnlySpan<T> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    T

    Enumeration type

    +

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteEnumNullableAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    + +

    WriteFixedArray<T>(Stream, Span<T>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteEnumNullableAsync<T>(this Task<Stream> stream, T? value, CancellationToken cancellationToken = null)
    -    where T : struct, Enum
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Stream WriteFixedArray<T>(this Stream stream, Span<T> value, ISerializationContext context)
    Parameters
    @@ -17481,21 +18571,21 @@
    Parameters
    - + - + - - - + + @@ -17510,7 +18600,7 @@
    Returns
    - + @@ -17527,27 +18617,89 @@
    Type Parameters
    - + + +
    Task<Stream>Stream stream

    Stream

    System.Nullable<T>Span<T> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    T

    Enumeration type

    +

    Element type

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteFixedArrayAsync(Stream, Array, ISerializationContext)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteFixedArrayAsync(this Stream stream, Array value, ISerializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    Streamstream

    Stream

    +
    Arrayvalue

    Value to write

    +
    ISerializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArray(Stream, Array)

    + +

    WriteFixedArrayAsync(Task<Stream>, Array, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteFixedArray(this Stream stream, Array value)
    +public static Task<Stream> WriteFixedArrayAsync(this Task<Stream> stream, Array value, ISerializationContext context)
    Parameters
    @@ -17560,7 +18712,7 @@
    Parameters
    - + @@ -17569,6 +18721,12 @@
    Parameters
    + + + + + @@ -17583,7 +18741,7 @@
    Returns
    - + @@ -17591,20 +18749,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    Array value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArray<T>(Stream, ReadOnlySpan<T>)

    + +

    WriteFixedArrayAsync<T>(Stream, Memory<T>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteFixedArray<T>(this Stream stream, ReadOnlySpan<T> value)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Task<Stream> WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, ISerializationContext context)
    Parameters
    @@ -17623,9 +18781,15 @@
    Parameters
    - + + + + + + @@ -17640,7 +18804,7 @@
    Returns
    - + @@ -17664,20 +18828,19 @@
    Type Parameters
    ReadOnlySpan<T>Memory<T> value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArray<T>(Stream, Span<T>)

    + +

    WriteFixedArrayAsync<T>(Stream, ReadOnlyMemory<T>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Stream WriteFixedArray<T>(this Stream stream, Span<T> value)
    +
    public static Task<Stream> WriteFixedArrayAsync<T>(this Stream stream, ReadOnlyMemory<T> value, ISerializationContext context)
    Parameters
    @@ -17696,9 +18859,15 @@
    Parameters
    - + + + + + + @@ -17713,7 +18882,7 @@
    Returns
    - + @@ -17737,20 +18906,20 @@
    Type Parameters
    Span<T>ReadOnlyMemory<T> value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteFixedArrayAsync(Stream, Array, CancellationToken)

    +

    WriteFixedArrayAsync<T>(Task<Stream>, Memory<T>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteFixedArrayAsync(this Stream stream, Array value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Just a method adapter")]
    +public static Task<Stream> WriteFixedArrayAsync<T>(this Task<Stream> stream, Memory<T> value, ISerializationContext context)
    Parameters
    @@ -17763,21 +18932,21 @@
    Parameters
    - + - + - - - + + @@ -17794,26 +18963,42 @@
    Returns
    + + +
    StreamTask<Stream> stream

    Stream

    ArrayMemory<T> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteFixedArrayAsync(Task<Stream>, Array, CancellationToken)

    +

    WriteFixedArrayAsync<T>(Task<Stream>, ReadOnlyMemory<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteFixedArrayAsync(this Task<Stream> stream, Array value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteFixedArrayAsync<T>(this Task<Stream> stream, ReadOnlyMemory<T> value, ISerializationContext context)
    Parameters
    @@ -17832,15 +19017,15 @@
    Parameters
    - + - - - + + @@ -17857,26 +19042,42 @@
    Returns
    + + +
    ArrayReadOnlyMemory<T> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync<T>(Stream, Memory<T>, CancellationToken)

    -

    Write

    + +

    WriteIf(Stream, Boolean, StreamExtensions.StreamNullableWiter_Delegate)

    +

    Write if a condition is true

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Task<Stream> WriteFixedArrayAsync<T>(this Stream stream, Memory<T> value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteIf(this Stream stream, bool condition, StreamExtensions.StreamNullableWiter_Delegate action)
    Parameters
    @@ -17895,15 +19096,15 @@
    Parameters
    - - - + + - - - + + @@ -17918,44 +19119,28 @@
    Returns
    - + - - -
    Memory<T>value

    Value to write

    +
    System.Booleancondition

    Condition

    CancellationTokencancellationToken

    Cancellation token

    +
    StreamExtensions.StreamNullableWiter_Delegateaction

    Write action to execute, if the condition is true

    Task<Stream>Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Element type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync<T>(Stream, ReadOnlyMemory<T>, CancellationToken)

    -

    Write

    + +

    WriteIfAsync(Stream, Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate)

    +

    Write if a condition is true

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteFixedArrayAsync<T>(this Stream stream, ReadOnlyMemory<T> value, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteIfAsync(this Stream stream, bool condition, StreamExtensions.AsyncStreamNullableWiter_Delegate action)
    Parameters
    @@ -17974,15 +19159,15 @@
    Parameters
    - - - + + - - - + + @@ -18003,38 +19188,85 @@
    Returns
    ReadOnlyMemory<T>value

    Value to write

    +
    System.Booleancondition

    Condition

    CancellationTokencancellationToken

    Cancellation token

    +
    StreamExtensions.AsyncStreamNullableWiter_Delegateaction

    Write action to execute, if the condition is true

    -
    Type Parameters
    + + | + Improve this Doc + + + View Source + + +

    WriteIfAsync(Task<Stream>, Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate)

    +

    Write if a condition is true

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteIfAsync(this Task<Stream> stream, bool condition, StreamExtensions.AsyncStreamNullableWiter_Delegate action)
    +
    +
    Parameters
    + - - + + + + + + + + + + + + + + +
    Type Name Description
    T

    Element type

    +
    Task<Stream>stream

    Stream

    +
    System.Booleancondition

    Condition

    +
    StreamExtensions.AsyncStreamNullableWiter_Delegateaction

    Write action to execute, if the condition is true

    +
    +
    Returns
    + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync<T>(Task<Stream>, Memory<T>, CancellationToken)

    -

    Write

    + +

    WriteIfNotNull<T>(Stream, T, ISerializationContext)

    +

    Write a boolean flag if an object is not null

    Declaration
    -
    [TargetedPatchingOptOut("Just a method adapter")]
    -public static Task<Stream> WriteFixedArrayAsync<T>(this Task<Stream> stream, Memory<T> value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static bool WriteIfNotNull<T>(this Stream stream, T obj, ISerializationContext context)
    Parameters
    @@ -18047,21 +19279,21 @@
    Parameters
    - + - - - + + - - - + + @@ -18076,8 +19308,8 @@
    Returns
    - - + @@ -18093,27 +19325,27 @@
    Type Parameters
    -
    Task<Stream>Stream stream

    Stream

    Memory<T>value

    Value to write

    +
    Tobj

    Object

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    +
    System.Boolean

    Is not null?

    T

    Element type

    +

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteFixedArrayAsync<T>(Task<Stream>, ReadOnlyMemory<T>, CancellationToken)

    -

    Write

    + +

    WriteIfNotNull<T>(Stream, T, StreamExtensions.NullableWriter_Delegate, ISerializationContext)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteFixedArrayAsync<T>(this Task<Stream> stream, ReadOnlyMemory<T> value, CancellationToken cancellationToken = null)
    +public static Stream WriteIfNotNull<T>(this Stream stream, T obj, StreamExtensions.NullableWriter_Delegate action, ISerializationContext context)
    Parameters
    @@ -18126,21 +19358,27 @@
    Parameters
    - + - - - + + - - - + + + + + + + @@ -18155,7 +19393,7 @@
    Returns
    - + @@ -18172,27 +19410,27 @@
    Type Parameters
    -
    Task<Stream>Stream stream

    Stream

    ReadOnlyMemory<T>value

    Value to write

    +
    Tobj

    Object

    CancellationTokencancellationToken

    Cancellation token

    +
    StreamExtensions.NullableWriter_Delegateaction

    Write action to execute, if the object isn't null

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    T

    Element type

    +

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIf(Stream, Boolean, Func<Stream, Stream>)

    -

    Write if a condition is true

    + +

    WriteIfNotNullAsync<T>(Stream, T, ISerializationContext)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteIf(this Stream stream, bool condition, Func<Stream, Stream> action)
    +public static async Task<bool> WriteIfNotNullAsync<T>(this Stream stream, T obj, ISerializationContext context)
    Parameters
    @@ -18211,15 +19449,15 @@
    Parameters
    - - - + + - - - + + @@ -18234,28 +19472,44 @@
    Returns
    - - + + + +
    System.Booleancondition

    Condition

    +
    Tobj

    Object

    Func<Stream, Stream>action

    Write action to execute, if the condition is true

    +
    ISerializationContextcontext

    Context

    Stream

    Stream

    +
    Task<System.Boolean>

    Is not null?

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfAsync(Stream, Boolean, Func<Stream, Task<Stream>>)

    -

    Write if a condition is true

    + +

    WriteIfNotNullAsync<T>(Stream, T, StreamExtensions.AsyncNullableWriter_Delegate, ISerializationContext)

    +

    Write a boolean flag if an object is not null

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteIfAsync(this Stream stream, bool condition, Func<Stream, Task<Stream>> action)
    +public static async Task<Stream> WriteIfNotNullAsync<T>(this Stream stream, T obj, StreamExtensions.AsyncNullableWriter_Delegate action, ISerializationContext context)
    Parameters
    @@ -18274,15 +19528,21 @@
    Parameters
    - - - + + - + - + + + + + @@ -18299,26 +19559,41 @@
    Returns
    + + +
    System.Booleancondition

    Condition

    +
    Tobj

    Object

    Func<Stream, Task<Stream>>StreamExtensions.AsyncNullableWriter_Delegate action

    Write action to execute, if the condition is true

    +

    Write action to execute, if the object isn't null

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfAsync(Task<Stream>, Boolean, Func<Stream, Task<Stream>>)

    -

    Write if a condition is true

    + +

    WriteItem(ItemSerializerContext, Object)

    +

    Write an item using a specified serializer

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteIfAsync(this Task<Stream> stream, bool condition, Func<Stream, Task<Stream>> action)
    +
    public static Stream WriteItem(ItemSerializerContext context, dynamic item)
    Parameters
    @@ -18331,21 +19606,15 @@
    Parameters
    - - - - - - - - + + - - - + + @@ -18360,7 +19629,7 @@
    Returns
    - + @@ -18368,20 +19637,19 @@
    Returns
    Task<Stream>stream

    Stream

    -
    System.Booleancondition

    Condition

    +
    ItemSerializerContextcontext

    Context

    Func<Stream, Task<Stream>>action

    Write action to execute, if the condition is true

    +
    System.Objectitem

    Item

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNull<T>(Stream, T)

    -

    Write a boolean flag if an object is not null

    + +

    WriteItemAsync(ItemSerializerContext, Object)

    +

    Write an item using a specified serializer

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool WriteIfNotNull<T>(this Stream stream, T obj)
    +
    public static async Task<Stream> WriteItemAsync(ItemSerializerContext context, dynamic item)
    Parameters
    @@ -18394,15 +19662,15 @@
    Parameters
    - - - + + - - - + + @@ -18417,44 +19685,28 @@
    Returns
    - - - - -
    Streamstream

    Stream

    +
    ItemSerializerContextcontext

    Context

    Tobj

    Object

    +
    System.Objectitem

    Item

    System.Boolean

    Is not null?

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Object type

    +
    Task<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNull<T>(Stream, T, Action)

    -

    Write a boolean flag if an object is not null

    + +

    WriteList(Stream, IList, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteIfNotNull<T>(this Stream stream, T obj, Action action)
    +public static Stream WriteList(this Stream stream, IList value, ISerializationContext context)
    Parameters
    @@ -18473,15 +19725,15 @@
    Parameters
    - - - + + - - - + + @@ -18498,42 +19750,26 @@
    Returns
    - - -
    Tobj

    Object

    +
    System.Collections.IListvalue

    Value to write

    Actionaction

    Write action to execute, if the object isn't null

    +
    ISerializationContextcontext

    Context

    Stream

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNullAsync<T>(Stream, T, CancellationToken)

    -

    Write a boolean flag if an object is not null

    + +

    WriteListAsync(Stream, IList, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<bool> WriteIfNotNullAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteListAsync(this Stream stream, IList value, ISerializationContext context)
    Parameters
    @@ -18552,15 +19788,15 @@
    Parameters
    - - - + + - - - + + @@ -18575,44 +19811,28 @@
    Returns
    - - - - -
    Tobj

    Object

    +
    System.Collections.IListvalue

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<System.Boolean>

    Is not null?

    -
    -
    Type Parameters
    - - - - - - - - - - - +
    NameDescription
    T

    Object type

    +
    Task<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteIfNotNullAsync<T>(Stream, T, Func<Task>, CancellationToken)

    -

    Write a boolean flag if an object is not null

    + +

    WriteListAsync(Task<Stream>, IList, ISerializationContext)

    +

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteIfNotNullAsync<T>(this Stream stream, T obj, Func<Task> action, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteListAsync(this Task<Stream> stream, IList value, ISerializationContext context)
    Parameters
    @@ -18625,27 +19845,21 @@
    Parameters
    - + - - - - - - - - + + - - - + + @@ -18662,42 +19876,26 @@
    Returns
    - - -
    StreamTask<Stream> stream

    Stream

    Tobj

    Object

    -
    Func<Task>action

    Write action to execute, if the object isn't null

    +
    System.Collections.IListvalue

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    -
    -
    Type Parameters
    - - - - - - - - - - -
    NameDescription
    T

    Object type

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteList(Stream, IList)

    + +

    WriteListNullable(Stream, IList, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteList(this Stream stream, IList value)
    +public static Stream WriteListNullable(this Stream stream, IList value, ISerializationContext context)
    Parameters
    @@ -18719,6 +19917,12 @@
    Parameters
    + + + + + @@ -18741,20 +19945,20 @@
    Returns
    System.Collections.IList value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListAsync(Stream, IList, CancellationToken)

    + +

    WriteListNullableAsync(Stream, IList, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteListAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteListNullableAsync(this Stream stream, IList value, ISerializationContext context)
    Parameters
    @@ -18779,9 +19983,9 @@
    Parameters
    - - - + + @@ -18804,20 +20008,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListAsync(Task<Stream>, IList, CancellationToken)

    + +

    WriteListNullableAsync(Task<Stream>, IList, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteListAsync(this Task<Stream> stream, IList value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteListNullableAsync(this Task<Stream> stream, IList value, ISerializationContext context)
    Parameters
    @@ -18842,9 +20046,9 @@
    Parameters
    - - - + + @@ -18867,20 +20071,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListNullable(Stream, IList)

    + +

    WriteNullable(Stream, Nullable<Boolean>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteListNullable(this Stream stream, IList value)
    +public static Stream WriteNullable(this Stream stream, bool? value, ISerializationContext context)
    Parameters
    @@ -18899,9 +20103,15 @@
    Parameters
    - + + + + + + @@ -18924,20 +20134,19 @@
    Returns
    System.Collections.IListSystem.Nullable<System.Boolean> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListNullableAsync(Stream, IList, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<Byte>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteListNullableAsync(this Stream stream, IList value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, byte? value, ISerializationContext context)
    Parameters
    @@ -18956,15 +20165,15 @@
    Parameters
    - + - - - + + @@ -18979,7 +20188,7 @@
    Returns
    - + @@ -18987,20 +20196,19 @@
    Returns
    System.Collections.IListSystem.Nullable<System.Byte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteListNullableAsync(Task<Stream>, IList, CancellationToken)

    + +

    WriteNullable(Stream, Nullable<Decimal>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteListNullableAsync(this Task<Stream> stream, IList value, CancellationToken cancellationToken = null)
    +
    public static Stream WriteNullable(this Stream stream, decimal? value, ISerializationContext context)
    Parameters
    @@ -19013,21 +20221,21 @@
    Parameters
    - + - + - - - + + @@ -19042,7 +20250,7 @@
    Returns
    - + @@ -19050,20 +20258,19 @@
    Returns
    Task<Stream>Stream stream

    Stream

    System.Collections.IListSystem.Nullable<System.Decimal> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>Stream

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Boolean>)

    +

    WriteNullable(Stream, Nullable<Double>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullable(this Stream stream, bool? value)
    +
    public static Stream WriteNullable(this Stream stream, double? value, ISerializationContext context)
    Parameters
    @@ -19082,9 +20289,15 @@
    Parameters
    - + + + + + + @@ -19107,19 +20320,19 @@
    Returns
    System.Nullable<System.Boolean>System.Nullable<System.Double> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Byte>)

    +

    WriteNullable(Stream, Nullable<Int16>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, byte? value)
    +
    public static Stream WriteNullable(this Stream stream, short? value, ISerializationContext context)
    Parameters
    @@ -19138,9 +20351,15 @@
    Parameters
    - + + + + + + @@ -19163,19 +20382,19 @@
    Returns
    System.Nullable<System.Byte>System.Nullable<System.Int16> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Decimal>)

    +

    WriteNullable(Stream, Nullable<Int32>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, decimal? value)
    +
    public static Stream WriteNullable(this Stream stream, int? value, ISerializationContext context)
    Parameters
    @@ -19194,9 +20413,15 @@
    Parameters
    - + + + + + + @@ -19219,19 +20444,19 @@
    Returns
    System.Nullable<System.Decimal>System.Nullable<System.Int32> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Double>)

    +

    WriteNullable(Stream, Nullable<Int64>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, double? value)
    +
    public static Stream WriteNullable(this Stream stream, long? value, ISerializationContext context)
    Parameters
    @@ -19250,9 +20475,15 @@
    Parameters
    - + + + + + + @@ -19275,19 +20506,19 @@
    Returns
    System.Nullable<System.Double>System.Nullable<System.Int64> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Int16>)

    +

    WriteNullable(Stream, Nullable<SByte>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, short? value)
    +
    public static Stream WriteNullable(this Stream stream, sbyte? value, ISerializationContext context)
    Parameters
    @@ -19306,9 +20537,15 @@
    Parameters
    - + + + + + + @@ -19331,19 +20568,19 @@
    Returns
    System.Nullable<System.Int16>System.Nullable<System.SByte> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Int32>)

    +

    WriteNullable(Stream, Nullable<Single>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, int? value)
    +
    public static Stream WriteNullable(this Stream stream, float? value, ISerializationContext context)
    Parameters
    @@ -19362,9 +20599,15 @@
    Parameters
    - + + + + + + @@ -19387,19 +20630,19 @@
    Returns
    System.Nullable<System.Int32>System.Nullable<System.Single> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Int64>)

    +

    WriteNullable(Stream, Nullable<UInt16>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, long? value)
    +
    public static Stream WriteNullable(this Stream stream, ushort? value, ISerializationContext context)
    Parameters
    @@ -19418,9 +20661,15 @@
    Parameters
    - + + + + + + @@ -19443,19 +20692,19 @@
    Returns
    System.Nullable<System.Int64>System.Nullable<System.UInt16> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<SByte>)

    +

    WriteNullable(Stream, Nullable<UInt32>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, sbyte? value)
    +
    public static Stream WriteNullable(this Stream stream, uint? value, ISerializationContext context)
    Parameters
    @@ -19474,9 +20723,15 @@
    Parameters
    - + + + + + + @@ -19499,19 +20754,19 @@
    Returns
    System.Nullable<System.SByte>System.Nullable<System.UInt32> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<Single>)

    +

    WriteNullable(Stream, Nullable<UInt64>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, float? value)
    +
    public static Stream WriteNullable(this Stream stream, ulong? value, ISerializationContext context)
    Parameters
    @@ -19530,9 +20785,15 @@
    Parameters
    - + + + + + + @@ -19555,19 +20816,20 @@
    Returns
    System.Nullable<System.Single>System.Nullable<System.UInt64> value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullable(Stream, Nullable<UInt16>)

    +

    WriteNullable(Stream, Nullable<Type>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, ushort? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteNullable(this Stream stream, Type? type, ISerializationContext context)
    Parameters
    @@ -19586,9 +20848,15 @@
    Parameters
    - - - + + + + + + + @@ -19611,19 +20879,20 @@
    Returns
    System.Nullable<System.UInt16>value

    Value to write

    +
    System.Nullable<Type>type

    Type

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<UInt32>)

    + +

    WriteNullableAsync(Stream, Nullable<Boolean>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, uint? value)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Stream stream, bool? value, ISerializationContext context)
    Parameters
    @@ -19642,9 +20911,15 @@
    Parameters
    - + + + + + + @@ -19659,7 +20934,7 @@
    Returns
    - + @@ -19667,19 +20942,19 @@
    Returns
    System.Nullable<System.UInt32>System.Nullable<System.Boolean> value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNullable(Stream, Nullable<UInt64>)

    + +

    WriteNullableAsync(Stream, Nullable<Byte>, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNullable(this Stream stream, ulong? value)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, byte? value, ISerializationContext context)
    Parameters
    @@ -19698,9 +20973,15 @@
    Parameters
    - + + + + + + @@ -19715,7 +20996,7 @@
    Returns
    - + @@ -19723,20 +21004,19 @@
    Returns
    System.Nullable<System.UInt64>System.Nullable<System.Byte> value

    Value to write

    +
    ISerializationContextcontext

    Context

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Boolean>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Decimal>, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, decimal? value, ISerializationContext context)
    Parameters
    @@ -19755,15 +21035,15 @@
    Parameters
    - + - - - + + @@ -19786,19 +21066,19 @@
    Returns
    System.Nullable<System.Boolean>System.Nullable<System.Decimal> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Byte>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Double>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, double? value, ISerializationContext context)
    Parameters
    @@ -19817,15 +21097,15 @@
    Parameters
    - + - - - + + @@ -19848,19 +21128,19 @@
    Returns
    System.Nullable<System.Byte>System.Nullable<System.Double> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Decimal>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Int16>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, short? value, ISerializationContext context)
    Parameters
    @@ -19879,15 +21159,15 @@
    Parameters
    - + - - - + + @@ -19910,19 +21190,19 @@
    Returns
    System.Nullable<System.Decimal>System.Nullable<System.Int16> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Double>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Int32>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, int? value, ISerializationContext context)
    Parameters
    @@ -19941,15 +21221,15 @@
    Parameters
    - + - - - + + @@ -19972,19 +21252,19 @@
    Returns
    System.Nullable<System.Double>System.Nullable<System.Int32> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Int16>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Int64>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, long? value, ISerializationContext context)
    Parameters
    @@ -20003,15 +21283,15 @@
    Parameters
    - + - - - + + @@ -20034,19 +21314,19 @@
    Returns
    System.Nullable<System.Int16>System.Nullable<System.Int64> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Int32>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<SByte>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, sbyte? value, ISerializationContext context)
    Parameters
    @@ -20065,15 +21345,15 @@
    Parameters
    - + - - - + + @@ -20096,19 +21376,19 @@
    Returns
    System.Nullable<System.Int32>System.Nullable<System.SByte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Int64>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Single>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, float? value, ISerializationContext context)
    Parameters
    @@ -20127,15 +21407,15 @@
    Parameters
    - + - - - + + @@ -20158,19 +21438,19 @@
    Returns
    System.Nullable<System.Int64>System.Nullable<System.Single> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<SByte>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<UInt16>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, ushort? value, ISerializationContext context)
    Parameters
    @@ -20189,15 +21469,15 @@
    Parameters
    - + - - - + + @@ -20220,19 +21500,19 @@
    Returns
    System.Nullable<System.SByte>System.Nullable<System.UInt16> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<Single>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<UInt32>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, uint? value, ISerializationContext context)
    Parameters
    @@ -20251,15 +21531,15 @@
    Parameters
    - + - - - + + @@ -20282,19 +21562,19 @@
    Returns
    System.Nullable<System.Single>System.Nullable<System.UInt32> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<UInt16>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<UInt64>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNullableAsync(this Stream stream, ulong? value, ISerializationContext context)
    Parameters
    @@ -20313,15 +21593,15 @@
    Parameters
    - + - - - + + @@ -20344,19 +21624,20 @@
    Returns
    System.Nullable<System.UInt16>System.Nullable<System.UInt64> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<UInt32>, CancellationToken)

    +

    WriteNullableAsync(Stream, Nullable<Type>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Stream stream, Type? type, ISerializationContext context)
    Parameters
    @@ -20375,15 +21656,15 @@
    Parameters
    - - - + + - - - + + @@ -20406,19 +21687,20 @@
    Returns
    System.Nullable<System.UInt32>value

    Value to write

    +
    System.Nullable<Type>type

    Type

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Stream, Nullable<UInt64>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Boolean>, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = null)
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, bool? value, ISerializationContext context)
    Parameters
    @@ -20431,21 +21713,21 @@
    Parameters
    - + - + - - - + + @@ -20468,20 +21750,20 @@
    Returns
    StreamTask<Stream> stream

    Stream

    System.Nullable<System.UInt64>System.Nullable<System.Boolean> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Boolean>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Byte>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, bool? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, byte? value, ISerializationContext context)
    Parameters
    @@ -20500,15 +21782,15 @@
    Parameters
    - + - - - + + @@ -20531,20 +21813,20 @@
    Returns
    System.Nullable<System.Boolean>System.Nullable<System.Byte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Byte>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Decimal>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, byte? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, decimal? value, ISerializationContext context)
    Parameters
    @@ -20563,15 +21845,15 @@
    Parameters
    - + - - - + + @@ -20594,20 +21876,20 @@
    Returns
    System.Nullable<System.Byte>System.Nullable<System.Decimal> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Decimal>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Double>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, decimal? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, double? value, ISerializationContext context)
    Parameters
    @@ -20626,15 +21908,15 @@
    Parameters
    - + - - - + + @@ -20657,20 +21939,20 @@
    Returns
    System.Nullable<System.Decimal>System.Nullable<System.Double> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Double>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Int16>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, double? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, short? value, ISerializationContext context)
    Parameters
    @@ -20689,15 +21971,15 @@
    Parameters
    - + - - - + + @@ -20720,20 +22002,20 @@
    Returns
    System.Nullable<System.Double>System.Nullable<System.Int16> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Int16>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Int32>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, short? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, int? value, ISerializationContext context)
    Parameters
    @@ -20752,15 +22034,15 @@
    Parameters
    - + - - - + + @@ -20783,20 +22065,20 @@
    Returns
    System.Nullable<System.Int16>System.Nullable<System.Int32> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Int32>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Int64>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, int? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, long? value, ISerializationContext context)
    Parameters
    @@ -20815,15 +22097,15 @@
    Parameters
    - + - - - + + @@ -20846,20 +22128,20 @@
    Returns
    System.Nullable<System.Int32>System.Nullable<System.Int64> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Int64>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<SByte>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, long? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, sbyte? value, ISerializationContext context)
    Parameters
    @@ -20878,15 +22160,15 @@
    Parameters
    - + - - - + + @@ -20909,20 +22191,20 @@
    Returns
    System.Nullable<System.Int64>System.Nullable<System.SByte> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<SByte>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Single>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, sbyte? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, float? value, ISerializationContext context)
    Parameters
    @@ -20941,15 +22223,15 @@
    Parameters
    - + - - - + + @@ -20972,20 +22254,20 @@
    Returns
    System.Nullable<System.SByte>System.Nullable<System.Single> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<Single>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<UInt16>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, float? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ushort? value, ISerializationContext context)
    Parameters
    @@ -21004,15 +22286,15 @@
    Parameters
    - + - - - + + @@ -21035,20 +22317,20 @@
    Returns
    System.Nullable<System.Single>System.Nullable<System.UInt16> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<UInt16>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<UInt32>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ushort? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, uint? value, ISerializationContext context)
    Parameters
    @@ -21067,15 +22349,15 @@
    Parameters
    - + - - - + + @@ -21098,20 +22380,20 @@
    Returns
    System.Nullable<System.UInt16>System.Nullable<System.UInt32> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<UInt32>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<UInt64>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, uint? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ulong? value, ISerializationContext context)
    Parameters
    @@ -21130,15 +22412,15 @@
    Parameters
    - + - - - + + @@ -21161,20 +22443,20 @@
    Returns
    System.Nullable<System.UInt32>System.Nullable<System.UInt64> value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableAsync(Task<Stream>, Nullable<UInt64>, CancellationToken)

    +

    WriteNullableAsync(Task<Stream>, Nullable<Type>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, ulong? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNullableAsync(this Task<Stream> stream, Type? type, ISerializationContext context)
    Parameters
    @@ -21193,15 +22475,15 @@
    Parameters
    - - - + + - - - + + @@ -21224,20 +22506,20 @@
    Returns
    System.Nullable<System.UInt64>value

    Value to write

    +
    System.Nullable<Type>type

    Type

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableCount(Stream, Nullable<Int64>)

    +

    WriteNullableCount(ISerializationContext, Nullable<Int64>)

    Write a nullable count

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static bool WriteNullableCount(this Stream stream, long? count)
    +public static bool WriteNullableCount(this ISerializationContext context, long? count)
    Parameters
    @@ -21250,9 +22532,9 @@
    Parameters
    - - - + + @@ -21281,20 +22563,20 @@
    Returns
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableCount(Stream, Nullable<Int64>, Action)

    +

    WriteNullableCount(ISerializationContext, Nullable<Int64>, StreamExtensions.NullableWriter_Delegate)

    Write a nullable count

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNullableCount(this Stream stream, long? count, Action action)
    +public static Stream WriteNullableCount(this ISerializationContext context, long? count, StreamExtensions.NullableWriter_Delegate action)
    Parameters
    @@ -21307,9 +22589,9 @@
    Parameters
    - - - + + @@ -21319,7 +22601,7 @@
    Parameters
    - + @@ -21344,20 +22626,20 @@
    Returns
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    ActionStreamExtensions.NullableWriter_Delegate action

    Write action to execute, if the count isn't null

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableCountAsync(Stream, Nullable<Int64>, CancellationToken)

    +

    WriteNullableCountAsync(ISerializationContext, Nullable<Int64>)

    Write a nullable count

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<bool> WriteNullableCountAsync(this Stream stream, long? count, CancellationToken cancellationToken = null)
    +public static async Task<bool> WriteNullableCountAsync(this ISerializationContext context, long? count)
    Parameters
    @@ -21370,21 +22652,15 @@
    Parameters
    - - - + + - - - - - @@ -21407,20 +22683,20 @@
    Returns
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.Int64> count

    Count

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNullableCountAsync(Stream, Nullable<Int64>, Func<Task>, CancellationToken)

    +

    WriteNullableCountAsync(ISerializationContext, Nullable<Int64>, StreamExtensions.AsyncNullableWriter_Delegate)

    Write a nullable count

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteNullableCountAsync(this Stream stream, long? count, Func<Task> action, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteNullableCountAsync(this ISerializationContext context, long? count, StreamExtensions.AsyncNullableWriter_Delegate action)
    Parameters
    @@ -21433,9 +22709,9 @@
    Parameters
    - - - + + @@ -21445,15 +22721,9 @@
    Parameters
    - + - - - - - @@ -21476,19 +22746,19 @@
    Returns
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    Func<Task>StreamExtensions.AsyncNullableWriter_Delegate action

    Write action to execute, if the count isn't null

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumber(Stream, Object)

    +

    WriteNumber(Stream, Object, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNumber(this Stream stream, object value)
    +
    public static Stream WriteNumber(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -21510,6 +22780,12 @@
    Parameters
    + + + + + @@ -21532,19 +22808,19 @@
    Returns
    System.Object value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumber<T>(Stream, T)

    +

    WriteNumber<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteNumber<T>(this Stream stream, T value)
    +    
    public static Stream WriteNumber<T>(this Stream stream, T value, ISerializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -21567,6 +22843,12 @@
    Parameters
    T value

    Value to write

    + + + + ISerializationContext + context +

    Context

    @@ -21605,19 +22887,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberAsync(Stream, Object, CancellationToken)

    +

    WriteNumberAsync(Stream, Object, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNumberAsync(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -21642,9 +22924,72 @@
    Parameters
    - - - + + + + +
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberAsync(Task<Stream>, Object, ISerializationContext)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberAsync(this Task<Stream> stream, object value, ISerializationContext context)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + @@ -21667,20 +23012,20 @@
    Returns
    TypeNameDescription
    Task<Stream>stream

    Stream

    +
    System.Objectvalue

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberAsync(Task<Stream>, Object, CancellationToken)

    +

    WriteNumberAsync<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNumberAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteNumberAsync<T>(this Stream stream, T value, ISerializationContext context)
    +    where T : struct, IConvertible
    Parameters
    @@ -21693,21 +23038,21 @@
    Parameters
    - + - + - - - + + @@ -21724,25 +23069,42 @@
    Returns
    + + +
    Task<Stream>Stream stream

    Stream

    System.ObjectT value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Task<Stream>

    Stream

    +
    +
    Type Parameters
    + + + + + + + + + + +
    NameDescription
    T

    Number type

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberAsync<T>(Stream, T, CancellationToken)

    +

    WriteNumberAsync<T>(Task<Stream>, T, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteNumberAsync<T>(this Stream stream, T value, CancellationToken cancellationToken = null)
    +    
    [TargetedPatchingOptOut("Tiny method")]
    +public static Task<Stream> WriteNumberAsync<T>(this Task<Stream> stream, T value, ISerializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -21756,7 +23118,7 @@
    Parameters
    - Stream + Task<Stream> stream

    Stream

    @@ -21768,9 +23130,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -21809,21 +23171,19 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source - -

    WriteNumberAsync<T>(Task<Stream>, T, CancellationToken)

    + +

    WriteNumberInt(ISerializationContext, Object, Nullable<NumberTypes>, Boolean)

    Write

    Declaration
    -
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNumberAsync<T>(this Task<Stream> stream, T value, CancellationToken cancellationToken = null)
    -    where T : struct, IConvertible
    +
    public static Stream WriteNumberInt(ISerializationContext context, object value, NumberTypes? type, bool writeType = true)
    Parameters
    @@ -21836,23 +23196,28 @@
    Parameters
    - - - + + - + - - - + + + + + + +
    Task<Stream>stream

    Stream

    +
    ISerializationContextcontext

    Context

    TSystem.Object value

    Value to write

    CancellationTokencancellationToken

    Cancellation token

    +
    System.Nullable<NumberTypes>type

    Number type

    System.BooleanwriteType
    Returns
    @@ -21865,44 +23230,95 @@
    Returns
    - Task<Stream> + Stream

    Stream

    -
    Type Parameters
    + + | + Improve this Doc + + + View Source + + +

    WriteNumberIntAsync(ISerializationContext, Object, Nullable<NumberTypes>, Boolean)

    +

    Write

    +
    +
    +
    Declaration
    +
    +
    public static Task<Stream> WriteNumberIntAsync(ISerializationContext context, object value, NumberTypes? type, bool writeType = true)
    +
    +
    Parameters
    + - + + + + + + + + + + + + + + + + + + + +
    Type Name Description
    TISerializationContextcontext

    Context

    +
    System.Objectvalue

    Value to write

    +
    System.Nullable<NumberTypes>type

    Number type

    +
    System.BooleanwriteType
    +
    Returns
    + + + + + + + + + + +
    TypeDescription
    Task<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberNullable(Stream, Object)

    +

    WriteNumberNullable(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNumberNullable(this Stream stream, object value)
    +public static Stream WriteNumberNullable(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -21924,6 +23340,12 @@
    Parameters
    + + + + + @@ -21946,20 +23368,20 @@
    Returns
    System.Object value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberNullable<T>(Stream, Nullable<T>)

    +

    WriteNumberNullable<T>(Stream, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteNumberNullable<T>(this Stream stream, T? value)
    +public static Stream WriteNumberNullable<T>(this Stream stream, T? value, ISerializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -21982,6 +23404,12 @@
    Parameters
    System.Nullable<T> value

    Value to write

    + + + + ISerializationContext + context +

    Context

    @@ -22020,20 +23448,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberNullableAsync(Stream, Object, CancellationToken)

    +

    WriteNumberNullableAsync(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNumberNullableAsync(this Stream stream, object value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNumberNullableAsync(this Stream stream, object value, ISerializationContext context)
    Parameters
    @@ -22058,9 +23486,9 @@
    Parameters
    - - - + + @@ -22083,20 +23511,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberNullableAsync(Task<Stream>, Object, CancellationToken)

    +

    WriteNumberNullableAsync(Task<Stream>, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNumberNullableAsync(this Task<Stream> stream, object value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNumberNullableAsync(this Task<Stream> stream, object value, ISerializationContext context)
    Parameters
    @@ -22121,9 +23549,9 @@
    Parameters
    - - - + + @@ -22146,20 +23574,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, CancellationToken)

    +

    WriteNumberNullableAsync<T>(Stream, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNumberNullableAsync<T>(this Stream stream, T? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNumberNullableAsync<T>(this Stream stream, T? value, ISerializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -22185,9 +23613,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -22226,20 +23654,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteNumberNullableAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    +

    WriteNumberNullableAsync<T>(Task<Stream>, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteNumberNullableAsync<T>(this Task<Stream> stream, T? value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteNumberNullableAsync<T>(this Task<Stream> stream, T? value, ISerializationContext context)
         where T : struct, IConvertible
    Parameters
    @@ -22265,9 +23693,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -22306,20 +23734,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteObject(Stream, Object)

    +

    WriteObject(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteObject(this Stream stream, object obj)
    +public static Stream WriteObject(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -22341,6 +23769,12 @@
    Parameters
    + + + + + @@ -22363,20 +23797,20 @@
    Returns
    System.Object obj

    Object to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteObjectAsync(Stream, Object, CancellationToken)

    +

    WriteObjectAsync(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteObjectAsync(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -22401,9 +23835,9 @@
    Parameters
    - - - + + @@ -22426,20 +23860,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteObjectAsync(Task<Stream>, Object, CancellationToken)

    +

    WriteObjectAsync(Task<Stream>, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteObjectAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteObjectAsync(this Task<Stream> stream, object obj, ISerializationContext context)
    Parameters
    @@ -22464,9 +23898,9 @@
    Parameters
    - - - + + @@ -22489,20 +23923,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteObjectNullable(Stream, Object)

    +

    WriteObjectNullable(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteObjectNullable(this Stream stream, object obj)
    +public static Stream WriteObjectNullable(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -22524,6 +23958,12 @@
    Parameters
    + + + + + @@ -22546,20 +23986,20 @@
    Returns
    System.Object obj

    Object to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteObjectNullableAsync(Stream, Object, CancellationToken)

    +

    WriteObjectNullableAsync(Stream, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteObjectNullableAsync(this Stream stream, object obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteObjectNullableAsync(this Stream stream, object obj, ISerializationContext context)
    Parameters
    @@ -22584,9 +24024,9 @@
    Parameters
    - - - + + @@ -22609,20 +24049,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteObjectNullableAsync(Task<Stream>, Object, CancellationToken)

    +

    WriteObjectNullableAsync(Task<Stream>, Object, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteObjectNullableAsync(this Task<Stream> stream, object obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteObjectNullableAsync(this Task<Stream> stream, object obj, ISerializationContext context)
    Parameters
    @@ -22647,9 +24087,9 @@
    Parameters
    - - - + + @@ -22672,20 +24112,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerialized(Stream, IStreamSerializer)

    +

    WriteSerialized(Stream, IStreamSerializer, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj)
    +public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj, ISerializationContext context)
    Parameters
    @@ -22707,6 +24147,12 @@
    Parameters
    + + + + + @@ -22729,20 +24175,20 @@
    Returns
    IStreamSerializer obj

    Object

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerialized<T>(Stream, T)

    +

    WriteSerialized<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerialized<T>(this Stream stream, T obj)
    +public static Stream WriteSerialized<T>(this Stream stream, T obj, ISerializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -22765,6 +24211,12 @@
    Parameters
    T obj

    Object

    + + + + ISerializationContext + context +

    Context

    @@ -22803,20 +24255,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken)

    +

    WriteSerializedAsync(Stream, IStreamSerializer, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedAsync(this Stream stream, IStreamSerializer obj, ISerializationContext context)
    Parameters
    @@ -22841,9 +24293,9 @@
    Parameters
    - - - + + @@ -22866,20 +24318,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedAsync(Task<Stream>, IStreamSerializer, CancellationToken)

    +

    WriteSerializedAsync(Task<Stream>, IStreamSerializer, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedAsync(this Task<Stream> stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedAsync(this Task<Stream> stream, IStreamSerializer obj, ISerializationContext context)
    Parameters
    @@ -22904,9 +24356,9 @@
    Parameters
    - - - + + @@ -22929,20 +24381,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedAsync<T>(Stream, T, CancellationToken)

    +

    WriteSerializedAsync<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedAsync<T>(this Stream stream, T obj, ISerializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -22968,9 +24420,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -23009,20 +24461,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedAsync<T>(Task<Stream>, T, CancellationToken)

    +

    WriteSerializedAsync<T>(Task<Stream>, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedAsync<T>(this Task<Stream> stream, T obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedAsync<T>(this Task<Stream> stream, T obj, ISerializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -23048,9 +24500,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -23089,20 +24541,140 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc + + + View Source + + +

    WriteSerializedData(ISerializationContext, Memory<Byte>)

    +

    Write serialized Data

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedData(this ISerializationContext context, Memory<byte> data)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    ISerializationContextcontext

    Context

    +
    Memory<System.Byte>data

    Serialized data (will be returned to pool)

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc + + + View Source + + +

    WriteSerializedData(ISerializationContext, Byte[], Int32)

    +

    Write serialized Data

    +
    +
    +
    Declaration
    +
    +
    [TargetedPatchingOptOut("Tiny method")]
    +public static Stream WriteSerializedData(this ISerializationContext context, byte[] data, int len)
    +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeNameDescription
    ISerializationContextcontext

    Context

    +
    System.Byte[]data

    Serialized data (will be returned to pool)

    +
    System.Int32len

    Data length in bytes

    +
    +
    Returns
    + + + + + + + + + + + + + +
    TypeDescription
    Stream

    Stream

    +
    + + | + Improve this Doc - View Source + View Source - -

    WriteSerializedData(Stream, Byte[], Int32, ArrayPool<Byte>)

    + +

    WriteSerializedDataAsync(ISerializationContext, Memory<Byte>)

    Write serialized Data

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null)
    +public static async Task<Stream> WriteSerializedDataAsync(this ISerializationContext context, Memory<byte> data)
    Parameters
    @@ -23115,27 +24687,15 @@
    Parameters
    - - - + + - + - - - - - - - - - - @@ -23150,7 +24710,7 @@
    Returns
    - + @@ -23158,20 +24718,20 @@
    Returns
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    System.Byte[]Memory<System.Byte> data

    Serialized data (will be returned to pool)

    -
    System.Int32len

    Data length in bytes

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    StreamTask<Stream>

    Stream

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool<Byte>, CancellationToken)

    +

    WriteSerializedDataAsync(ISerializationContext, Byte[], Int32)

    Write serialized Data

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteSerializedDataAsync(this Stream stream, byte[] data, int len, ArrayPool<byte> pool = null, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteSerializedDataAsync(this ISerializationContext context, byte[] data, int len)
    Parameters
    @@ -23184,9 +24744,9 @@
    Parameters
    - - - + + @@ -23199,18 +24759,6 @@
    Parameters
    - - - - - - - - - - @@ -23233,20 +24781,20 @@
    Returns
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    System.Int32 len

    Data length in bytes

    -
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool (data will returned to that pool)

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullable(Stream, IStreamSerializer)

    +

    WriteSerializedNullable(Stream, IStreamSerializer, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer obj)
    +public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer obj, ISerializationContext context)
    Parameters
    @@ -23268,6 +24816,12 @@
    Parameters
    + + + + + @@ -23290,20 +24844,20 @@
    Returns
    IStreamSerializer obj

    Object

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullable<T>(Stream, T)

    +

    WriteSerializedNullable<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullable<T>(this Stream stream, T obj)
    +public static Stream WriteSerializedNullable<T>(this Stream stream, T obj, ISerializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -23326,6 +24880,12 @@
    Parameters
    T obj

    Object

    + + + + ISerializationContext + context +

    Context

    @@ -23364,20 +24924,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken)

    +

    WriteSerializedNullableAsync(Stream, IStreamSerializer, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedNullableAsync(this Stream stream, IStreamSerializer obj, ISerializationContext context)
    Parameters
    @@ -23402,9 +24962,9 @@
    Parameters
    - - - + + @@ -23427,20 +24987,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullableAsync(Task<Stream>, IStreamSerializer, CancellationToken)

    +

    WriteSerializedNullableAsync(Task<Stream>, IStreamSerializer, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedNullableAsync(this Task<Stream> stream, IStreamSerializer obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedNullableAsync(this Task<Stream> stream, IStreamSerializer obj, ISerializationContext context)
    Parameters
    @@ -23465,9 +25025,9 @@
    Parameters
    - - - + + @@ -23490,20 +25050,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullableAsync<T>(Stream, T, CancellationToken)

    +

    WriteSerializedNullableAsync<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedNullableAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedNullableAsync<T>(this Stream stream, T obj, ISerializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -23529,9 +25089,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -23570,20 +25130,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullableAsync<T>(Task<Stream>, T, CancellationToken)

    +

    WriteSerializedNullableAsync<T>(Task<Stream>, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedNullableAsync<T>(this Task<Stream> stream, T obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedNullableAsync<T>(this Task<Stream> stream, T obj, ISerializationContext context)
         where T : class, IStreamSerializer
    Parameters
    @@ -23609,9 +25169,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -23650,20 +25210,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>)

    +

    WriteSerializedNullableStruct<T>(Stream, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedNullableStruct<T>(this Stream stream, T? obj)
    +public static Stream WriteSerializedNullableStruct<T>(this Stream stream, T? obj, ISerializationContext context)
         where T : struct, IStreamSerializer
    Parameters
    @@ -23686,6 +25246,12 @@
    Parameters
    System.Nullable<T> obj

    Object

    + + + + ISerializationContext + context +

    Context

    @@ -23724,20 +25290,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullableStructAsync<T>(Stream, Nullable<T>, CancellationToken)

    +

    WriteSerializedNullableStructAsync<T>(Stream, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedNullableStructAsync<T>(this Stream stream, T? obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedNullableStructAsync<T>(this Stream stream, T? obj, ISerializationContext context)
         where T : struct, IStreamSerializer
    Parameters
    @@ -23763,9 +25329,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -23804,20 +25370,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedNullableStructAsync<T>(Task<Stream>, Nullable<T>, CancellationToken)

    +

    WriteSerializedNullableStructAsync<T>(Task<Stream>, Nullable<T>, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedNullableStructAsync<T>(this Task<Stream> stream, T? obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedNullableStructAsync<T>(this Task<Stream> stream, T? obj, ISerializationContext context)
         where T : struct, IStreamSerializer
    Parameters
    @@ -23843,9 +25409,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -23884,20 +25450,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedStruct<T>(Stream, T)

    +

    WriteSerializedStruct<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializedStruct<T>(this Stream stream, T obj)
    +public static Stream WriteSerializedStruct<T>(this Stream stream, T obj, ISerializationContext context)
         where T : struct, IStreamSerializer
    Parameters
    @@ -23920,6 +25486,12 @@
    Parameters
    T obj

    Object

    + + + + ISerializationContext + context +

    Context

    @@ -23958,20 +25530,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedStructAsync<T>(Stream, T, CancellationToken)

    +

    WriteSerializedStructAsync<T>(Stream, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedStructAsync<T>(this Stream stream, T obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedStructAsync<T>(this Stream stream, T obj, ISerializationContext context)
         where T : struct, IStreamSerializer
    Parameters
    @@ -23997,9 +25569,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -24038,20 +25610,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializedStructAsync<T>(Task<Stream>, T, CancellationToken)

    +

    WriteSerializedStructAsync<T>(Task<Stream>, T, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializedStructAsync<T>(this Task<Stream> stream, T obj, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializedStructAsync<T>(this Task<Stream> stream, T obj, ISerializationContext context)
         where T : struct, IStreamSerializer
    Parameters
    @@ -24077,9 +25649,9 @@
    Parameters
    - CancellationToken - cancellationToken -

    Cancellation token

    + ISerializationContext + context +

    Context

    @@ -24118,20 +25690,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializerVersion(Stream)

    +

    WriteSerializerVersion(Stream, ISerializationContext)

    Write the serializer version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteSerializerVersion(this Stream stream)
    +public static Stream WriteSerializerVersion(this Stream stream, ISerializationContext context)
    Parameters
    @@ -24147,6 +25719,12 @@
    Parameters
    + + + + + @@ -24169,20 +25747,20 @@
    Returns
    Stream stream

    Stream

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializerVersionAsync(Stream, CancellationToken)

    +

    WriteSerializerVersionAsync(Stream, ISerializationContext)

    Write the serializer version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<Stream> WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = null)
    +public static async Task<Stream> WriteSerializerVersionAsync(this Stream stream, ISerializationContext context)
    Parameters
    @@ -24201,9 +25779,9 @@
    Parameters
    - - - + + @@ -24226,20 +25804,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteSerializerVersionAsync(Task<Stream>, CancellationToken)

    +

    WriteSerializerVersionAsync(Task<Stream>, ISerializationContext)

    Write the serializer version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteSerializerVersionAsync(this Task<Stream> stream, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteSerializerVersionAsync(this Task<Stream> stream, ISerializationContext context)
    Parameters
    @@ -24258,9 +25836,9 @@
    Parameters
    - - - + + @@ -24283,19 +25861,19 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStream(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>)

    +

    WriteStream(Stream, Stream, ISerializationContext, Nullable<Int32>)

    Write a stream

    Declaration
    -
    public static Stream WriteStream(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +
    public static Stream WriteStream(this Stream stream, Stream source, ISerializationContext context, int? chunkLength = null)
    Parameters
    @@ -24320,9 +25898,9 @@
    Parameters
    - - - + + @@ -24351,19 +25929,19 @@
    Returns
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStreamAsync(Stream, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    WriteStreamAsync(Stream, Stream, ISerializationContext, Nullable<Int32>)

    Write a stream

    Declaration
    -
    public static Task<Stream> WriteStreamAsync(this Stream stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteStreamAsync(this Stream stream, Stream source, ISerializationContext context, int? chunkLength = null)
    Parameters
    @@ -24388,21 +25966,15 @@
    Parameters
    - - - + + - - - - - @@ -24425,20 +25997,20 @@
    Returns
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.Int32> chunkLength

    Chunk length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStreamAsync(Task<Stream>, Stream, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    WriteStreamAsync(Task<Stream>, Stream, ISerializationContext, Nullable<Int32>)

    Write a stream

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStreamAsync(this Task<Stream> stream, Stream source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStreamAsync(this Task<Stream> stream, Stream source, ISerializationContext context, int? chunkLength = null)
    Parameters
    @@ -24463,21 +26035,15 @@
    Parameters
    - - - + + - - - - - @@ -24500,20 +26066,20 @@
    Returns
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.Int32> chunkLength

    Chunk length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStreamNullable(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>)

    +

    WriteStreamNullable(Stream, Nullable<Stream>, ISerializationContext, Nullable<Int32>)

    Write a stream

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null)
    +public static Stream WriteStreamNullable(this Stream stream, Stream? source, ISerializationContext context, int? chunkLength = null)
    Parameters
    @@ -24538,9 +26104,9 @@
    Parameters
    - - - + + @@ -24569,20 +26135,20 @@
    Returns
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStreamNullableAsync(Stream, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    WriteStreamNullableAsync(Stream, Nullable<Stream>, ISerializationContext, Nullable<Int32>)

    Write a stream

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStreamNullableAsync(this Stream stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStreamNullableAsync(this Stream stream, Stream? source, ISerializationContext context, int? chunkLength = null)
    Parameters
    @@ -24607,21 +26173,15 @@
    Parameters
    - - - + + - - - - - @@ -24644,20 +26204,20 @@
    Returns
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.Int32> chunkLength

    Chunk length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStreamNullableAsync(Task<Stream>, Nullable<Stream>, ArrayPool<Byte>, Nullable<Int32>, CancellationToken)

    +

    WriteStreamNullableAsync(Task<Stream>, Nullable<Stream>, ISerializationContext, Nullable<Int32>)

    Write a stream

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStreamNullableAsync(this Task<Stream> stream, Stream? source, ArrayPool<byte> pool = null, int? chunkLength = null, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStreamNullableAsync(this Task<Stream> stream, Stream? source, ISerializationContext context, int? chunkLength = null)
    Parameters
    @@ -24682,21 +26242,15 @@
    Parameters
    - - - + + - - - - - @@ -24719,19 +26273,19 @@
    Returns
    System.Buffers.ArrayPool<System.Byte>pool

    Array pool

    +
    ISerializationContextcontext

    Context

    System.Nullable<System.Int32> chunkLength

    Chunk length in bytes

    -
    CancellationTokencancellationToken

    Cancellation token

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString(Stream, String)

    +

    WriteString(Stream, String, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteString(this Stream stream, string value)
    +
    public static Stream WriteString(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -24753,6 +26307,12 @@
    Parameters
    + + + + + @@ -24775,19 +26335,19 @@
    Returns
    System.String value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString16(Stream, String)

    +

    WriteString16(Stream, String, ISerializationContext)

    Write UTF-16 (little endian) string

    Declaration
    -
    public static Stream WriteString16(this Stream stream, string value)
    +
    public static Stream WriteString16(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -24809,6 +26369,12 @@
    Parameters
    + + + + + @@ -24831,19 +26397,19 @@
    Returns
    System.String value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString16Async(Stream, String, CancellationToken)

    +

    WriteString16Async(Stream, String, ISerializationContext)

    Write UTF-16 (little endian) string

    Declaration
    -
    public static Task<Stream> WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteString16Async(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -24868,9 +26434,9 @@
    Parameters
    - - - + + @@ -24893,20 +26459,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString16Async(Task<Stream>, String, CancellationToken)

    +

    WriteString16Async(Task<Stream>, String, ISerializationContext)

    Write UTF-16 (little endian) string

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteString16Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteString16Async(this Task<Stream> stream, string value, ISerializationContext context)
    Parameters
    @@ -24931,9 +26497,9 @@
    Parameters
    - - - + + @@ -24956,19 +26522,19 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString16Nullable<T>(Stream, String)

    +

    WriteString16Nullable(Stream, String, ISerializationContext)

    Write UTF-16 (little endian) string

    Declaration
    -
    public static Stream WriteString16Nullable<T>(this Stream stream, string value)
    +
    public static Stream WriteString16Nullable(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -24990,6 +26556,12 @@
    Parameters
    + + + + + @@ -25010,36 +26582,21 @@
    Returns
    System.String value

    Value to write

    +
    ISerializationContextcontext

    Context

    -
    Type Parameters
    - - - - - - - - - - - - - -
    NameDescription
    T
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString16NullableAsync(Stream, String, CancellationToken)

    +

    WriteString16NullableAsync(Stream, String, ISerializationContext)

    Write UTF-16 (little endian) string

    Declaration
    -
    public static Task<Stream> WriteString16NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteString16NullableAsync(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25064,9 +26621,9 @@
    Parameters
    - - - + + @@ -25089,20 +26646,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString16NullableAsync(Task<Stream>, String, CancellationToken)

    +

    WriteString16NullableAsync(Task<Stream>, String, ISerializationContext)

    Write UTF-16 (little endian) string

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteString16NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteString16NullableAsync(this Task<Stream> stream, string value, ISerializationContext context)
    Parameters
    @@ -25127,9 +26684,9 @@
    Parameters
    - - - + + @@ -25152,19 +26709,19 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString32(Stream, String)

    +

    WriteString32(Stream, String, ISerializationContext)

    Write UTF-32 (little endian) string

    Declaration
    -
    public static Stream WriteString32(this Stream stream, string value)
    +
    public static Stream WriteString32(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25186,6 +26743,12 @@
    Parameters
    + + + + + @@ -25208,19 +26771,19 @@
    Returns
    System.String value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString32Async(Stream, String, CancellationToken)

    +

    WriteString32Async(Stream, String, ISerializationContext)

    Write UTF-32 (little endian) string

    Declaration
    -
    public static Task<Stream> WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteString32Async(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25245,9 +26808,9 @@
    Parameters
    - - - + + @@ -25270,20 +26833,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString32Async(Task<Stream>, String, CancellationToken)

    +

    WriteString32Async(Task<Stream>, String, ISerializationContext)

    Write UTF-32 (little endian) string

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteString32Async(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteString32Async(this Task<Stream> stream, string value, ISerializationContext context)
    Parameters
    @@ -25308,9 +26871,9 @@
    Parameters
    - - - + + @@ -25333,19 +26896,19 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString32Nullable(Stream, String)

    +

    WriteString32Nullable(Stream, String, ISerializationContext)

    Write UTF-32 (little endian) string

    Declaration
    -
    public static Stream WriteString32Nullable(this Stream stream, string value)
    +
    public static Stream WriteString32Nullable(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25367,6 +26930,12 @@
    Parameters
    + + + + + @@ -25389,19 +26958,19 @@
    Returns
    System.String value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString32NullableAsync(Stream, String, CancellationToken)

    +

    WriteString32NullableAsync(Stream, String, ISerializationContext)

    Write UTF-32 (little endian) string

    Declaration
    -
    public static Task<Stream> WriteString32NullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteString32NullableAsync(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25426,9 +26995,9 @@
    Parameters
    - - - + + @@ -25451,20 +27020,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteString32NullableAsync(Task<Stream>, String, CancellationToken)

    +

    WriteString32NullableAsync(Task<Stream>, String, ISerializationContext)

    Write UTF-32 (little endian) string

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteString32NullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteString32NullableAsync(this Task<Stream> stream, string value, ISerializationContext context)
    Parameters
    @@ -25489,9 +27058,9 @@
    Parameters
    - - - + + @@ -25514,19 +27083,19 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStringAsync(Stream, String, CancellationToken)

    +

    WriteStringAsync(Stream, String, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteStringAsync(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25551,9 +27120,9 @@
    Parameters
    - - - + + @@ -25576,20 +27145,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStringAsync(Task<Stream>, String, CancellationToken)

    +

    WriteStringAsync(Task<Stream>, String, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStringAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStringAsync(this Task<Stream> stream, string value, ISerializationContext context)
    Parameters
    @@ -25614,9 +27183,9 @@
    Parameters
    - - - + + @@ -25639,19 +27208,19 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStringNullable(Stream, String)

    +

    WriteStringNullable(Stream, String, ISerializationContext)

    Write

    Declaration
    -
    public static Stream WriteStringNullable(this Stream stream, string value)
    +
    public static Stream WriteStringNullable(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25673,6 +27242,12 @@
    Parameters
    + + + + + @@ -25695,19 +27270,19 @@
    Returns
    System.String value

    Value to write

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStringNullableAsync(Stream, String, CancellationToken)

    +

    WriteStringNullableAsync(Stream, String, ISerializationContext)

    Write

    Declaration
    -
    public static Task<Stream> WriteStringNullableAsync(this Stream stream, string value, CancellationToken cancellationToken = null)
    +
    public static Task<Stream> WriteStringNullableAsync(this Stream stream, string value, ISerializationContext context)
    Parameters
    @@ -25732,9 +27307,9 @@
    Parameters
    - - - + + @@ -25757,20 +27332,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStringNullableAsync(Task<Stream>, String, CancellationToken)

    +

    WriteStringNullableAsync(Task<Stream>, String, ISerializationContext)

    Write

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStringNullableAsync(this Task<Stream> stream, string value, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStringNullableAsync(this Task<Stream> stream, string value, ISerializationContext context)
    Parameters
    @@ -25795,9 +27370,9 @@
    Parameters
    - - - + + @@ -25820,20 +27395,20 @@
    Returns
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStruct(Stream, Object, Boolean)

    +

    WriteStruct(Stream, Object, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true)
    +public static Stream WriteStruct(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true)
    Parameters
    @@ -25855,6 +27430,12 @@
    Parameters
    + + + + + @@ -25883,20 +27464,20 @@
    Returns
    System.Object value

    Struct

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStruct<T>(Stream, T, Boolean)

    +

    WriteStruct<T>(Stream, T, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStruct<T>(this Stream stream, T value, bool forceLittleEndian = true)
    +public static Stream WriteStruct<T>(this Stream stream, T value, ISerializationContext context, bool forceLittleEndian = true)
         where T : struct
    Parameters
    @@ -25919,6 +27500,12 @@
    Parameters
    T value

    Struct

    + + + + ISerializationContext + context +

    Context

    @@ -25963,20 +27550,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructAsync(Stream, Object, Boolean, CancellationToken)

    +

    WriteStructAsync(Stream, Object, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructAsync(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true)
    Parameters
    @@ -26001,15 +27588,15 @@
    Parameters
    - - - + + - - - + + @@ -26032,20 +27619,20 @@
    Returns
    System.BooleanforceLittleEndian

    Force little endian encoding?

    +
    ISerializationContextcontext

    Context

    CancellationTokencancellationToken

    Cancellation token

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructAsync(Task<Stream>, Object, Boolean, CancellationToken)

    +

    WriteStructAsync(Task<Stream>, Object, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructAsync(this Task<Stream> stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructAsync(this Task<Stream> stream, object value, ISerializationContext context, bool forceLittleEndian = true)
    Parameters
    @@ -26070,15 +27657,15 @@
    Parameters
    - - - + + - - - + + @@ -26101,20 +27688,20 @@
    Returns
    System.BooleanforceLittleEndian

    Force little endian encoding?

    +
    ISerializationContextcontext

    Context

    CancellationTokencancellationToken

    Cancellation token

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructAsync<T>(Stream, T, Boolean, CancellationToken)

    +

    WriteStructAsync<T>(Stream, T, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructAsync<T>(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructAsync<T>(this Stream stream, T value, ISerializationContext context, bool forceLittleEndian = true)
         where T : struct
    Parameters
    @@ -26140,15 +27727,15 @@
    Parameters
    - System.Boolean - forceLittleEndian -

    Force little endian encoding?

    + ISerializationContext + context +

    Context

    - CancellationToken - cancellationToken -

    Cancellation token

    + System.Boolean + forceLittleEndian +

    Force little endian encoding?

    @@ -26187,20 +27774,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructAsync<T>(Task<Stream>, T, Boolean, CancellationToken)

    +

    WriteStructAsync<T>(Task<Stream>, T, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructAsync<T>(this Task<Stream> stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructAsync<T>(this Task<Stream> stream, T value, ISerializationContext context, bool forceLittleEndian = true)
         where T : struct
    Parameters
    @@ -26226,15 +27813,15 @@
    Parameters
    - System.Boolean - forceLittleEndian -

    Force little endian encoding?

    + ISerializationContext + context +

    Context

    - CancellationToken - cancellationToken -

    Cancellation token

    + System.Boolean + forceLittleEndian +

    Force little endian encoding?

    @@ -26273,20 +27860,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullable(Stream, Object, Boolean)

    +

    WriteStructNullable(Stream, Object, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStructNullable(this Stream stream, object value, bool forceLittleEndian = true)
    +public static Stream WriteStructNullable(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true)
    Parameters
    @@ -26308,6 +27895,12 @@
    Parameters
    + + + + + @@ -26336,20 +27929,20 @@
    Returns
    System.Object value

    Struct

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullable<T>(Stream, Nullable<T>, Boolean)

    +

    WriteStructNullable<T>(Stream, Nullable<T>, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Stream WriteStructNullable<T>(this Stream stream, T? value, bool forceLittleEndian = true)
    +public static Stream WriteStructNullable<T>(this Stream stream, T? value, ISerializationContext context, bool forceLittleEndian = true)
         where T : struct
    Parameters
    @@ -26372,6 +27965,12 @@
    Parameters
    System.Nullable<T> value

    Struct

    + + + + ISerializationContext + context +

    Context

    @@ -26416,20 +28015,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken)

    +

    WriteStructNullableAsync(Stream, Object, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructNullableAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructNullableAsync(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true)
    Parameters
    @@ -26454,15 +28053,15 @@
    Parameters
    - - - + + - - - + + @@ -26485,20 +28084,20 @@
    Returns
    System.BooleanforceLittleEndian

    Force little endian encoding?

    +
    ISerializationContextcontext

    Context

    CancellationTokencancellationToken

    Cancellation token

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullableAsync(Task<Stream>, Object, Boolean, CancellationToken)

    +

    WriteStructNullableAsync(Task<Stream>, Object, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructNullableAsync(this Task<Stream> stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructNullableAsync(this Task<Stream> stream, object value, ISerializationContext context, bool forceLittleEndian = true)
    Parameters
    @@ -26523,15 +28122,15 @@
    Parameters
    - - - + + - - - + + @@ -26554,20 +28153,20 @@
    Returns
    System.BooleanforceLittleEndian

    Force little endian encoding?

    +
    ISerializationContextcontext

    Context

    CancellationTokencancellationToken

    Cancellation token

    +
    System.BooleanforceLittleEndian

    Force little endian encoding?

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullableAsync<T>(Stream, Nullable<T>, Boolean, CancellationToken)

    +

    WriteStructNullableAsync<T>(Stream, Nullable<T>, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructNullableAsync<T>(this Stream stream, T? value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructNullableAsync<T>(this Stream stream, T? value, ISerializationContext context, bool forceLittleEndian = true)
         where T : struct
    Parameters
    @@ -26593,15 +28192,15 @@
    Parameters
    - System.Boolean - forceLittleEndian -

    Force little endian encoding?

    + ISerializationContext + context +

    Context

    - CancellationToken - cancellationToken -

    Cancellation token

    + System.Boolean + forceLittleEndian +

    Force little endian encoding?

    @@ -26640,20 +28239,20 @@
    Type Parameters
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    WriteStructNullableAsync<T>(Task<Stream>, Nullable<T>, Boolean, CancellationToken)

    +

    WriteStructNullableAsync<T>(Task<Stream>, Nullable<T>, ISerializationContext, Boolean)

    Write a struct

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static Task<Stream> WriteStructNullableAsync<T>(this Task<Stream> stream, T? value, bool forceLittleEndian = true, CancellationToken cancellationToken = null)
    +public static Task<Stream> WriteStructNullableAsync<T>(this Task<Stream> stream, T? value, ISerializationContext context, bool forceLittleEndian = true)
         where T : struct
    Parameters
    @@ -26679,15 +28278,15 @@
    Parameters
    - System.Boolean - forceLittleEndian -

    Force little endian encoding?

    + ISerializationContext + context +

    Context

    - CancellationToken - cancellationToken -

    Cancellation token

    + System.Boolean + forceLittleEndian +

    Force little endian encoding?

    @@ -26735,7 +28334,7 @@
    Type Parameters
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate.html new file mode 100644 index 0000000..5662c6f --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate.html @@ -0,0 +1,180 @@ + + + + + + + + Delegate StreamSerializer.AsyncDeserializer_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate.html new file mode 100644 index 0000000..7466ad4 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate.html @@ -0,0 +1,179 @@ + + + + + + + + Delegate StreamSerializer.AsyncSerializer_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate.html new file mode 100644 index 0000000..a76fcbd --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate.html @@ -0,0 +1,180 @@ + + + + + + + + Delegate StreamSerializer.Deserializer_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html index 9e7ed2d..c071d1f 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate void FindAsyncDeserializer_Delegate(SerializerEventArgs<StreamSerializer.AsyncDeserialize_Delegate> e);
    +
    public delegate void FindAsyncDeserializer_Delegate(SerializerEventArgs<StreamSerializer.AsyncDeserializer_Delegate> e);
    Parameters
    @@ -93,7 +93,7 @@
    Parameters
    - + @@ -101,6 +101,9 @@
    Parameters
    SerializerEventArgs<StreamSerializer.AsyncDeserialize_Delegate>SerializerEventArgs<StreamSerializer.AsyncDeserializer_Delegate> e

    Event arguments

    Extension Methods

    +
    @@ -110,9 +113,6 @@

    Extension Methods

    -
    @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html index 84a5ea1..ea2b34b 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate void FindAsyncSerializer_Delegate(SerializerEventArgs<StreamSerializer.AsyncSerialize_Delegate> e);
    +
    public delegate void FindAsyncSerializer_Delegate(SerializerEventArgs<StreamSerializer.AsyncSerializer_Delegate> e);
    Parameters
    @@ -93,7 +93,7 @@
    Parameters
    - + @@ -101,6 +101,9 @@
    Parameters
    SerializerEventArgs<StreamSerializer.AsyncSerialize_Delegate>SerializerEventArgs<StreamSerializer.AsyncSerializer_Delegate> e

    Event arguments

    Extension Methods

    +
    @@ -110,9 +113,6 @@

    Extension Methods

    -
    @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html index 473fe89..27415e7 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate void FindSyncDeserializer_Delegate(SerializerEventArgs<StreamSerializer.Deserialize_Delegate> e);
    +
    public delegate void FindSyncDeserializer_Delegate(SerializerEventArgs<StreamSerializer.Deserializer_Delegate> e);
    Parameters
    @@ -93,7 +93,7 @@
    Parameters
    - + @@ -101,6 +101,9 @@
    Parameters
    SerializerEventArgs<StreamSerializer.Deserialize_Delegate>SerializerEventArgs<StreamSerializer.Deserializer_Delegate> e

    Event arguments

    Extension Methods

    +
    @@ -110,9 +113,6 @@

    Extension Methods

    -
    @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html index b8b9b60..5af92dd 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate void FindSyncSerializer_Delegate(SerializerEventArgs<StreamSerializer.Serialize_Delegate> e);
    +
    public delegate void FindSyncSerializer_Delegate(SerializerEventArgs<StreamSerializer.Serializer_Delegate> e);
    Parameters
    @@ -93,7 +93,7 @@
    Parameters
    - + @@ -101,6 +101,9 @@
    Parameters
    SerializerEventArgs<StreamSerializer.Serialize_Delegate>SerializerEventArgs<StreamSerializer.Serializer_Delegate> e

    Event arguments

    Extension Methods

    +
    @@ -110,9 +113,6 @@

    Extension Methods

    -
    @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html index 93c6a88..2abfd5c 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html @@ -101,6 +101,9 @@
    Parameters

    Extension Methods

    + @@ -110,9 +113,6 @@

    Extension Methods

    -
    @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html index cc6f0d5..f4d4e51 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate object InstanceFactory_Delegate(Type type, Stream stream, int version, ISerializerOptions options);
    +
    public delegate object InstanceFactory_Delegate(Type type, IDeserializationContext context);
    Parameters
    @@ -99,21 +99,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -135,6 +123,9 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    ISerializerOptionsoptions

    Serializer options

    +
    IDeserializationContextcontext

    Context

    Extension Methods

    +
    @@ -144,9 +135,6 @@

    Extension Methods

    -
    @@ -158,7 +146,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html index ac894bc..a258606 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html @@ -101,6 +101,9 @@
    Parameters

    Extension Methods

    + @@ -110,9 +113,6 @@

    Extension Methods

    -
    @@ -124,7 +124,7 @@

    Extension Methods

    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.html new file mode 100644 index 0000000..324a979 --- /dev/null +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.html @@ -0,0 +1,164 @@ + + + + + + + + Delegate StreamSerializer.Serializer_Delegate + | Stream-Serializer-Extensions + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    +
    + +
    +
    + + + + + + diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html index 2200c10..b7a2ea4 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -118,7 +118,7 @@

    Fields Improve this Doc - View Source + View Source

    AllowedTypes

    Allowed (non-array) types

    @@ -148,7 +148,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncDeserializer

    Deserializer

    @@ -156,7 +156,7 @@

    Declaration
    -
    public static readonly ConcurrentDictionary<Type, StreamSerializer.AsyncDeserialize_Delegate> AsyncDeserializer
    +
    public static readonly ConcurrentDictionary<Type, StreamSerializer.AsyncDeserializer_Delegate> AsyncDeserializer
    Field Value
    @@ -168,7 +168,7 @@
    Field Value
    - + @@ -178,7 +178,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    AsyncSerializer

    Serializer

    @@ -186,7 +186,7 @@

    Declaration
    -
    public static readonly ConcurrentDictionary<Type, StreamSerializer.AsyncSerialize_Delegate> AsyncSerializer
    +
    public static readonly ConcurrentDictionary<Type, StreamSerializer.AsyncSerializer_Delegate> AsyncSerializer
    Field Value
    System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.AsyncDeserialize_Delegate>System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.AsyncDeserializer_Delegate>
    @@ -198,7 +198,7 @@
    Field Value
    - + @@ -208,7 +208,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    InstanceFactories

    Type instance factories

    @@ -238,7 +238,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncDeserializer

    Deserializer

    @@ -246,7 +246,7 @@

    Declaration
    -
    public static readonly ConcurrentDictionary<Type, StreamSerializer.Deserialize_Delegate> SyncDeserializer
    +
    public static readonly ConcurrentDictionary<Type, StreamSerializer.Deserializer_Delegate> SyncDeserializer
    Field Value
    System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.AsyncSerialize_Delegate>System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.AsyncSerializer_Delegate>
    @@ -258,7 +258,7 @@
    Field Value
    - + @@ -268,7 +268,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncObject

    An object for thread locking

    @@ -298,7 +298,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    SyncSerializer

    Serializer

    @@ -306,7 +306,7 @@

    Declaration
    -
    public static readonly ConcurrentDictionary<Type, StreamSerializer.Serialize_Delegate> SyncSerializer
    +
    public static readonly ConcurrentDictionary<Type, StreamSerializer.Serializer_Delegate> SyncSerializer
    Field Value
    System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.Deserialize_Delegate>System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.Deserializer_Delegate>
    @@ -318,7 +318,7 @@
    Field Value
    - + @@ -328,7 +328,7 @@
    Field Value
    Improve this Doc - View Source + View Source

    VERSION

    Version number

    @@ -360,7 +360,7 @@

    Properties Improve this Doc - View Source + View Source

    BufferPool

    @@ -386,12 +386,136 @@
    Property Value
    System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.Serialize_Delegate>System.Collections.Concurrent.ConcurrentDictionary<Type, StreamSerializer.Serializer_Delegate>
    + + | + Improve this Doc + + + View Source + + +

    HashCodeCachePool

    +

    Object hash code cache pool to use

    +
    +
    +
    Declaration
    +
    +
    public static ArrayPool<int> HashCodeCachePool { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Buffers.ArrayPool<System.Int32>
    + + | + Improve this Doc + + + View Source + + +

    ObjectCachePool

    +

    Object cache pool to use

    +
    +
    +
    Declaration
    +
    +
    public static ArrayPool<object> ObjectCachePool { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Buffers.ArrayPool<System.Object>
    + + | + Improve this Doc + + + View Source + + +

    TypeCacheEnabled

    +

    Is the type cache enabled?

    +
    +
    +
    Declaration
    +
    +
    public static bool TypeCacheEnabled { get; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean
    + + | + Improve this Doc + + + View Source + + +

    TypeCachePool

    +

    Type cache pool to use

    +
    +
    +
    Declaration
    +
    +
    public static ArrayPool<Type> TypeCachePool { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Buffers.ArrayPool<Type>
    | Improve this Doc - View Source + View Source

    Version

    @@ -421,19 +545,19 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    CreateInstance(out ConstructorInfo, Type, Stream, Nullable<Int32>, ISerializerOptions)

    +

    CreateInstance(out ConstructorInfo, Type, IDeserializationContext)

    Create an instance

    Declaration
    -
    public static object CreateInstance(out ConstructorInfo usedConstructor, Type type, Stream stream, int? version = null, ISerializerOptions options = null)
    +
    public static object CreateInstance(out ConstructorInfo usedConstructor, Type type, IDeserializationContext context)
    Parameters
    @@ -458,21 +582,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -495,20 +607,20 @@
    Returns
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Serializer options

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    CreateInstance<T>(out ConstructorInfo, Stream, Nullable<Int32>, ISerializerOptions)

    +

    CreateInstance<T>(out ConstructorInfo, IDeserializationContext)

    Create an instance

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static T CreateInstance<T>(out ConstructorInfo usedConstructor, Stream stream, int? version = null, ISerializerOptions options = null)
    +public static T CreateInstance<T>(out ConstructorInfo usedConstructor, IDeserializationContext context)
    Parameters
    @@ -527,21 +639,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -578,12 +678,28 @@
    Type Parameters
    Streamstream

    Stream

    -
    System.Nullable<System.Int32>version

    Serializer version

    -
    ISerializerOptionsoptions

    Serializer options

    +
    IDeserializationContextcontext

    Context

    + + | + Improve this Doc + + + View Source + + +

    EnableTypeCache()

    +

    Enable the type cache (CAUTION: Calling this method will ensure that the wan24-Core bootstrapper did run! A call during bootstrapping will cause an exception)

    +
    +
    +
    Declaration
    +
    +
    public static void EnableTypeCache()
    +
    | Improve this Doc - View Source + View Source

    FindAsyncDeserializer(Type)

    @@ -592,7 +708,7 @@

    Declaration
    -
    public static StreamSerializer.AsyncDeserialize_Delegate FindAsyncDeserializer(Type type)
    +
    public static StreamSerializer.AsyncDeserializer_Delegate FindAsyncDeserializer(Type type)
    Parameters
    @@ -622,7 +738,7 @@
    Returns
    - + @@ -633,7 +749,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindAsyncSerializer(Type)

    @@ -642,7 +758,7 @@

    Declaration
    -
    public static StreamSerializer.AsyncSerialize_Delegate FindAsyncSerializer(Type type)
    +
    public static StreamSerializer.AsyncSerializer_Delegate FindAsyncSerializer(Type type)
    Parameters
    StreamSerializer.AsyncDeserialize_DelegateStreamSerializer.AsyncDeserializer_Delegate

    Deserializer

    @@ -672,7 +788,7 @@
    Returns
    - + @@ -683,7 +799,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDelegateType(Type, IEnumerable<Type>)

    @@ -739,7 +855,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindDeserializer(Type)

    @@ -748,7 +864,7 @@

    Declaration
    -
    public static StreamSerializer.Deserialize_Delegate FindDeserializer(Type type)
    +
    public static StreamSerializer.Deserializer_Delegate FindDeserializer(Type type)
    Parameters
    StreamSerializer.AsyncSerialize_DelegateStreamSerializer.AsyncSerializer_Delegate

    Serializer

    @@ -778,7 +894,7 @@
    Returns
    - + @@ -789,7 +905,7 @@
    Returns
    Improve this Doc - View Source + View Source

    FindSerializer(Type)

    @@ -798,7 +914,7 @@

    Declaration
    -
    public static StreamSerializer.Serialize_Delegate FindSerializer(Type type)
    +
    public static StreamSerializer.Serializer_Delegate FindSerializer(Type type)
    Parameters
    StreamSerializer.Deserialize_DelegateStreamSerializer.Deserializer_Delegate

    Deserializer

    @@ -828,7 +944,7 @@
    Returns
    - + @@ -839,11 +955,11 @@
    Returns
    Improve this Doc - View Source + View Source

    IsTypeAllowed(Type)

    -

    Determine if a type is allowed per default for deserializing

    +

    Determine if a type is allowed for deserializing per default

    Declaration
    @@ -889,7 +1005,7 @@
    Returns
    Improve this Doc - View Source + View Source

    LoadType(String)

    @@ -941,7 +1057,7 @@

    Events Improve this Doc - View Source + View Source

    OnFindAsyncDeserializer

    Raised when finding a deserializer

    @@ -971,7 +1087,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindAsyncSerializer

    Raised when finding a serializer

    @@ -1001,7 +1117,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncDeserializer

    Raised when finding a deserializer

    @@ -1031,7 +1147,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnFindSyncSerializer

    Raised when finding a serializer

    @@ -1061,7 +1177,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnInit

    Raised on initialization

    @@ -1091,7 +1207,7 @@
    Event Type
    Improve this Doc - View Source + View Source

    OnLoadType

    Raised on loading a type

    @@ -1127,7 +1243,7 @@
    Event Type
    Improve this Doc
  • - View Source + View Source
  • diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html index 98b36e0..a7b0e35 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html @@ -115,20 +115,20 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadSerializedObjectVersion(Stream, Int32, Int32)

    +

    ReadSerializedObjectVersion(IDeserializationContext, Int32)

    Read the serialized object version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static int ReadSerializedObjectVersion(Stream stream, int serializerVersion, int objectVersion)
    +public static int ReadSerializedObjectVersion(IDeserializationContext context, int version)
    Parameters
    StreamSerializer.Serialize_DelegateStreamSerializer.Serializer_Delegate

    Serializer

    @@ -141,20 +141,14 @@
    Parameters
    - - - + + - - - - - - + @@ -178,20 +172,20 @@
    Returns
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    System.Int32serializerVersion

    Serializer version

    -
    System.Int32objectVersionversion

    Object version

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    ReadSerializedObjectVersionAsync(Stream, Int32, Int32, CancellationToken)

    +

    ReadSerializedObjectVersionAsync(IDeserializationContext, Int32)

    Read the serialized object version

    Declaration
    [TargetedPatchingOptOut("Tiny method")]
    -public static async Task<int> ReadSerializedObjectVersionAsync(Stream stream, int serializerVersion, int objectVersion, CancellationToken cancellationToken = null)
    +public static async Task<int> ReadSerializedObjectVersionAsync(IDeserializationContext context, int version)
    Parameters
    @@ -204,27 +198,15 @@
    Parameters
    - - - + + - - - - - - + - - - - - diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html index b761170..2e1df33 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    Parameters
    Streamstream

    Stream

    +
    IDeserializationContextcontext

    Context

    System.Int32serializerVersion

    Serializer version

    -
    System.Int32objectVersionversion

    Object version

    -
    CancellationTokencancellationToken

    Cancellation token

    @@ -111,21 +111,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -147,6 +135,9 @@
    Returns
    Streamstream

    Source stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializerContextcontext

    Context

    Extension Methods

    +
    @@ -156,9 +147,6 @@

    Extension Methods

    -
    @@ -167,10 +155,10 @@

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html index 1e4850c..5dcf2d3 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html @@ -80,7 +80,7 @@
    Namespace: Syntax
    -
    public delegate Stream StreamFactory_Delegate(object obj, PropertyInfo property, StreamSerializerAttribute attr, Stream stream, int version, CancellationToken cancellationToken = null);
    +
    public delegate Stream StreamFactory_Delegate(object obj, PropertyInfo property, StreamSerializerAttribute attr, IDeserializationContext context);
    Parameters
    @@ -111,21 +111,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -147,6 +135,9 @@
    Returns
    Streamstream

    Source stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Extension Methods

    +
    @@ -156,9 +147,6 @@

    Extension Methods

    -
    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html index 106cd6b..e60fe90 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html @@ -294,7 +294,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    KeySerializerOptions

    @@ -325,7 +325,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    KeySerializerOptionsFactoryMethod

    @@ -356,7 +356,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    KeySerializerOptionsFactoryType

    @@ -537,12 +537,43 @@
    Property Value
    + + | + Improve this Doc + + + View Source + + +

    Serializer

    +

    Serializer type

    +
    +
    +
    Declaration
    +
    +
    public SerializerTypes? Serializer { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Nullable<SerializerTypes>
    | Improve this Doc - View Source + View Source

    SerializerOptions

    @@ -573,7 +604,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    SerializerOptionsFactoryMethod

    @@ -604,7 +635,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    SerializerOptionsFactoryType

    @@ -666,7 +697,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    StreamFactory

    @@ -697,7 +728,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    StreamFactoryMethod

    @@ -728,7 +759,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    StreamFactoryType

    @@ -754,6 +785,37 @@
    Property Value
    + + | + Improve this Doc + + + View Source + + +

    UseCache

    +

    Use the cache? (this is being applied on the type only)

    +
    +
    +
    Declaration
    +
    +
    public bool UseCache { get; set; }
    +
    +
    Property Value
    + + + + + + + + + + + + + +
    TypeDescription
    System.Boolean
    | Improve this Doc @@ -821,7 +883,7 @@
    Property Value
    Improve this Doc
    - View Source + View Source

    ValueSerializerOptions

    @@ -852,7 +914,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    ValueSerializerOptionsFactoryMethod

    @@ -883,7 +945,7 @@
    Property Value
    Improve this Doc - View Source + View Source

    ValueSerializerOptionsFactoryType

    @@ -944,19 +1006,19 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    CreateSerializerOptions(Nullable<Type>, PropertyInfoExt)

    +

    CreateSerializerOptions(Nullable<Type>, Nullable<PropertyInfoExt>)

    Create serializer options

    Declaration
    -
    protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfoExt property)
    +
    protected virtual ISerializerOptions CreateSerializerOptions(Type? type, PropertyInfoExt? property)
    Parameters
    @@ -975,7 +1037,7 @@
    Parameters
    - + @@ -1000,19 +1062,19 @@
    Returns
    wan24.Core.PropertyInfoExtSystem.Nullable<PropertyInfoExt> property

    Property

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    +

    GetKeySerializerOptions(Nullable<PropertyInfoExt>, ISerializerContext)

    Get key serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt? property, ISerializerContext context)
    Parameters
    @@ -1025,27 +1087,15 @@
    Parameters
    - + - - - - - - - - - - - - - + + @@ -1071,7 +1121,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetNumericStructureFields(Type)

    @@ -1121,7 +1171,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetReadProperties(Type, Nullable<Int32>)

    @@ -1166,7 +1216,7 @@
    Returns
    - + @@ -1174,19 +1224,19 @@
    Returns
    wan24.Core.PropertyInfoExtSystem.Nullable<PropertyInfoExt> property

    Target property

    Streamstream

    Source stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializerContextcontext

    Context

    IEnumerable<wan24.Core.PropertyInfoExt>IEnumerable<PropertyInfoExt>

    Properties

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    +

    GetSerializerOptions(Nullable<PropertyInfoExt>, ISerializerContext)

    Get serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property, ISerializerContext context)
    Parameters
    @@ -1199,27 +1249,15 @@
    Parameters
    - + - - - - - - - - - - - - - + + @@ -1242,19 +1280,19 @@
    Returns
    wan24.Core.PropertyInfoExtSystem.Nullable<PropertyInfoExt> property

    Target property

    Streamstream

    Source stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializerContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetStream(Object, PropertyInfo, Stream, Int32, CancellationToken)

    +

    GetStream(Object, PropertyInfo, IDeserializationContext)

    Get a stream from the stream factory for deserializing an embedded stream

    Declaration
    -
    public virtual Stream? GetStream(object obj, PropertyInfo property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual Stream? GetStream(object obj, PropertyInfo property, IDeserializationContext context)
    Parameters
    @@ -1279,21 +1317,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -1319,7 +1345,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetUseDefaultValue(Int32)

    @@ -1366,19 +1392,19 @@
    Returns
    Streamstream

    Source stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken)

    +

    GetValueSerializerOptions(Nullable<PropertyInfoExt>, ISerializerContext)

    Get value serializer options from the serializer options factory, or the default

    Declaration
    -
    public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt property, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? property, ISerializerContext context)
    Parameters
    @@ -1391,27 +1417,15 @@
    Parameters
    - + - - - - - - - - - - - - - + + @@ -1437,7 +1451,7 @@
    Returns
    Improve this Doc - View Source + View Source

    GetWriteProperties(Type, Nullable<Int32>)

    @@ -1482,7 +1496,7 @@
    Returns
    - + @@ -1493,7 +1507,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IsIncluded(StreamSerializerModes, Int32)

    @@ -1546,19 +1560,19 @@
    Returns
    wan24.Core.PropertyInfoExtSystem.Nullable<PropertyInfoExt> property

    Target property

    Streamstream

    Source stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializerContextcontext

    Context

    IEnumerable<wan24.Core.PropertyInfoExt>IEnumerable<PropertyInfoExt>

    Properties

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    MemoryStreamFactory(Object, PropertyInfo, StreamSerializerAttribute, Stream, Int32, CancellationToken)

    +

    MemoryStreamFactory(Object, PropertyInfo, StreamSerializerAttribute, IDeserializationContext)

    Delegate for a stream factory

    Declaration
    -
    public static Stream MemoryStreamFactory(object obj, PropertyInfo property, StreamSerializerAttribute attr, Stream stream, int version, CancellationToken cancellationToken = null)
    +
    public static Stream MemoryStreamFactory(object obj, PropertyInfo property, StreamSerializerAttribute attr, IDeserializationContext context)
    Parameters
    @@ -1589,21 +1603,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -1625,6 +1627,9 @@
    Returns
    Streamstream

    Source stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    Extension Methods

    + @@ -1634,9 +1639,6 @@

    Extension Methods

    -
    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html index a1d201b..f65f491 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerBase.html @@ -79,73 +79,37 @@

    Inheritance
    System.Object
    -
    wan24.ObjectValidation.ValidatableObjectBase
    -
    StreamSerializerBase
    - +
    StreamSerializerBase
    +
    Implements
    -
    wan24.ObjectValidation.IObjectValidatable
    -
    System.ComponentModel.DataAnnotations.IValidatableObject
    -
    -
    Inherited Members
    -
    - wan24.ObjectValidation.ValidatableObjectBase.Validate(System.ComponentModel.DataAnnotations.ValidationContext) -
    -
    - wan24.ObjectValidation.ValidatableObjectBase.System.ComponentModel.DataAnnotations.IValidatableObject.Validate(System.ComponentModel.DataAnnotations.ValidationContext) -
    -
    - wan24.ObjectValidation.ValidatableObjectBase.ObjectValidatable(wan24.ObjectValidation.IObjectValidatable) -
    -
    - System.Object.Equals(System.Object) -
    -
    - System.Object.Equals(System.Object, System.Object) -
    -
    - System.Object.GetHashCode() -
    -
    - System.Object.GetType() -
    -
    - System.Object.MemberwiseClone() -
    -
    - System.Object.ReferenceEquals(System.Object, System.Object) -
    -
    - System.Object.ToString() -
    -
    Namespace: wan24.StreamSerializerExtensions
    Assembly: StreamSerializerExtensions.dll
    Syntax
    -
    public abstract class StreamSerializerBase : ValidatableObjectBase, IObjectValidatable, IValidatableObject, IStreamSerializerVersion, IStreamSerializer
    +
    public abstract class StreamSerializerBase : ValidatableObjectBase, IStreamSerializerVersion, IStreamSerializer

    Constructors

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamSerializerBase(Stream, Int32, Nullable<Int32>)

    +

    StreamSerializerBase(Nullable<Int32>)

    Constructor

    Declaration
    -
    protected StreamSerializerBase(Stream stream, int version, int? objectVersion = null)
    +
    protected StreamSerializerBase(int? objectVersion = null)
    Parameters
    @@ -157,18 +121,6 @@
    Parameters
    - - - - - - - - - - @@ -179,19 +131,19 @@
    Parameters
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    System.Nullable<System.Int32> objectVersion
    | - Improve this Doc + Improve this Doc - View Source + View Source -

    StreamSerializerBase(Nullable<Int32>)

    +

    StreamSerializerBase(IDeserializationContext, Nullable<Int32>)

    Constructor

    Declaration
    -
    protected StreamSerializerBase(int? objectVersion = null)
    +
    protected StreamSerializerBase(IDeserializationContext context, int? objectVersion = null)
    Parameters
    @@ -203,6 +155,12 @@
    Parameters
    + + + + + @@ -247,19 +205,19 @@

    Methods

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Deserialize(Stream, Int32)

    +

    Deserialize(IDeserializationContext)

    Deserialize

    Declaration
    -
    protected abstract void Deserialize(Stream stream, int version)
    +
    protected abstract void Deserialize(IDeserializationContext context)
    Parameters
    IDeserializationContextcontext

    Context

    +
    System.Nullable<System.Int32> objectVersion
    @@ -272,34 +230,28 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    DeserializeAsync(Stream, Int32, CancellationToken)

    +

    DeserializeAsync(IDeserializationContext)

    Deserialize

    Declaration
    -
    protected virtual async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken)
    +
    protected virtual async Task DeserializeAsync(IDeserializationContext context)
    Parameters
    @@ -312,21 +264,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -348,19 +288,19 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    Serialize(Stream)

    +

    Serialize(ISerializationContext)

    Serialize

    Declaration
    -
    protected abstract void Serialize(Stream stream)
    +
    protected abstract void Serialize(ISerializationContext context)
    Parameters
    @@ -373,28 +313,28 @@
    Parameters
    - - - + +
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    SerializeAsync(Stream, CancellationToken)

    +

    SerializeAsync(ISerializationContext)

    Serialize

    Declaration
    -
    protected virtual async Task SerializeAsync(Stream stream, CancellationToken cancellationToken)
    +
    protected virtual async Task SerializeAsync(ISerializationContext context)
    Parameters
    @@ -407,15 +347,9 @@
    Parameters
    - - - - - - - - + + @@ -439,19 +373,19 @@

    Explicit Interface Implementations

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.Deserialize(Stream, Int32)

    +

    IStreamSerializer.Deserialize(IDeserializationContext)

    Deserialize

    Declaration
    -
    void IStreamSerializer.Deserialize(Stream stream, int version)
    +
    void IStreamSerializer.Deserialize(IDeserializationContext context)
    Parameters
    Streamstream

    Stream

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    @@ -464,34 +398,28 @@
    Parameters
    - - - - - - - - + +
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken)

    +

    IStreamSerializer.DeserializeAsync(IDeserializationContext)

    Deserialize

    Declaration
    -
    Task IStreamSerializer.DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken)
    +
    Task IStreamSerializer.DeserializeAsync(IDeserializationContext context)
    Parameters
    @@ -504,21 +432,9 @@
    Parameters
    - - - - - - - - - - - - - + + @@ -540,19 +456,19 @@
    Returns
    Streamstream

    Stream

    -
    System.Int32version

    Serializer version

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    IDeserializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.Serialize(Stream)

    +

    IStreamSerializer.Serialize(ISerializationContext)

    Serialize

    Declaration
    -
    void IStreamSerializer.Serialize(Stream stream)
    +
    void IStreamSerializer.Serialize(ISerializationContext context)
    Parameters
    @@ -565,28 +481,28 @@
    Parameters
    - - - + +
    Streamstream

    Stream

    +
    ISerializationContextcontext

    Context

    | - Improve this Doc + Improve this Doc - View Source + View Source -

    IStreamSerializer.SerializeAsync(Stream, CancellationToken)

    +

    IStreamSerializer.SerializeAsync(ISerializationContext)

    Serialize

    Declaration
    -
    Task IStreamSerializer.SerializeAsync(Stream stream, CancellationToken cancellationToken)
    +
    Task IStreamSerializer.SerializeAsync(ISerializationContext context)
    Parameters
    @@ -599,15 +515,9 @@
    Parameters
    - - - - - - - - + + @@ -632,7 +542,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IStreamSerializerVersion.ObjectVersion

    @@ -663,7 +573,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IStreamSerializerVersion.SerializedObjectVersion

    @@ -694,7 +604,7 @@
    Returns
    Improve this Doc - View Source + View Source

    IStreamSerializerVersion.SerializerVersion

    @@ -721,12 +631,6 @@
    Returns
    Streamstream

    Stream

    -
    CancellationTokencancellationToken

    Cancellation token

    +
    ISerializationContextcontext

    Context

    Implements

    -
    - wan24.ObjectValidation.IObjectValidatable -
    -
    - System.ComponentModel.DataAnnotations.IValidatableObject -
    @@ -735,19 +639,19 @@

    Implements

    Extension Methods

    diff --git a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html index 536cc03..b3f3584 100644 --- a/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html +++ b/docs/api/wan24.StreamSerializerExtensions.StreamSerializerModes.html @@ -110,6 +110,9 @@

    Fields

    Extension Methods

    + @@ -119,9 +122,6 @@

    Extension Methods

    -
    diff --git a/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html b/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html index 9df7f10..4625862 100644 --- a/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html +++ b/docs/api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html @@ -187,6 +187,9 @@
    Property Value

    Extension Methods

    + @@ -196,9 +199,6 @@

    Extension Methods

    -
    diff --git a/docs/api/wan24.StreamSerializerExtensions.html b/docs/api/wan24.StreamSerializerExtensions.html index 035986d..ae50051 100644 --- a/docs/api/wan24.StreamSerializerExtensions.html +++ b/docs/api/wan24.StreamSerializerExtensions.html @@ -77,6 +77,9 @@

    Classes

    +

    wan24.StreamSerializerExtensions.

    +

    Context recursion (should only be disposed once!)

    +

    AutoStreamSerializerBase<T>

    Base class for an automatic serializable type

    @@ -88,12 +91,33 @@

    DefaultSerializerOptions

    Default serializer options

    +
    +

    DeserializerContext

    +

    Stream deserializer context

    +
    +

    DeserializerContextFluentExtensions

    +

    IDeserializationContext fluent extensions

    DisposableAutoStreamSerializerBase<T>

    Base class for an automatic serializable type

    DisposableStreamSerializerBase

    -

    Base class for a disposable stream serializing type

    +

    Base class for a stream serializing type

    +
    +

    ItemDeserializerContext

    +

    Item deserializer context

    +
    +

    ItemSerializerContext

    +

    Item serializer context

    +
    +

    SerializedTypeInfo

    +

    Serialized type informations

    +
    +

    SerializerContext

    +

    Stream serializer writing context

    +
    +

    SerializerContextBase

    +

    Base class for a stream serializer context

    SerializerEventArgs<T>

    Serializer event arguments

    @@ -106,6 +130,9 @@

    SerializerOptionsBase

    Base class for serializer options

    +
    +

    SerializerOptionsFluentExtensions

    +

    ISerializerOptions fluent extensions

    StreamExtensions

    Stream extensions

    @@ -132,6 +159,15 @@

    IAutoStreamSerializerConfig

    Interface for an auto stream serializer configuration

    +
    +

    IDeserializationContext

    +

    Interface for a stream deserialization context

    +
    +

    ISerializationContext

    +

    Interface for a stream serializer writing context

    +
    +

    ISerializerContext

    +

    Interface for a serializer context

    ISerializerOptions

    Interface for serializer options

    @@ -149,6 +185,12 @@

    Num

    ObjectTypes

    Object types

    +
    +

    SequenceTypes

    +

    Binary sequence types

    +
    +

    SerializerTypes

    +

    Serializer types enumeration

    StreamSerializerModes

    Stream serializer modes

    @@ -167,13 +209,25 @@

    AutoStreamSerializerInfo.Serializer_Delegate

    Delegate for a serializer

    -

    StreamSerializer.AsyncDeserialize_Delegate

    +

    StreamExtensions.AsyncNullableWriter_Delegate

    +

    Delegate for a nullable writer

    +
    +

    StreamExtensions.AsyncStreamNullableWiter_Delegate

    +

    Delegate for a nullable writer, which uses a stream

    +
    +

    StreamExtensions.NullableWriter_Delegate

    +

    Delegate for a nullable writer

    +
    +

    StreamExtensions.StreamNullableWiter_Delegate

    +

    Delegate for a nullable writer, which uses a stream

    +
    +

    StreamSerializer.AsyncDeserializer_Delegate

    Deserializer delegate

    -

    StreamSerializer.AsyncSerialize_Delegate

    +

    StreamSerializer.AsyncSerializer_Delegate

    Serializer delegate

    -

    StreamSerializer.Deserialize_Delegate

    +

    StreamSerializer.Deserializer_Delegate

    Deserializer delegate

    StreamSerializer.FindAsyncDeserializer_Delegate

    @@ -197,7 +251,7 @@

    StreamSerializer.LoadType_Delegate

    Delegate for the OnLoadType event

    -

    StreamSerializer.Serialize_Delegate

    +

    StreamSerializer.Serializer_Delegate

    Serializer delegate

    StreamSerializerAttribute.SerializerOptionsFactory_Delegate

    diff --git a/docs/index.html b/docs/index.html index 59d9425..b5336c0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -76,101 +76,216 @@

    Stream-Serializer-Extensions

  • dictionaries
  • byte arrays
  • structures
  • -
  • possibly any other objects with a parameterless public constructor
  • -
  • streams
  • +
  • possibly any other types
  • +
  • streams (embedded)
  • +
  • CLR type informations
  • and exports an asynchronous fluent API for writing operations, too.

    -

    NOTE: Arrays, lists and dictionaries with nullable values aren't supported.

    It's possible to override the build in serializers, and to add custom type serializers, too.

    Using an attribute for your types and their properties you can make them binary serializable with backward compatibility, easily.

    The serializer is designed to produce only a minimum of absolutely required overhead, which sometimes can result in even less data, too (compared to -usually used serialization methods).

    +usually used serialization methods). The produced binary sequences are

    +
      +
    • processor architecture independent
    • +
    • platform independent
    • +
    • runtime independent
    • +
    • language independent
    • +
    • type and type version safe
    • +
    • compatible with newer serializer versions
    • +
    • as small as possible (trade off between complexity <-> performance <-> size)
    • +
    • using aggressive caching
    • +
    +

    In theory it'd by possible to deserialize a binary sequence using a language +such as JavaScript or C++. However, at present there's only a .NET +implementation of the (de)serializer available.

    +

    NOTE: The deserialized type must be present at the processing computer. +The deserializer won't create anonymous types. Only for deserializing CLR type +informations there's a type implemented which can be used to browse the +seqenced CLR type informations before trying to get a Type instance, finally.

    +

    Most people think of object serialization, but this library can be used to +deserialize any binary sequence, and also a text format (which is an encoded +binary sequence at a higher level) may be parsed as well. And since a stream +is a quiet abstract type, the output/input must not be a file all the time. +Using some creativity just everything can be serialized or deserialized and +target any stream consuming interface.

    The API is fully synchronous and asynchronous - you choose depending on the used stream type.

    +

    TIP: Because often very tiny sequences will be written/red, you may want +to use a buffering stream to gain more performance! Streams will be accessed +non-seeking and sequential only.

    Cold storage of serialized sequences can be challenging. Using the build in sequencer versioning you can ensure that a sequence can be deserialized at any time after a component was updated.

    +

    How to get it

    +

    This library is available as +NuGet package "Stream-Serializer-Extensions".

    +

    There's also another +NuGet package "Stream-Serializer-Extensions-Full", +which contains advanced serialization tools.

    Methods

    -

    The Write and WriteAsync methods will be extended with supported types, -while serializing some types is being done with specialized methods:

    - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + + + + + + + + + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeSerialization methodDeserialization methodSerializationDeserialization
    stringWriteString*ReadString*boolWriteReadBool
    EnumWriteEnum*ReadEnum*sbyteWriteReadOneSByte
    ArrayWrite*Array*Read*Array*byteWriteReadOneByte
    List<T>WriteList*ReadList*shortWriteReadShort
    Dictionary<tKey, tValue>WriteDict*ReadDict*ushortWriteReadUShort
    IStreamSerializerWriteSerialized*ReadSerialized*intWriteReadInt
    uintWriteReadUInt
    longWriteReadLong
    ulongWriteReadULong
    floatWriteReadFloat
    doubleWriteReadDouble
    decimalWriteReadDecimal
    (U)Int 8-64, float, double, decimalWriteNumberReadNumber
    EnumWriteEnumReadEnum
    byte[]WriteBytes*ReadBytes*WriteBytesReadBytes
    StreamWriteStream*ReadStream*string (UTF-8)WriteStringReadString
    string (UTF-16)WriteString16ReadString16
    string (UTF-32)WriteString32ReadString32
    StructureWriteStruct*ReadStruct*IStreamSerializer (class)WriteSerializedReadSerialized
    (any other)WriteAnyObject*ReadAnyObject*IStreamSerializer (structure)WriteSerializedStructReadSerializedStruct
    StructuresWriteStructReadStruct
    Array (variable length)WriteArrayReadArray
    Array (fixed length)WriteFixedArrayReadFixedArray
    IListWriteListReadList
    IDictionaryWriteDictReadDict
    StreamWriteStreamReadStream
    TypeWriteTypeReadType
    +

    NOTE: In general you should use the opposite method for reading a binary +sequence that you've used for writing it! For all methods there is an *Async +version also. Use the *Nullable* methods for writing/reading nullable +values. Some may have to add an extra byte for null detection.

    Using the WriteObject* and ReadObject* methods you can let the library decide which method to use for the given object type.

    -

    Using the WriteAny* and ReadAny* methods, you can write and read an object -with a dynamic type.

    Using the WriteAnyObject* and ReadAnyObject* methods you can also (de)serialize objects which have a constructor without parameters. The serializer will process public properties which have a public getter and setter. If in the future the object changes, it's not possible to deserialize an older binary sequence, unless you work with the StreamSerializerAttribute and set an object version to the type and its properties.

    -

    NOTE: Please use the *Nullable* methods for working with nullables. -They'll add an extra byte for null value detection.

    -

    NOTE: In general you should use the opposite method for reading a binary -sequence that you've used for writing it!

    +

    Using the WriteAny* and ReadAny* methods, you can write and read an object +with a dynamic type.

    Most methods are designed specially for one type, while other methods work more generic. This is when to choose which method:

    @@ -183,7 +298,7 @@

    Methods

    - + @@ -216,7 +331,7 @@

    Embedded streams

    data. Seekable streams will just be copied, having their length as header, while non-seekable streams will be embedded chunked.

    When deserializing an embedded stream using generic read-methods (like -ReadObject or ReadAny), a temporary FileStream will be created, which +ReadObject or ReadAny), a temporary TempStream will be created, which will delete the temporary file when disposing. You can define a stream factory using StreamSerializerAttribute.StreamFactoryType and StreamSerializerAttribute.StreamFactoryMethod. Or you create a custom @@ -251,6 +366,21 @@

    Structure serialization

    TIP: A structure may implement the IStreamSerializer inferface and be written using the WriteSerializedStruct* methods. For reading you can use the ReadSerializedStruct* methods.

    +

    CLR type information serialization

    +

    CLR type informations support

    +
      +
    • normal types (also abstract and interface types)
    • +
    • generic types (or type definitions)
    • +
    • array types (with array rank)
    • +
    +

    Internal the serializer uses a SerializedTypeInfo instance.

    +
    stream.Write(typeof(Dictionary<string, int>));
    +stream.Position = 0;
    +Type type = stream.ReadType();
    +Assert.AreEqual(typeof(Dictionary<string, int>), type);
    +
    +

    Use the ReadSerializableType* methods to ensure a serializer supported CLR +type.

    Custom serializer

    Using the StreamSerializerAttribute attribute

    The type needs to have a constructor without parameters. Properties with a @@ -559,6 +689,31 @@

    Stream object enumeration

    *Serialized*The fixed type is a stream serializer base objectThe fixed type implements IStreamSerializer
    *Object*
    +

    Type cache

    +

    By calling StreamSerializer.EnableTypeCache(), you can use a type cache, +which enables the serializer to write type information about types which +implement the IStreamSerializer interface using only 6 bytes. For this all +matching types will be stored in the wan24.Core.TypeCache.

    +

    CAUTION: Calling this method will ensure that the wan24-Core +bootstrapper did run! A call during bootstrapping will cause an exception.

    +

    Please ensure that the type cache has been enabled first, whenever you want to +write or read any byte sequence. A byte sequence which was created using the +type cache can't be deserialized, if the type cache isn't enabled! Anyway, the +opposite isn't a problem.

    +

    CAUTION: Because the type cache uses the types hash code, you shouldn't +use this feature, if you want to cold store a sequence, or if if the +deserializing peer may know a different version if the type: If the type +changes, its hash code may change!

    +

    Stream-Serializer-Extensions-Full

    +

    This library is an add-on which contains advanced serialization tools:

    +
      +
    • SerializerStream which manages a SerializerContext and/or +DeserializerContext and has its own extension methods without the context +argument
    • +
    • Write/ReadAll extensions for writing/reading a type sequence
    • +
    • ReadUntil extension for reading until any byte sequence (requires a +seekable stream!)
    • +

    Security

    The base serializer supports basic types and lists. Especially when deserializing lists, you should define a minimum and a maximum length.

    @@ -577,9 +732,9 @@

    Security

    The job of the serializer is to write and read objects to/from a binary sequence. There's no compression, encryption or hashing built in. If you want to compress/protect a created binary sequence, you can apply compression, -encryption and hashing on the result as you want.

    +encryption and hashing on the result as you need.

    Object validation will be applied to deserialized objects to ensure their -validity.

    +validity (using ObjectValidation).

    diff --git a/docs/manifest.json b/docs/manifest.json index d4a1552..0e23248 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -21,7 +21,19 @@ "output": { ".html": { "relative_path": "api/toc.html", - "hash": "wpRBFsXPBUohplXVE+G5c9FXFo6PHSHR1kPFsfoKtJs=" + "hash": "dD7ijIb/gBtweGlSWI5ryRyasgUKOW/6+A8Q/+IbsIg=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions..yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions..html", + "hash": "Za9nWypFnRBn7epvK3uQid9pnEbn+rSP9VFMPdEwxd4=" } }, "is_incremental": false, @@ -33,7 +45,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html", - "hash": "p+uJLHBub4s8Jni6VJ06NX0CTbZLaiVYYe00/Bc8KAI=" + "hash": "x7xazC9YV/qsSpSvDJS33CPAca31SdsZ+BWaE1gCVEU=" } }, "is_incremental": false, @@ -45,7 +57,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html", - "hash": "ui1sjd+JXcXHTh2WmFSQKfASt/ZsueNnwff5/OTYT5Q=" + "hash": "EeHe5UWf9GdvUH/bUNNCBZ8Ut9pix3ScLCl0WEC1UQ4=" } }, "is_incremental": false, @@ -57,7 +69,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html", - "hash": "9tb/lVyFo8Yy1VPf8S5psdnmY1o1883UaKokXao2nXs=" + "hash": "kGYJBc/papZ7XJS1JqamfZA0qWaDj6B4TyQpSav3svg=" } }, "is_incremental": false, @@ -69,7 +81,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html", - "hash": "DidvaEZMN6tGdBlralJmu30viTjDZ+FMVYvoX1afL7U=" + "hash": "e8Wad05btsYzzY1l47gmCtUPkfGz32Vy+htfwe5MqpI=" } }, "is_incremental": false, @@ -81,7 +93,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html", - "hash": "z6sg7EJsavtNSY7NVWGBqAOYoq0r0gSKVAJhFN/4ABg=" + "hash": "K565NqeFYlj2ogy1hGF8d4WxRofa5HlQtcPdOEjuft0=" } }, "is_incremental": false, @@ -93,7 +105,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html", - "hash": "VCU7ZZYjm5cE/IblC1eMT+S3G7hvCbXb91RG1bLFkUg=" + "hash": "d1LdQ6vSS9ocxsa0deZYcO7yuCOPSdscnjl+hPXC68U=" } }, "is_incremental": false, @@ -105,7 +117,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html", - "hash": "qan1z4Zx57yKv/jn368b122mOvCJPQp+crSurw6pKu4=" + "hash": "wIGFjg/sWyKR3fgkGScfVoiRQAzY0PlA2ZGam72dcvs=" } }, "is_incremental": false, @@ -117,7 +129,31 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html", - "hash": "aHvRheGFQeXy1ByUb74ciFLIC4e2aMlqNI2FhpGKaQ8=" + "hash": "qLojfP9hhs0e8mSaHz7BWmfVt29BjMOVy7ntusCcfkg=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.DeserializerContext.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.DeserializerContext.html", + "hash": "Bno/4trK6U6lYLBIJWHWvqSqDCAHV81IbsVO7dO9/EQ=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html", + "hash": "rh75pgsI0SpXIDRZn9IbMRdXNvL1qSlpkqnMgkM7RG4=" } }, "is_incremental": false, @@ -129,7 +165,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html", - "hash": "ynuU4umgv1hoea1tBKcTTQU3m+TGfOz88lNEwcaibzo=" + "hash": "lOvrKKzEYAcHgrWp2rI6NHAtE5Tfsa3p0tMb7ih5fB8=" } }, "is_incremental": false, @@ -141,7 +177,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html", - "hash": "hAY1bQL7/QGl6W6+yjHSVHfJmqWgl72FnCYPwMTn9ow=" + "hash": "jJAN8+P6DG1xWISrxEg690+e0MAx6EIlgxEwYJvsogI=" } }, "is_incremental": false, @@ -153,7 +189,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html", - "hash": "qm8gL1UJUYLZqaL0bYP1lwS42DFKqWgDdzxOfYYl+nc=" + "hash": "HaYYgFvHPDAERSZLAziQeFVnTyHv0eZL4+i/AqmeA84=" } }, "is_incremental": false, @@ -165,7 +201,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html", - "hash": "gETYdceUhc13wSzL0wVGAAKf8iq5G7/ulyyjep8skXE=" + "hash": "GOLcPQLoxa9OS+tI0Xdri5c1GB4BPKwzSGTimKkyYq8=" } }, "is_incremental": false, @@ -177,7 +213,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html", - "hash": "IFw190HtUhWZU13+mK/8h5PpVSkXbiXUa4ToLSxoOto=" + "hash": "uDFgDvFz9bkIiJH7j2XXRqhIuBH47PXDePXKqP5UDsE=" } }, "is_incremental": false, @@ -189,7 +225,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html", - "hash": "jjDSxOhNEn5D11dW343GD0DK9qkpRDvQpHvbJcoClK0=" + "hash": "3UxZ7gcjwxLvh+Th6JKzuPG0VwwNcFG9oyIERQ2YRTk=" } }, "is_incremental": false, @@ -201,7 +237,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html", - "hash": "r6h7CxZgN8/l+DCx1SS2HeYY2AVqv6WdoyOT2U/qMl8=" + "hash": "sfy6rgYg2JxVWQTluN8qIwXtuiZjcmhCzTDf5E+0lXo=" } }, "is_incremental": false, @@ -213,7 +249,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html", - "hash": "m0NFLnh4lvu4OpVLsNIEwRzq3LBrM+vhQgeeoGHGHBY=" + "hash": "bponbnQi/DTSCsaqvpWWQPYULWOSwTjB9A4pAOe8FuA=" } }, "is_incremental": false, @@ -225,7 +261,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html", - "hash": "yxJCGaoHo84C+7D1+Wy5CmQq9xCKumfmIWEEdjPFXio=" + "hash": "M2FZAZ1bLBSBNqfgn6xsVWxhSsi+q/PhB7k6StQvq24=" } }, "is_incremental": false, @@ -237,7 +273,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html", - "hash": "Kb6G394V1KGVrDnGcvha+h1v9aoHK6iPoDykwL9BPqY=" + "hash": "1bjQJ/NzvgxFRri+Vl/JmsYM3WbGZ4caM1c9A9cjFDg=" } }, "is_incremental": false, @@ -261,7 +297,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html", - "hash": "TjeOA+SVNx5ndDhqFRkelywINGPVN5Rs6VfxY+dQ7Lk=" + "hash": "EqwMjPkviITKYxgrOwHIwIxMPc7pIKZLxUigEAbZjSU=" } }, "is_incremental": false, @@ -273,7 +309,43 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html", - "hash": "QO04XM0xocFPy2kt2FoN7NJPEQwbAcBSOHLtaCY8ifA=" + "hash": "7dIiO6BiOjulx95+zPtZ1pz1A57U8AIzvmowQIVMjqo=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.IDeserializationContext.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.IDeserializationContext.html", + "hash": "eArQ9EztgsuTIUufhnEku58t867Kyd4dhHwdXX8W58g=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.ISerializationContext.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.ISerializationContext.html", + "hash": "i+gCURCP8z7dD/V2/M9GQAKQ8lIKLQsXIOD92QtBSQk=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.ISerializerContext.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.ISerializerContext.html", + "hash": "E4nOvISLxfbTv9ZvcFEp7bvSwz7JXMK5Hwz8FmbHn6I=" } }, "is_incremental": false, @@ -285,7 +357,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ISerializerOptions.html", - "hash": "OHaH2DkPccQabcwbej/hxKyzarDhJJXJe5eB4LzWKqQ=" + "hash": "omDTv+rA8FNtyoxCMB7RfSMVNoU2Z4rKSFGwzJte2yM=" } }, "is_incremental": false, @@ -297,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializer.html", - "hash": "CgFdpt1m5K53PZEf85rV/Bh+g9lukffpeWx5XSPATdQ=" + "hash": "celwFSHqSVAWVY6KYSFyRBfHh+25wq9rajNlPzY3fcU=" } }, "is_incremental": false, @@ -309,7 +381,31 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html", - "hash": "ykBM4GcgrlL/EUuOMXOb3zGHt6LpnMBz4TaXha+5ZLM=" + "hash": "oGdROBeg91LmoJCHW3Gy7Ypaedij3VQ2wCT3fYrXmfk=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.ItemDeserializerContext.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html", + "hash": "XxhhkFaENpd01Jt9HtrBLHElMy3LM23sxHIAZ0jbD88=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.ItemSerializerContext.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.ItemSerializerContext.html", + "hash": "oMQo56ZUkpCW2gd6KiAHkFFRHL+o1FEiYPGQwyLrWRE=" } }, "is_incremental": false, @@ -321,7 +417,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.NumberTypes.html", - "hash": "ojybFav1LhAMsS+k3nExCUnNlfvbf2y3XaFJDdflclU=" + "hash": "E0fkJJW11yHs/vY6Q2O3IHCyg5s19fXRgzQAoLhv2kM=" } }, "is_incremental": false, @@ -333,7 +429,55 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ObjectTypes.html", - "hash": "uDencMrjaOkRsytRfYfzQiZU9yzdjhdZmH2WNSH+/2w=" + "hash": "Thz99KijZT9ZjgBy5l1rVBs2jmrVvEqzQ+EF3x2qUfY=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.SequenceTypes.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.SequenceTypes.html", + "hash": "JMJcOVAAvVa6k1tvB7TECyC1YN5azCxEvqjuQVUTHds=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.SerializedTypeInfo.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html", + "hash": "WxIyKbPC95MOMnxXv5Fl/VsFEjdyD1N2qEYh3hwK/ws=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.SerializerContext.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.SerializerContext.html", + "hash": "NF8dkw88yzq70dWXEUsjH4WkyriUAzExykSejqzRMWo=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.SerializerContextBase.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.SerializerContextBase.html", + "hash": "9bQAIw9/w3Uf2ujvpQ2pBI/fWUB1IsPBVbqp7FCNBg4=" } }, "is_incremental": false, @@ -345,7 +489,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html", - "hash": "Kz9CJqwgUw/qrfCzQzp+53jh3YLftyKrY++if9cBQ6E=" + "hash": "QbItJ4e4G4y8YNjNCOIndg3Ao2SK1vvvUrxIw65fxNE=" } }, "is_incremental": false, @@ -357,7 +501,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerException.html", - "hash": "Ir3m+pF4R95akt//bN1/emEa+TmtqMC4cZ8NjHGxJOQ=" + "hash": "QKyyVliuyBzHhwMSMwIDB1aDi4JhG72DGT7YttZb9DM=" } }, "is_incremental": false, @@ -369,7 +513,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "7mYI5IcEr0DYE7XqrwB8DvHQj6SL+VgeytjwIganwgI=" + "hash": "0GAchLXClWklOJ0rguWWpPlUa+OVMIoytZ1lNldu0TI=" } }, "is_incremental": false, @@ -381,7 +525,79 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html", - "hash": "Iakecs5Y5ySpUlrDy+R5Q/4YE88X1MJRBdgc30DiOeo=" + "hash": "rfTH03FlnLk9EmjKc8t2bRgo4TlhMMBLIxeHP9MNTxk=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html", + "hash": "YYk00rILFgnE6XHZTC5WaQqVFmenkyHGssjog0l6A6U=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.SerializerTypes.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.SerializerTypes.html", + "hash": "kTsFGrJfYbGzynXXjDCiMU7+OIiskd4y16IGu7naOeg=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate.html", + "hash": "DlD/1Ak5xBPwjzok1BS9TP9dHv60VyDZ/q95oKv8PjY=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate.html", + "hash": "kxcXpYy1JP/WdZgu+5CddO1XoDKiwxwB5qio131xsaM=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate.html", + "hash": "rHfGdXx4TogE9FxGAm6j8dKedV0fY3WVMT0wbyGKU3k=" + } + }, + "is_incremental": false, + "version": "" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate.yml", + "output": { + ".html": { + "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate.html", + "hash": "qdpMtYbr4pKcqGJZaB7AaudHlOcnkSHIcCT/qZFXOX8=" } }, "is_incremental": false, @@ -393,7 +609,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamExtensions.html", - "hash": "ubl/lGQyAw4PSIKiB+YX8+oEqN8ieKaxRphUJ8TCNJY=" + "hash": "9Og3L4mVLNd/luOeltz8Jru4fORpEGcsRP34Hsu1X+E=" } }, "is_incremental": false, @@ -401,11 +617,11 @@ }, { "type": "ManagedReference", - "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.yml", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate.yml", "output": { ".html": { - "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html", - "hash": "zO9lY/KRno3Nh4TpBrgvqd5WweZN3h8KpESJ4bNxhmg=" + "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate.html", + "hash": "gUpNmcpxchqptzKLFzLNuuzTjQ5u0b2ZyRXCJyMgxQs=" } }, "is_incremental": false, @@ -413,11 +629,11 @@ }, { "type": "ManagedReference", - "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.yml", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate.yml", "output": { ".html": { - "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html", - "hash": "GYKAMZCQ9Vhehwwz6kJGC+PV26D7WljWn9VEQ9X2J9U=" + "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate.html", + "hash": "ysegnKizvCoKFOdFtMSl+4RNubtLJ4edfZ1uVZ0Qloc=" } }, "is_incremental": false, @@ -425,11 +641,11 @@ }, { "type": "ManagedReference", - "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.yml", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate.yml", "output": { ".html": { - "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html", - "hash": "3ZvkMA731sGaikL4RUUM6bKG0vtP9NqjDRknomg2Aww=" + "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate.html", + "hash": "4cG1eY+yT8PI8LKucYe+k70McbTIuamIDHqJvU4YHBo=" } }, "is_incremental": false, @@ -441,7 +657,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer_Delegate.html", - "hash": "66sEAXLLAldHDPu8IyVEc8tx/aczxvCYilmpsD+7IU8=" + "hash": "I701Um8Ys0MiVemO0IHVRSNNYqEZpDSwhBrzkX6Hu08=" } }, "is_incremental": false, @@ -453,7 +669,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html", - "hash": "5LHGIxnKMHzA2x7Zt3huL9EqLZ7kq5szBLQDKSH1xkM=" + "hash": "xC/zuQEUk6wsnBrkGwBctu17k1VlRCCUcRG6CHheA8A=" } }, "is_incremental": false, @@ -465,7 +681,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html", - "hash": "LzZhrQ+T7xDuPeChLzK1tLtYwzfs5ipSegKnDHID4FE=" + "hash": "mczqR6jgMPf5f7X6JIthNklk3w2v2CNAH6dFWYklvgk=" } }, "is_incremental": false, @@ -477,7 +693,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html", - "hash": "wHBwftCLQnDOXelEabdiWLVBgP0gTDmxHCTADlWT2O0=" + "hash": "V7c7fQ+1csCuYvFnYRwHH/Ad0kDDCgbyDQmxEVmoaaw=" } }, "is_incremental": false, @@ -489,7 +705,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html", - "hash": "R/np5q+A/k4GvOIgzMkmzQ1pQBc2g6jvpymvCUjBSMs=" + "hash": "fD8cUK0Q28eoFOaBZQNpJypsXjFZIAgbVS8OP6/phsE=" } }, "is_incremental": false, @@ -501,7 +717,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.InstanceFactory_Delegate.html", - "hash": "cfAlpwTTWiPePl+7HHJX6Zd+EVDBtRDOWhVIkoWfXnI=" + "hash": "ixVkPhIEpsxi2bUqP/v0T8oY0FMxAXCcQQli1SfY1I0=" } }, "is_incremental": false, @@ -513,7 +729,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html", - "hash": "DCPKZCxwDhDmYJ/Ur2QaMxmbdKsUwAxfTf+afSqpFXY=" + "hash": "SGx88tYDO21qx2bPJnNuWDSh4IOviWd+UH+ktsEy/Vk=" } }, "is_incremental": false, @@ -521,11 +737,11 @@ }, { "type": "ManagedReference", - "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.yml", + "source_relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.yml", "output": { ".html": { - "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html", - "hash": "l9ZnWLUNsCGv3yKm0owT3R1F3yu8eAu8QVF13AsxTII=" + "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.html", + "hash": "I/XayGmf3CrSE6z0f0Wkm1FC2eQyNvLIf2k9pJ8U1tg=" } }, "is_incremental": false, @@ -537,7 +753,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "iy+uUx4jyOlY7UD4xKnCfMBsi9PsqX1MKChU2F3LBMs=" + "hash": "9avvAndTywF4uaUHuhC8znOjIgKy1uuLk/IT5Og+3m0=" } }, "is_incremental": false, @@ -549,7 +765,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html", - "hash": "D0yceJlQx8x8PCH0lfTBaDqQn6T4zQMozK2WQz8kw6Q=" + "hash": "C8ZZBO1G+lSPgNyvSsnihcbxvmqx/lv6O7pUDjr7EXw=" } }, "is_incremental": false, @@ -561,7 +777,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html", - "hash": "whx0LKbQaF2aC2XcIypZXRYbNZ+YljJe5kNmYwZDnpI=" + "hash": "NBjcDfbfb3Hd7KnzwBgC0rjSb3CtkfzjXZhDWGteuvA=" } }, "is_incremental": false, @@ -573,7 +789,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html", - "hash": "DIToYuV2ovfutZbpVCVwFZRROdbBybF0vQmU39ub8ww=" + "hash": "U2jB0Y9BzAAjP+7WofvIHB3AWfsA3v87vmXSIOvcKnE=" } }, "is_incremental": false, @@ -585,7 +801,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html", - "hash": "FVOplBMbmVEF5KE57CIIu26q3+qu71EfETzYkVAM9/o=" + "hash": "pinHOWlfSX+BkclETMP37t3tTykUMhJHmPRWg/qk6zs=" } }, "is_incremental": false, @@ -597,7 +813,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerBase.html", - "hash": "D+8qcLEuYeVfN+cV7h8zVpI0pIelwiJLteUO3AJWJnI=" + "hash": "WWGlGqkzcmfRphy7nmK6IOlGxdW26q6bqb3LrFBBUoA=" } }, "is_incremental": false, @@ -609,7 +825,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerModes.html", - "hash": "4i9d0pmJraM76N3McQl7wHBxaqfuz55cLO01+pkSUGM=" + "hash": "Vmnp8p9jBrEHKC32+/T8ShfzdDYJKMlaRWHe2BHo2TE=" } }, "is_incremental": false, @@ -621,7 +837,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html", - "hash": "vzexxRJwAaEJ4/Qaf9Szu8eoQZ/sM1LgNi/iF61lv6Q=" + "hash": "DD+JH2QLKrxA92jAit7bs+EXqgIQgjFuxNhlCd1quDg=" } }, "is_incremental": false, @@ -633,7 +849,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.html", - "hash": "8a39+Avjooz8fF2g14yVXFuzb6ghi8T98Q+lgbPLmsM=" + "hash": "msvB0sfxjafF9p0hUBlUD2nCPfKuEDlbvnIfF+00J1M=" } }, "is_incremental": false, @@ -669,7 +885,7 @@ "output": { ".html": { "relative_path": "index.html", - "hash": "2DdveuRYACsmjo0DQokaO14jZx1PHZVP5qlQor8Sc4I=" + "hash": "1mTyzsLUdmke/TF7KJxfcdG6r0FZYIxL56hQTVTVK/g=" } }, "is_incremental": false, @@ -708,7 +924,7 @@ "ManagedReferenceDocumentProcessor": { "can_incremental": false, "incrementalPhase": "build", - "total_file_count": 51, + "total_file_count": 69, "skipped_file_count": 0 }, "TocDocumentProcessor": { diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index 12a9c25..f468866 100644 --- a/docs/xrefmap.yml +++ b/docs/xrefmap.yml @@ -7,6 +7,11 @@ references: commentId: N:wan24.StreamSerializerExtensions fullName: wan24.StreamSerializerExtensions nameWithType: wan24.StreamSerializerExtensions +- uid: wan24.StreamSerializerExtensions. + name: '' + href: api/wan24.StreamSerializerExtensions..html + commentId: T:wan24.StreamSerializerExtensions. + fullName: wan24.StreamSerializerExtensions. - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1 name: AutoStreamSerializerBase href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html @@ -50,14 +55,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).AutoStreamSerializerConfig nameWithType: AutoStreamSerializerBase.AutoStreamSerializerConfig nameWithType.vb: AutoStreamSerializerBase(Of T).AutoStreamSerializerConfig -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Deserialize(Stream,System.Int32) - name: Deserialize(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_Deserialize_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Deserialize(Stream,System.Int32) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.Deserialize(Stream, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).Deserialize(Stream, System.Int32) - nameWithType: AutoStreamSerializerBase.Deserialize(Stream, Int32) - nameWithType.vb: AutoStreamSerializerBase(Of T).Deserialize(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: AutoStreamSerializerBase.Deserialize(IDeserializationContext) + nameWithType.vb: AutoStreamSerializerBase(Of T).Deserialize(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Deserialize* name: Deserialize href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_Deserialize_ @@ -67,14 +72,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).Deserialize nameWithType: AutoStreamSerializerBase.Deserialize nameWithType.vb: AutoStreamSerializerBase(Of T).Deserialize -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.DeserializeAsync(Stream,System.Int32,CancellationToken) - name: DeserializeAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_DeserializeAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.DeserializeAsync(Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.DeserializeAsync(Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).DeserializeAsync(Stream, System.Int32, CancellationToken) - nameWithType: AutoStreamSerializerBase.DeserializeAsync(Stream, Int32, CancellationToken) - nameWithType.vb: AutoStreamSerializerBase(Of T).DeserializeAsync(Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: AutoStreamSerializerBase.DeserializeAsync(IDeserializationContext) + nameWithType.vb: AutoStreamSerializerBase(Of T).DeserializeAsync(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.DeserializeAsync* name: DeserializeAsync href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_DeserializeAsync_ @@ -84,14 +89,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).DeserializeAsync nameWithType: AutoStreamSerializerBase.DeserializeAsync nameWithType.vb: AutoStreamSerializerBase(Of T).DeserializeAsync -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Serialize(Stream) - name: Serialize(Stream) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_Serialize_Stream_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Serialize(Stream) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.Serialize(Stream) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).Serialize(Stream) - nameWithType: AutoStreamSerializerBase.Serialize(Stream) - nameWithType.vb: AutoStreamSerializerBase(Of T).Serialize(Stream) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: AutoStreamSerializerBase.Serialize(ISerializationContext) + nameWithType.vb: AutoStreamSerializerBase(Of T).Serialize(ISerializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.Serialize* name: Serialize href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_Serialize_ @@ -101,14 +106,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).Serialize nameWithType: AutoStreamSerializerBase.Serialize nameWithType.vb: AutoStreamSerializerBase(Of T).Serialize -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.SerializeAsync(Stream,CancellationToken) - name: SerializeAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_SerializeAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.SerializeAsync(Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.SerializeAsync(Stream, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).SerializeAsync(Stream, CancellationToken) - nameWithType: AutoStreamSerializerBase.SerializeAsync(Stream, CancellationToken) - nameWithType.vb: AutoStreamSerializerBase(Of T).SerializeAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerBase(Of T).SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: AutoStreamSerializerBase.SerializeAsync(ISerializationContext) + nameWithType.vb: AutoStreamSerializerBase(Of T).SerializeAsync(ISerializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerBase`1.SerializeAsync* name: SerializeAsync href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerBase_1_SerializeAsync_ @@ -197,14 +202,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).DefaultValues nameWithType: AutoStreamSerializerConfig.DefaultValues nameWithType.vb: AutoStreamSerializerConfig(Of T).DefaultValues -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Deserialize(`0,Stream,System.Int32) - name: Deserialize(T, Stream, Int32) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_Deserialize__0_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Deserialize(`0,Stream,System.Int32) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.Deserialize(T, Stream, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).Deserialize(T, Stream, System.Int32) - nameWithType: AutoStreamSerializerConfig.Deserialize(T, Stream, Int32) - nameWithType.vb: AutoStreamSerializerConfig(Of T).Deserialize(T, Stream, Int32) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Deserialize(`0,wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(T, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_Deserialize__0_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Deserialize(`0,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.Deserialize(T, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).Deserialize(T, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: AutoStreamSerializerConfig.Deserialize(T, IDeserializationContext) + nameWithType.vb: AutoStreamSerializerConfig(Of T).Deserialize(T, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Deserialize* name: Deserialize href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_Deserialize_ @@ -214,14 +219,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).Deserialize nameWithType: AutoStreamSerializerConfig.Deserialize nameWithType.vb: AutoStreamSerializerConfig(Of T).Deserialize -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.DeserializeAsync(`0,Stream,System.Int32,CancellationToken) - name: DeserializeAsync(T, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_DeserializeAsync__0_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.DeserializeAsync(`0,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.DeserializeAsync(T, Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).DeserializeAsync(T, Stream, System.Int32, CancellationToken) - nameWithType: AutoStreamSerializerConfig.DeserializeAsync(T, Stream, Int32, CancellationToken) - nameWithType.vb: AutoStreamSerializerConfig(Of T).DeserializeAsync(T, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.DeserializeAsync(`0,wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(T, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_DeserializeAsync__0_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.DeserializeAsync(`0,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.DeserializeAsync(T, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).DeserializeAsync(T, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: AutoStreamSerializerConfig.DeserializeAsync(T, IDeserializationContext) + nameWithType.vb: AutoStreamSerializerConfig(Of T).DeserializeAsync(T, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.DeserializeAsync* name: DeserializeAsync href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_DeserializeAsync_ @@ -265,14 +270,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).InitDefaultValues nameWithType: AutoStreamSerializerConfig.InitDefaultValues nameWithType.vb: AutoStreamSerializerConfig(Of T).InitDefaultValues -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Serialize(`0,Stream) - name: Serialize(T, Stream) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_Serialize__0_Stream_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Serialize(`0,Stream) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.Serialize(T, Stream) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).Serialize(T, Stream) - nameWithType: AutoStreamSerializerConfig.Serialize(T, Stream) - nameWithType.vb: AutoStreamSerializerConfig(Of T).Serialize(T, Stream) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Serialize(`0,wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_Serialize__0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Serialize(`0,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.Serialize(T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).Serialize(T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: AutoStreamSerializerConfig.Serialize(T, ISerializationContext) + nameWithType.vb: AutoStreamSerializerConfig(Of T).Serialize(T, ISerializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.Serialize* name: Serialize href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_Serialize_ @@ -282,14 +287,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).Serialize nameWithType: AutoStreamSerializerConfig.Serialize nameWithType.vb: AutoStreamSerializerConfig(Of T).Serialize -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.SerializeAsync(`0,Stream,CancellationToken) - name: SerializeAsync(T, Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_SerializeAsync__0_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.SerializeAsync(`0,Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.SerializeAsync(T, Stream, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).SerializeAsync(T, Stream, CancellationToken) - nameWithType: AutoStreamSerializerConfig.SerializeAsync(T, Stream, CancellationToken) - nameWithType.vb: AutoStreamSerializerConfig(Of T).SerializeAsync(T, Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.SerializeAsync(`0,wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_SerializeAsync__0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.SerializeAsync(`0,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig.SerializeAsync(T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig(Of T).SerializeAsync(T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: AutoStreamSerializerConfig.SerializeAsync(T, ISerializationContext) + nameWithType.vb: AutoStreamSerializerConfig(Of T).SerializeAsync(T, ISerializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerConfig`1.SerializeAsync* name: SerializeAsync href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html#wan24_StreamSerializerExtensions_AutoStreamSerializerConfig_1_SerializeAsync_ @@ -322,11 +327,11 @@ references: commentId: T:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo nameWithType: AutoStreamSerializerInfo -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(wan24.Core.PropertyInfoExt) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(PropertyInfoExt) name: AutoStreamSerializerInfo(PropertyInfoExt) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo__ctor_wan24_Core_PropertyInfoExt_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(wan24.Core.PropertyInfoExt) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AutoStreamSerializerInfo(wan24.Core.PropertyInfoExt) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo__ctor_PropertyInfoExt_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor(PropertyInfoExt) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AutoStreamSerializerInfo(PropertyInfoExt) nameWithType: AutoStreamSerializerInfo.AutoStreamSerializerInfo(PropertyInfoExt) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.#ctor* name: AutoStreamSerializerInfo @@ -393,15 +398,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize nameWithType: AutoStreamSerializerInfo.Deserialize -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32) - name: Deserialize(IAutoStreamSerializerConfig, T, Stream, Int32) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_Deserialize__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32) - name.vb: Deserialize(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32) - nameWithType: AutoStreamSerializerInfo.Deserialize(IAutoStreamSerializerConfig, T, Stream, Int32) - nameWithType.vb: AutoStreamSerializerInfo.Deserialize(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(IAutoStreamSerializerConfig, T, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_Deserialize__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: Deserialize(Of T)(IAutoStreamSerializerConfig, T, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserialize(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: AutoStreamSerializerInfo.Deserialize(IAutoStreamSerializerConfig, T, IDeserializationContext) + nameWithType.vb: AutoStreamSerializerInfo.Deserialize(Of T)(IAutoStreamSerializerConfig, T, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync* name: DeserializeAsync href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_DeserializeAsync_ @@ -409,15 +414,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync nameWithType: AutoStreamSerializerInfo.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,CancellationToken) - name: DeserializeAsync(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_DeserializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,System.Int32,CancellationToken) - name.vb: DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, System.Int32, CancellationToken) - nameWithType: AutoStreamSerializerInfo.DeserializeAsync(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) - nameWithType.vb: AutoStreamSerializerInfo.DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(IAutoStreamSerializerConfig, T, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_DeserializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.DeserializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: AutoStreamSerializerInfo.DeserializeAsync(IAutoStreamSerializerConfig, T, IDeserializationContext) + nameWithType.vb: AutoStreamSerializerInfo.DeserializeAsync(Of T)(IAutoStreamSerializerConfig, T, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer name: Deserializer href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_Deserializer @@ -470,15 +475,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize nameWithType: AutoStreamSerializerInfo.Serialize -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream) - name: Serialize(IAutoStreamSerializerConfig, T, Stream) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_Serialize__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream) - name.vb: Serialize(Of T)(IAutoStreamSerializerConfig, T, Stream) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream) - nameWithType: AutoStreamSerializerInfo.Serialize(IAutoStreamSerializerConfig, T, Stream) - nameWithType.vb: AutoStreamSerializerInfo.Serialize(Of T)(IAutoStreamSerializerConfig, T, Stream) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(IAutoStreamSerializerConfig, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_Serialize__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: Serialize(Of T)(IAutoStreamSerializerConfig, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serialize(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: AutoStreamSerializerInfo.Serialize(IAutoStreamSerializerConfig, T, ISerializationContext) + nameWithType.vb: AutoStreamSerializerInfo.Serialize(Of T)(IAutoStreamSerializerConfig, T, ISerializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync* name: SerializeAsync href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_SerializeAsync_ @@ -486,15 +491,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync nameWithType: AutoStreamSerializerInfo.SerializeAsync -- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,CancellationToken) - name: SerializeAsync(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_SerializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,Stream,CancellationToken) - name.vb: SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, Stream, CancellationToken) - nameWithType: AutoStreamSerializerInfo.SerializeAsync(IAutoStreamSerializerConfig, T, Stream, CancellationToken) - nameWithType.vb: AutoStreamSerializerInfo.SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(IAutoStreamSerializerConfig, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_SerializeAsync__1_wan24_StreamSerializerExtensions_IAutoStreamSerializerConfig___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync``1(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.SerializeAsync(Of T)(wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: AutoStreamSerializerInfo.SerializeAsync(IAutoStreamSerializerConfig, T, ISerializationContext) + nameWithType.vb: AutoStreamSerializerInfo.SerializeAsync(Of T)(IAutoStreamSerializerConfig, T, ISerializationContext) - uid: wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer name: Serializer href: api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html#wan24_StreamSerializerExtensions_AutoStreamSerializerInfo_Serializer @@ -520,12 +525,15 @@ references: commentId: T:wan24.StreamSerializerExtensions.DefaultSerializerOptions fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions nameWithType: DefaultSerializerOptions -- uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name: DefaultSerializerOptions(PropertyInfoExt, StreamSerializerAttribute) - href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_wan24_Core_PropertyInfoExt_wan24_StreamSerializerExtensions_StreamSerializerAttribute_ - commentId: M:wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(wan24.Core.PropertyInfoExt, wan24.StreamSerializerExtensions.StreamSerializerAttribute) - nameWithType: DefaultSerializerOptions.DefaultSerializerOptions(PropertyInfoExt, StreamSerializerAttribute) +- uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name: DefaultSerializerOptions(Nullable, StreamSerializerAttribute) + href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_StreamSerializerAttribute_ + commentId: M:wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name.vb: DefaultSerializerOptions(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) + fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(System.Nullable, wan24.StreamSerializerExtensions.StreamSerializerAttribute) + fullName.vb: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.StreamSerializerAttribute) + nameWithType: DefaultSerializerOptions.DefaultSerializerOptions(Nullable, StreamSerializerAttribute) + nameWithType.vb: DefaultSerializerOptions.DefaultSerializerOptions(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) - uid: wan24.StreamSerializerExtensions.DefaultSerializerOptions.#ctor* name: DefaultSerializerOptions href: api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html#wan24_StreamSerializerExtensions_DefaultSerializerOptions__ctor_ @@ -533,6 +541,268 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.DefaultSerializerOptions.DefaultSerializerOptions nameWithType: DefaultSerializerOptions.DefaultSerializerOptions +- uid: wan24.StreamSerializerExtensions.DeserializerContext + name: DeserializerContext + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html + commentId: T:wan24.StreamSerializerExtensions.DeserializerContext + fullName: wan24.StreamSerializerExtensions.DeserializerContext + nameWithType: DeserializerContext +- uid: wan24.StreamSerializerExtensions.DeserializerContext.#ctor(Stream,System.Nullable{System.Int32},System.Nullable{System.Int32},CancellationToken) + name: DeserializerContext(Stream, Nullable, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext__ctor_Stream_System_Nullable_System_Int32__System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.#ctor(Stream,System.Nullable{System.Int32},System.Nullable{System.Int32},CancellationToken) + name.vb: DeserializerContext(Stream, Nullable(Of Int32), Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.DeserializerContext(Stream, System.Nullable, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.DeserializerContext(Stream, System.Nullable(Of System.Int32), System.Nullable(Of System.Int32), CancellationToken) + nameWithType: DeserializerContext.DeserializerContext(Stream, Nullable, Nullable, CancellationToken) + nameWithType.vb: DeserializerContext.DeserializerContext(Stream, Nullable(Of Int32), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.#ctor* + name: DeserializerContext + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext__ctor_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.#ctor + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.DeserializerContext + nameWithType: DeserializerContext.DeserializerContext +- uid: wan24.StreamSerializerExtensions.DeserializerContext._Cache + name: _Cache + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext__Cache + commentId: F:wan24.StreamSerializerExtensions.DeserializerContext._Cache + fullName: wan24.StreamSerializerExtensions.DeserializerContext._Cache + nameWithType: DeserializerContext._Cache +- uid: wan24.StreamSerializerExtensions.DeserializerContext.AddToCache* + name: AddToCache + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_AddToCache_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.AddToCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.AddToCache + nameWithType: DeserializerContext.AddToCache +- uid: wan24.StreamSerializerExtensions.DeserializerContext.AddToCache``1(``0) + name: AddToCache(T) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_AddToCache__1___0_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.AddToCache``1(``0) + name.vb: AddToCache(Of T)(T) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.AddToCache(T) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.AddToCache(Of T)(T) + nameWithType: DeserializerContext.AddToCache(T) + nameWithType.vb: DeserializerContext.AddToCache(Of T)(T) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.Cache + name: Cache + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_Cache + commentId: P:wan24.StreamSerializerExtensions.DeserializerContext.Cache + fullName: wan24.StreamSerializerExtensions.DeserializerContext.Cache + nameWithType: DeserializerContext.Cache +- uid: wan24.StreamSerializerExtensions.DeserializerContext.Cache* + name: Cache + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_Cache_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.Cache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.Cache + nameWithType: DeserializerContext.Cache +- uid: wan24.StreamSerializerExtensions.DeserializerContext.CacheSize + name: CacheSize + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_CacheSize + commentId: P:wan24.StreamSerializerExtensions.DeserializerContext.CacheSize + fullName: wan24.StreamSerializerExtensions.DeserializerContext.CacheSize + nameWithType: DeserializerContext.CacheSize +- uid: wan24.StreamSerializerExtensions.DeserializerContext.CacheSize* + name: CacheSize + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_CacheSize_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.CacheSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.CacheSize + nameWithType: DeserializerContext.CacheSize +- uid: wan24.StreamSerializerExtensions.DeserializerContext.Dispose(System.Boolean) + name: Dispose(Boolean) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_Dispose_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.Dispose(System.Boolean) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.Dispose(System.Boolean) + nameWithType: DeserializerContext.Dispose(Boolean) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.Dispose* + name: Dispose + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_Dispose_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.Dispose + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.Dispose + nameWithType: DeserializerContext.Dispose +- uid: wan24.StreamSerializerExtensions.DeserializerContext.Options + name: Options + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_Options + commentId: P:wan24.StreamSerializerExtensions.DeserializerContext.Options + fullName: wan24.StreamSerializerExtensions.DeserializerContext.Options + nameWithType: DeserializerContext.Options +- uid: wan24.StreamSerializerExtensions.DeserializerContext.Options* + name: Options + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_Options_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.Options + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.Options + nameWithType: DeserializerContext.Options +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCached* + name: TryReadCached + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCached_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCached + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCached + nameWithType: DeserializerContext.TryReadCached +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCached``1(``0@) + name: TryReadCached(out T) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCached__1___0__ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCached``1(``0@) + name.vb: TryReadCached(Of T)(ByRef T) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCached(out T) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCached(Of T)(ByRef T) + nameWithType: DeserializerContext.TryReadCached(out T) + nameWithType.vb: DeserializerContext.TryReadCached(Of T)(ByRef T) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedAsync* + name: TryReadCachedAsync + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedAsync + nameWithType: DeserializerContext.TryReadCachedAsync +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedAsync``1 + name: TryReadCachedAsync() + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedAsync__1 + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedAsync``1 + name.vb: TryReadCachedAsync(Of T)() + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedAsync() + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedAsync(Of T)() + nameWithType: DeserializerContext.TryReadCachedAsync() + nameWithType.vb: DeserializerContext.TryReadCachedAsync(Of T)() +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumber* + name: TryReadCachedNumber + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedNumber_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumber + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumber + nameWithType: DeserializerContext.TryReadCachedNumber +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumber``1(System.Nullable{``0}@,System.Boolean) + name: TryReadCachedNumber(out Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedNumber__1_System_Nullable___0___System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumber``1(System.Nullable{``0}@,System.Boolean) + name.vb: TryReadCachedNumber(Of T)(ByRef Nullable(Of T), Boolean) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumber(out System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumber(Of T)(ByRef System.Nullable(Of T), System.Boolean) + nameWithType: DeserializerContext.TryReadCachedNumber(out Nullable, Boolean) + nameWithType.vb: DeserializerContext.TryReadCachedNumber(Of T)(ByRef Nullable(Of T), Boolean) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumberAsync* + name: TryReadCachedNumberAsync + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedNumberAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumberAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumberAsync + nameWithType: DeserializerContext.TryReadCachedNumberAsync +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumberAsync``1(System.Boolean) + name: TryReadCachedNumberAsync(Boolean) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedNumberAsync__1_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumberAsync``1(System.Boolean) + name.vb: TryReadCachedNumberAsync(Of T)(Boolean) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumberAsync(System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedNumberAsync(Of T)(System.Boolean) + nameWithType: DeserializerContext.TryReadCachedNumberAsync(Boolean) + nameWithType.vb: DeserializerContext.TryReadCachedNumberAsync(Of T)(Boolean) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObject* + name: TryReadCachedObject + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObject_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObject + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObject + nameWithType: DeserializerContext.TryReadCachedObject +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObject``1(``0@,System.Boolean) + name: TryReadCachedObject(out T, Boolean) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObject__1___0__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObject``1(``0@,System.Boolean) + name.vb: TryReadCachedObject(Of T)(ByRef T, Boolean) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObject(out T, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObject(Of T)(ByRef T, System.Boolean) + nameWithType: DeserializerContext.TryReadCachedObject(out T, Boolean) + nameWithType.vb: DeserializerContext.TryReadCachedObject(Of T)(ByRef T, Boolean) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectAsync* + name: TryReadCachedObjectAsync + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObjectAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectAsync + nameWithType: DeserializerContext.TryReadCachedObjectAsync +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectAsync``1(System.Boolean) + name: TryReadCachedObjectAsync(Boolean) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObjectAsync__1_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectAsync``1(System.Boolean) + name.vb: TryReadCachedObjectAsync(Of T)(Boolean) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectAsync(System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectAsync(Of T)(System.Boolean) + nameWithType: DeserializerContext.TryReadCachedObjectAsync(Boolean) + nameWithType.vb: DeserializerContext.TryReadCachedObjectAsync(Of T)(Boolean) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountable* + name: TryReadCachedObjectCountable + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObjectCountable_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountable + nameWithType: DeserializerContext.TryReadCachedObjectCountable +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountable``1(``0@,System.Int64@,System.Boolean) + name: TryReadCachedObjectCountable(out T, out Int64, Boolean) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObjectCountable__1___0__System_Int64__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountable``1(``0@,System.Int64@,System.Boolean) + name.vb: TryReadCachedObjectCountable(Of T)(ByRef T, ByRef Int64, Boolean) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountable(out T, out System.Int64, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountable(Of T)(ByRef T, ByRef System.Int64, System.Boolean) + nameWithType: DeserializerContext.TryReadCachedObjectCountable(out T, out Int64, Boolean) + nameWithType.vb: DeserializerContext.TryReadCachedObjectCountable(Of T)(ByRef T, ByRef Int64, Boolean) +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountableAsync* + name: TryReadCachedObjectCountableAsync + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObjectCountableAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountableAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountableAsync + nameWithType: DeserializerContext.TryReadCachedObjectCountableAsync +- uid: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountableAsync``1(System.Boolean) + name: TryReadCachedObjectCountableAsync(Boolean) + href: api/wan24.StreamSerializerExtensions.DeserializerContext.html#wan24_StreamSerializerExtensions_DeserializerContext_TryReadCachedObjectCountableAsync__1_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountableAsync``1(System.Boolean) + name.vb: TryReadCachedObjectCountableAsync(Of T)(Boolean) + fullName: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountableAsync(System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContext.TryReadCachedObjectCountableAsync(Of T)(System.Boolean) + nameWithType: DeserializerContext.TryReadCachedObjectCountableAsync(Boolean) + nameWithType.vb: DeserializerContext.TryReadCachedObjectCountableAsync(Of T)(Boolean) +- uid: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions + name: DeserializerContextFluentExtensions + href: api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html + commentId: T:wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions + fullName: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions + nameWithType: DeserializerContextFluentExtensions +- uid: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithOptions* + name: WithOptions + href: api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html#wan24_StreamSerializerExtensions_DeserializerContextFluentExtensions_WithOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithOptions + nameWithType: DeserializerContextFluentExtensions.WithOptions +- uid: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithOptions``2(``0,``1) + name: WithOptions(tContext, tOptions) + href: api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html#wan24_StreamSerializerExtensions_DeserializerContextFluentExtensions_WithOptions__2___0___1_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithOptions``2(``0,``1) + name.vb: WithOptions(Of tContext, tOptions)(tContext, tOptions) + fullName: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithOptions(tContext, tOptions) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithOptions(Of tContext, tOptions)(tContext, tOptions) + nameWithType: DeserializerContextFluentExtensions.WithOptions(tContext, tOptions) + nameWithType.vb: DeserializerContextFluentExtensions.WithOptions(Of tContext, tOptions)(tContext, tOptions) +- uid: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithoutOptions* + name: WithoutOptions + href: api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html#wan24_StreamSerializerExtensions_DeserializerContextFluentExtensions_WithoutOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithoutOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithoutOptions + nameWithType: DeserializerContextFluentExtensions.WithoutOptions +- uid: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithoutOptions``1(``0) + name: WithoutOptions(T) + href: api/wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.html#wan24_StreamSerializerExtensions_DeserializerContextFluentExtensions_WithoutOptions__1___0_ + commentId: M:wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithoutOptions``1(``0) + name.vb: WithoutOptions(Of T)(T) + fullName: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithoutOptions(T) + fullName.vb: wan24.StreamSerializerExtensions.DeserializerContextFluentExtensions.WithoutOptions(Of T)(T) + nameWithType: DeserializerContextFluentExtensions.WithoutOptions(T) + nameWithType.vb: DeserializerContextFluentExtensions.WithoutOptions(Of T)(T) - uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1 name: DisposableAutoStreamSerializerBase href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html @@ -567,14 +837,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).AutoStreamSerializerConfig nameWithType: DisposableAutoStreamSerializerBase.AutoStreamSerializerConfig nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).AutoStreamSerializerConfig -- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Deserialize(Stream,System.Int32) - name: Deserialize(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_Deserialize_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Deserialize(Stream,System.Int32) - fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.Deserialize(Stream, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).Deserialize(Stream, System.Int32) - nameWithType: DisposableAutoStreamSerializerBase.Deserialize(Stream, Int32) - nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).Deserialize(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: DisposableAutoStreamSerializerBase.Deserialize(IDeserializationContext) + nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).Deserialize(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Deserialize* name: Deserialize href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_Deserialize_ @@ -584,14 +854,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).Deserialize nameWithType: DisposableAutoStreamSerializerBase.Deserialize nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).Deserialize -- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.DeserializeAsync(Stream,System.Int32,CancellationToken) - name: DeserializeAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_DeserializeAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.DeserializeAsync(Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.DeserializeAsync(Stream, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).DeserializeAsync(Stream, System.Int32, CancellationToken) - nameWithType: DisposableAutoStreamSerializerBase.DeserializeAsync(Stream, Int32, CancellationToken) - nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).DeserializeAsync(Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: DisposableAutoStreamSerializerBase.DeserializeAsync(IDeserializationContext) + nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).DeserializeAsync(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.DeserializeAsync* name: DeserializeAsync href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_DeserializeAsync_ @@ -601,14 +871,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).DeserializeAsync nameWithType: DisposableAutoStreamSerializerBase.DeserializeAsync nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).DeserializeAsync -- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Serialize(Stream) - name: Serialize(Stream) - href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_Serialize_Stream_ - commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Serialize(Stream) - fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.Serialize(Stream) - fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).Serialize(Stream) - nameWithType: DisposableAutoStreamSerializerBase.Serialize(Stream) - nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).Serialize(Stream) +- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: DisposableAutoStreamSerializerBase.Serialize(ISerializationContext) + nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).Serialize(ISerializationContext) - uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.Serialize* name: Serialize href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_Serialize_ @@ -618,14 +888,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).Serialize nameWithType: DisposableAutoStreamSerializerBase.Serialize nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).Serialize -- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.SerializeAsync(Stream,CancellationToken) - name: SerializeAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_SerializeAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.SerializeAsync(Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.SerializeAsync(Stream, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).SerializeAsync(Stream, CancellationToken) - nameWithType: DisposableAutoStreamSerializerBase.SerializeAsync(Stream, CancellationToken) - nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).SerializeAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase(Of T).SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: DisposableAutoStreamSerializerBase.SerializeAsync(ISerializationContext) + nameWithType.vb: DisposableAutoStreamSerializerBase(Of T).SerializeAsync(ISerializationContext) - uid: wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase`1.SerializeAsync* name: SerializeAsync href: api/wan24.StreamSerializerExtensions.DisposableAutoStreamSerializerBase-1.html#wan24_StreamSerializerExtensions_DisposableAutoStreamSerializerBase_1_SerializeAsync_ @@ -660,15 +930,6 @@ references: commentId: T:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase nameWithType: DisposableStreamSerializerBase -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.#ctor(Stream,System.Int32,System.Nullable{System.Int32}) - name: DisposableStreamSerializerBase(Stream, Int32, Nullable) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase__ctor_Stream_System_Int32_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.#ctor(Stream,System.Int32,System.Nullable{System.Int32}) - name.vb: DisposableStreamSerializerBase(Stream, Int32, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DisposableStreamSerializerBase(Stream, System.Int32, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DisposableStreamSerializerBase(Stream, System.Int32, System.Nullable(Of System.Int32)) - nameWithType: DisposableStreamSerializerBase.DisposableStreamSerializerBase(Stream, Int32, Nullable) - nameWithType.vb: DisposableStreamSerializerBase.DisposableStreamSerializerBase(Stream, Int32, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.#ctor(System.Nullable{System.Int32}) name: DisposableStreamSerializerBase(Nullable) href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase__ctor_System_Nullable_System_Int32__ @@ -678,6 +939,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DisposableStreamSerializerBase(System.Nullable(Of System.Int32)) nameWithType: DisposableStreamSerializerBase.DisposableStreamSerializerBase(Nullable) nameWithType.vb: DisposableStreamSerializerBase.DisposableStreamSerializerBase(Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32}) + name: DisposableStreamSerializerBase(IDeserializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32}) + name.vb: DisposableStreamSerializerBase(IDeserializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DisposableStreamSerializerBase(wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DisposableStreamSerializerBase(wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable(Of System.Int32)) + nameWithType: DisposableStreamSerializerBase.DisposableStreamSerializerBase(IDeserializationContext, Nullable) + nameWithType.vb: DisposableStreamSerializerBase.DisposableStreamSerializerBase(IDeserializationContext, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.#ctor* name: DisposableStreamSerializerBase href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase__ctor_ @@ -691,12 +961,12 @@ references: commentId: F:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.BASE_VERSION fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.BASE_VERSION nameWithType: DisposableStreamSerializerBase.BASE_VERSION -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize(Stream,System.Int32) - name: Deserialize(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_Deserialize_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize(Stream,System.Int32) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize(Stream, System.Int32) - nameWithType: DisposableStreamSerializerBase.Deserialize(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: DisposableStreamSerializerBase.Deserialize(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize* name: Deserialize href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_Deserialize_ @@ -704,12 +974,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Deserialize nameWithType: DisposableStreamSerializerBase.Deserialize -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync(Stream,System.Int32,CancellationToken) - name: DeserializeAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_DeserializeAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync(Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync(Stream, System.Int32, CancellationToken) - nameWithType: DisposableStreamSerializerBase.DeserializeAsync(Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: DisposableStreamSerializerBase.DeserializeAsync(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync* name: DeserializeAsync href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_DeserializeAsync_ @@ -717,12 +987,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.DeserializeAsync nameWithType: DisposableStreamSerializerBase.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize(Stream) - name: Serialize(Stream) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_Serialize_Stream_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize(Stream) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize(Stream) - nameWithType: DisposableStreamSerializerBase.Serialize(Stream) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: DisposableStreamSerializerBase.Serialize(ISerializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize* name: Serialize href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_Serialize_ @@ -730,12 +1000,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.Serialize nameWithType: DisposableStreamSerializerBase.Serialize -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync(Stream,CancellationToken) - name: SerializeAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_SerializeAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync(Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync(Stream, CancellationToken) - nameWithType: DisposableStreamSerializerBase.SerializeAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: DisposableStreamSerializerBase.SerializeAsync(ISerializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync* name: SerializeAsync href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_SerializeAsync_ @@ -743,14 +1013,14 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.SerializeAsync nameWithType: DisposableStreamSerializerBase.SerializeAsync -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(Stream,System.Int32) - name: IStreamSerializer.Deserialize(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(Stream,System.Int32) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream, Int32) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream, System.Int32) - nameWithType: DisposableStreamSerializerBase.IStreamSerializer.Deserialize(Stream, Int32) - nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: IStreamSerializer.Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: DisposableStreamSerializerBase.IStreamSerializer.Deserialize(IDeserializationContext) + nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize* name: IStreamSerializer.Deserialize href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_ @@ -760,14 +1030,14 @@ references: fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize nameWithType: DisposableStreamSerializerBase.IStreamSerializer.Deserialize nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(Stream,System.Int32,CancellationToken) - name: IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(Stream,System.Int32,CancellationToken) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream, System.Int32, CancellationToken) - nameWithType: DisposableStreamSerializerBase.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) - nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: IStreamSerializer.DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: DisposableStreamSerializerBase.IStreamSerializer.DeserializeAsync(IDeserializationContext) + nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync* name: IStreamSerializer.DeserializeAsync href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_ @@ -777,14 +1047,14 @@ references: fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync nameWithType: DisposableStreamSerializerBase.IStreamSerializer.DeserializeAsync nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(Stream) - name: IStreamSerializer.Serialize(Stream) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_Stream_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(Stream) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) - nameWithType: DisposableStreamSerializerBase.IStreamSerializer.Serialize(Stream) - nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: IStreamSerializer.Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(ISerializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: DisposableStreamSerializerBase.IStreamSerializer.Serialize(ISerializationContext) + nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(ISerializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize* name: IStreamSerializer.Serialize href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_ @@ -794,14 +1064,14 @@ references: fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize nameWithType: DisposableStreamSerializerBase.IStreamSerializer.Serialize nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize -- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(Stream,CancellationToken) - name: IStreamSerializer.SerializeAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(Stream,CancellationToken) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream, CancellationToken) - fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream, CancellationToken) - nameWithType: DisposableStreamSerializerBase.IStreamSerializer.SerializeAsync(Stream, CancellationToken) - nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: IStreamSerializer.SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(ISerializationContext) + fullName: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: DisposableStreamSerializerBase.IStreamSerializer.SerializeAsync(ISerializationContext) + nameWithType.vb: DisposableStreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(ISerializationContext) - uid: wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync* name: IStreamSerializer.SerializeAsync href: api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html#wan24_StreamSerializerExtensions_DisposableStreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_ @@ -877,15 +1147,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T) nameWithType: StreamAsyncEnumeratorBase nameWithType.vb: StreamAsyncEnumeratorBase(Of T) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name: StreamAsyncEnumeratorBase(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1__ctor_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: StreamAsyncEnumeratorBase(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.StreamAsyncEnumeratorBase(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).StreamAsyncEnumeratorBase(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamAsyncEnumeratorBase.StreamAsyncEnumeratorBase(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamAsyncEnumeratorBase(Of T).StreamAsyncEnumeratorBase(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamAsyncEnumeratorBase(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.StreamAsyncEnumeratorBase(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).StreamAsyncEnumeratorBase(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamAsyncEnumeratorBase.StreamAsyncEnumeratorBase(IDeserializationContext) + nameWithType.vb: StreamAsyncEnumeratorBase(Of T).StreamAsyncEnumeratorBase(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.#ctor* name: StreamAsyncEnumeratorBase href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1__ctor_ @@ -903,14 +1172,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T)._Current nameWithType: StreamAsyncEnumeratorBase._Current nameWithType.vb: StreamAsyncEnumeratorBase(Of T)._Current -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Cancellation - name: Cancellation - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_Cancellation - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Cancellation - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.Cancellation - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).Cancellation - nameWithType: StreamAsyncEnumeratorBase.Cancellation - nameWithType.vb: StreamAsyncEnumeratorBase(Of T).Cancellation +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Context + name: Context + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_Context + commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Context + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.Context + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).Context + nameWithType: StreamAsyncEnumeratorBase.Context + nameWithType.vb: StreamAsyncEnumeratorBase(Of T).Context - uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Current name: Current href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_Current @@ -954,15 +1223,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).EnumerateAsync nameWithType: StreamAsyncEnumeratorBase.EnumerateAsync nameWithType.vb: StreamAsyncEnumeratorBase(Of T).EnumerateAsync -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.EnumerateAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: EnumerateAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_EnumerateAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.EnumerateAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: EnumerateAsync(Of tEnumerator)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.EnumerateAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).EnumerateAsync(Of tEnumerator)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamAsyncEnumeratorBase.EnumerateAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamAsyncEnumeratorBase(Of T).EnumerateAsync(Of tEnumerator)(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.EnumerateAsync``1(wan24.StreamSerializerExtensions.IDeserializationContext) + name: EnumerateAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_EnumerateAsync__1_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.EnumerateAsync``1(wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: EnumerateAsync(Of tEnumerator)(IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.EnumerateAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).EnumerateAsync(Of tEnumerator)(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamAsyncEnumeratorBase.EnumerateAsync(IDeserializationContext) + nameWithType.vb: StreamAsyncEnumeratorBase(Of T).EnumerateAsync(Of tEnumerator)(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.MoveNextAsync name: MoveNextAsync() href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_MoveNextAsync @@ -997,22 +1266,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).ReadObjectAsync nameWithType: StreamAsyncEnumeratorBase.ReadObjectAsync nameWithType.vb: StreamAsyncEnumeratorBase(Of T).ReadObjectAsync -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.SerializerVersion - name: SerializerVersion - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_SerializerVersion - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.SerializerVersion - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.SerializerVersion - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).SerializerVersion - nameWithType: StreamAsyncEnumeratorBase.SerializerVersion - nameWithType.vb: StreamAsyncEnumeratorBase(Of T).SerializerVersion -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Stream - name: Stream - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamAsyncEnumeratorBase_1_Stream - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Stream - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase.Stream - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase(Of T).Stream - nameWithType: StreamAsyncEnumeratorBase.Stream - nameWithType.vb: StreamAsyncEnumeratorBase(Of T).Stream - uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1 name: StreamEnumeratorBase href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html @@ -1022,15 +1275,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T) nameWithType: StreamEnumeratorBase nameWithType.vb: StreamEnumeratorBase(Of T) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.#ctor(Stream,System.Nullable{System.Int32}) - name: StreamEnumeratorBase(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1__ctor_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.#ctor(Stream,System.Nullable{System.Int32}) - name.vb: StreamEnumeratorBase(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase.StreamEnumeratorBase(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).StreamEnumeratorBase(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamEnumeratorBase.StreamEnumeratorBase(Stream, Nullable) - nameWithType.vb: StreamEnumeratorBase(Of T).StreamEnumeratorBase(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamEnumeratorBase(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase.StreamEnumeratorBase(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).StreamEnumeratorBase(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamEnumeratorBase.StreamEnumeratorBase(IDeserializationContext) + nameWithType.vb: StreamEnumeratorBase(Of T).StreamEnumeratorBase(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.#ctor* name: StreamEnumeratorBase href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1__ctor_ @@ -1048,6 +1300,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T)._Current nameWithType: StreamEnumeratorBase._Current nameWithType.vb: StreamEnumeratorBase(Of T)._Current +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Context + name: Context + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_Context + commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Context + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase.Context + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).Context + nameWithType: StreamEnumeratorBase.Context + nameWithType.vb: StreamEnumeratorBase(Of T).Context - uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Current name: Current href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_Current @@ -1091,15 +1351,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).Enumerate nameWithType: StreamEnumeratorBase.Enumerate nameWithType.vb: StreamEnumeratorBase(Of T).Enumerate -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Enumerate``1(Stream,System.Nullable{System.Int32}) - name: Enumerate(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_Enumerate__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Enumerate``1(Stream,System.Nullable{System.Int32}) - name.vb: Enumerate(Of tEnumerator)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase.Enumerate(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).Enumerate(Of tEnumerator)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamEnumeratorBase.Enumerate(Stream, Nullable) - nameWithType.vb: StreamEnumeratorBase(Of T).Enumerate(Of tEnumerator)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Enumerate``1(wan24.StreamSerializerExtensions.IDeserializationContext) + name: Enumerate(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_Enumerate__1_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Enumerate``1(wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: Enumerate(Of tEnumerator)(IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase.Enumerate(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).Enumerate(Of tEnumerator)(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamEnumeratorBase.Enumerate(IDeserializationContext) + nameWithType.vb: StreamEnumeratorBase(Of T).Enumerate(Of tEnumerator)(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.MoveNext name: MoveNext() href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_MoveNext @@ -1151,14 +1411,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).Reset nameWithType: StreamEnumeratorBase.Reset nameWithType.vb: StreamEnumeratorBase(Of T).Reset -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.SerializerVersion - name: SerializerVersion - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_SerializerVersion - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.SerializerVersion - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase.SerializerVersion - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).SerializerVersion - nameWithType: StreamEnumeratorBase.SerializerVersion - nameWithType.vb: StreamEnumeratorBase(Of T).SerializerVersion - uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.StartPosition name: StartPosition href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_StartPosition @@ -1167,14 +1419,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).StartPosition nameWithType: StreamEnumeratorBase.StartPosition nameWithType.vb: StreamEnumeratorBase(Of T).StartPosition -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Stream - name: Stream - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_Stream - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Stream - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase.Stream - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase(Of T).Stream - nameWithType: StreamEnumeratorBase.Stream - nameWithType.vb: StreamEnumeratorBase(Of T).Stream - uid: wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.System#Collections#IEnumerator#Current name: IEnumerator.Current href: api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamEnumeratorBase_1_System_Collections_IEnumerator_Current @@ -1203,24 +1447,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator(Of T) nameWithType: StreamNumberAsyncEnumerator nameWithType.vb: StreamNumberAsyncEnumerator(Of T) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name: StreamNumberAsyncEnumerator(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberAsyncEnumerator_1__ctor_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: StreamNumberAsyncEnumerator(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator.StreamNumberAsyncEnumerator(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamNumberAsyncEnumerator.StreamNumberAsyncEnumerator(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: StreamNumberAsyncEnumerator(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberAsyncEnumerator_1__ctor_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: StreamNumberAsyncEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator.StreamNumberAsyncEnumerator(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamNumberAsyncEnumerator.StreamNumberAsyncEnumerator(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamNumberAsyncEnumerator(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberAsyncEnumerator_1__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator.StreamNumberAsyncEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamNumberAsyncEnumerator.StreamNumberAsyncEnumerator(IDeserializationContext) + nameWithType.vb: StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.#ctor* name: StreamNumberAsyncEnumerator href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberAsyncEnumerator_1__ctor_ @@ -1230,14 +1464,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator nameWithType: StreamNumberAsyncEnumerator.StreamNumberAsyncEnumerator nameWithType.vb: StreamNumberAsyncEnumerator(Of T).StreamNumberAsyncEnumerator -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.Pool - name: Pool - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberAsyncEnumerator_1_Pool - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.Pool - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator.Pool - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator(Of T).Pool - nameWithType: StreamNumberAsyncEnumerator.Pool - nameWithType.vb: StreamNumberAsyncEnumerator(Of T).Pool - uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator`1.ReadObjectAsync name: ReadObjectAsync() href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberAsyncEnumerator_1_ReadObjectAsync @@ -1264,24 +1490,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator(Of T) nameWithType: StreamNumberEnumerator nameWithType.vb: StreamNumberEnumerator(Of T) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.#ctor(Stream,System.Nullable{System.Int32}) - name: StreamNumberEnumerator(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberEnumerator_1__ctor_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.#ctor(Stream,System.Nullable{System.Int32}) - name.vb: StreamNumberEnumerator(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator.StreamNumberEnumerator(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator(Of T).StreamNumberEnumerator(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamNumberEnumerator.StreamNumberEnumerator(Stream, Nullable) - nameWithType.vb: StreamNumberEnumerator(Of T).StreamNumberEnumerator(Stream, Nullable(Of Int32)) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: StreamNumberEnumerator(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberEnumerator_1__ctor_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: StreamNumberEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator.StreamNumberEnumerator(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator(Of T).StreamNumberEnumerator(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamNumberEnumerator.StreamNumberEnumerator(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamNumberEnumerator(Of T).StreamNumberEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamNumberEnumerator(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberEnumerator_1__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator.StreamNumberEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator(Of T).StreamNumberEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamNumberEnumerator.StreamNumberEnumerator(IDeserializationContext) + nameWithType.vb: StreamNumberEnumerator(Of T).StreamNumberEnumerator(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.#ctor* name: StreamNumberEnumerator href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberEnumerator_1__ctor_ @@ -1291,14 +1507,6 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator(Of T).StreamNumberEnumerator nameWithType: StreamNumberEnumerator.StreamNumberEnumerator nameWithType.vb: StreamNumberEnumerator(Of T).StreamNumberEnumerator -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.Pool - name: Pool - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberEnumerator_1_Pool - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.Pool - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator.Pool - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator(Of T).Pool - nameWithType: StreamNumberEnumerator.Pool - nameWithType.vb: StreamNumberEnumerator(Of T).Pool - uid: wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator`1.ReadObject name: ReadObject() href: api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamNumberEnumerator_1_ReadObject @@ -1325,15 +1533,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator(Of T) nameWithType: StreamSerializerAsyncEnumerator nameWithType.vb: StreamSerializerAsyncEnumerator(Of T) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name: StreamSerializerAsyncEnumerator(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamSerializerAsyncEnumerator_1__ctor_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator`1.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: StreamSerializerAsyncEnumerator(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator.StreamSerializerAsyncEnumerator(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator(Of T).StreamSerializerAsyncEnumerator(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamSerializerAsyncEnumerator.StreamSerializerAsyncEnumerator(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamSerializerAsyncEnumerator(Of T).StreamSerializerAsyncEnumerator(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamSerializerAsyncEnumerator(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamSerializerAsyncEnumerator_1__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator.StreamSerializerAsyncEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator(Of T).StreamSerializerAsyncEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerAsyncEnumerator.StreamSerializerAsyncEnumerator(IDeserializationContext) + nameWithType.vb: StreamSerializerAsyncEnumerator(Of T).StreamSerializerAsyncEnumerator(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator`1.#ctor* name: StreamSerializerAsyncEnumerator href: api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamSerializerAsyncEnumerator_1__ctor_ @@ -1369,15 +1576,14 @@ references: fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator(Of T) nameWithType: StreamSerializerEnumerator nameWithType.vb: StreamSerializerEnumerator(Of T) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator`1.#ctor(Stream,System.Nullable{System.Int32}) - name: StreamSerializerEnumerator(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamSerializerEnumerator_1__ctor_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator`1.#ctor(Stream,System.Nullable{System.Int32}) - name.vb: StreamSerializerEnumerator(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator.StreamSerializerEnumerator(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator(Of T).StreamSerializerEnumerator(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamSerializerEnumerator.StreamSerializerEnumerator(Stream, Nullable) - nameWithType.vb: StreamSerializerEnumerator(Of T).StreamSerializerEnumerator(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamSerializerEnumerator(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamSerializerEnumerator_1__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator`1.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator.StreamSerializerEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator(Of T).StreamSerializerEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerEnumerator.StreamSerializerEnumerator(IDeserializationContext) + nameWithType.vb: StreamSerializerEnumerator(Of T).StreamSerializerEnumerator(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator`1.#ctor* name: StreamSerializerEnumerator href: api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html#wan24_StreamSerializerExtensions_Enumerator_StreamSerializerEnumerator_1__ctor_ @@ -1427,24 +1633,18 @@ references: commentId: T:wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator nameWithType: StreamStringAsyncEnumerator -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name: StreamStringAsyncEnumerator(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringAsyncEnumerator__ctor_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: StreamStringAsyncEnumerator(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: StreamStringAsyncEnumerator(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringAsyncEnumerator__ctor_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: StreamStringAsyncEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamStringAsyncEnumerator(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringAsyncEnumerator__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: StreamStringAsyncEnumerator(IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringAsyncEnumerator__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamStringAsyncEnumerator.StreamStringAsyncEnumerator(IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.#ctor* name: StreamStringAsyncEnumerator href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringAsyncEnumerator__ctor_ @@ -1464,12 +1664,6 @@ references: commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.MinLen fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.MinLen nameWithType: StreamStringAsyncEnumerator.MinLen -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.Pool - name: Pool - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringAsyncEnumerator_Pool - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.Pool - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.Pool - nameWithType: StreamStringAsyncEnumerator.Pool - uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.ReadObjectAsync name: ReadObjectAsync() href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringAsyncEnumerator_ReadObjectAsync @@ -1489,24 +1683,18 @@ references: commentId: T:wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator nameWithType: StreamStringEnumerator -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(Stream,System.Nullable{System.Int32}) - name: StreamStringEnumerator(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringEnumerator__ctor_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(Stream,System.Nullable{System.Int32}) - name.vb: StreamStringEnumerator(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.StreamStringEnumerator(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.StreamStringEnumerator(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamStringEnumerator.StreamStringEnumerator(Stream, Nullable) - nameWithType.vb: StreamStringEnumerator.StreamStringEnumerator(Stream, Nullable(Of Int32)) -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: StreamStringEnumerator(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringEnumerator__ctor_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: StreamStringEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.StreamStringEnumerator(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.StreamStringEnumerator(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamStringEnumerator.StreamStringEnumerator(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamStringEnumerator.StreamStringEnumerator(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + name: StreamStringEnumerator(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringEnumerator__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.StreamStringEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamStringEnumerator.StreamStringEnumerator(IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: StreamStringEnumerator(IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringEnumerator__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.StreamStringEnumerator(wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamStringEnumerator.StreamStringEnumerator(IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.#ctor* name: StreamStringEnumerator href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringEnumerator__ctor_ @@ -1526,12 +1714,6 @@ references: commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.MinLen fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.MinLen nameWithType: StreamStringEnumerator.MinLen -- uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.Pool - name: Pool - href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringEnumerator_Pool - commentId: F:wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.Pool - fullName: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.Pool - nameWithType: StreamStringEnumerator.Pool - uid: wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.ReadObject name: ReadObject() href: api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html#wan24_StreamSerializerExtensions_Enumerator_StreamStringEnumerator_ReadObject @@ -1622,6 +1804,528 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.Type nameWithType: IAutoStreamSerializerConfig.Type +- uid: wan24.StreamSerializerExtensions.IDeserializationContext + name: IDeserializationContext + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html + commentId: T:wan24.StreamSerializerExtensions.IDeserializationContext + fullName: wan24.StreamSerializerExtensions.IDeserializationContext + nameWithType: IDeserializationContext +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.AddToCache* + name: AddToCache + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_AddToCache_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.AddToCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.AddToCache + nameWithType: IDeserializationContext.AddToCache +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.AddToCache``1(``0) + name: AddToCache(T) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_AddToCache__1___0_ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.AddToCache``1(``0) + name.vb: AddToCache(Of T)(T) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.AddToCache(T) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.AddToCache(Of T)(T) + nameWithType: IDeserializationContext.AddToCache(T) + nameWithType.vb: IDeserializationContext.AddToCache(Of T)(T) +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.Options + name: Options + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_Options + commentId: P:wan24.StreamSerializerExtensions.IDeserializationContext.Options + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.Options + nameWithType: IDeserializationContext.Options +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.Options* + name: Options + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_Options_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.Options + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.Options + nameWithType: IDeserializationContext.Options +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCached* + name: TryReadCached + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCached_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCached + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCached + nameWithType: IDeserializationContext.TryReadCached +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCached``1(``0@) + name: TryReadCached(out T) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCached__1___0__ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCached``1(``0@) + name.vb: TryReadCached(Of T)(ByRef T) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCached(out T) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCached(Of T)(ByRef T) + nameWithType: IDeserializationContext.TryReadCached(out T) + nameWithType.vb: IDeserializationContext.TryReadCached(Of T)(ByRef T) +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedAsync* + name: TryReadCachedAsync + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedAsync + nameWithType: IDeserializationContext.TryReadCachedAsync +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedAsync``1 + name: TryReadCachedAsync() + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedAsync__1 + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedAsync``1 + name.vb: TryReadCachedAsync(Of T)() + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedAsync() + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedAsync(Of T)() + nameWithType: IDeserializationContext.TryReadCachedAsync() + nameWithType.vb: IDeserializationContext.TryReadCachedAsync(Of T)() +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumber* + name: TryReadCachedNumber + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedNumber_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumber + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumber + nameWithType: IDeserializationContext.TryReadCachedNumber +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumber``1(System.Nullable{``0}@,System.Boolean) + name: TryReadCachedNumber(out Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedNumber__1_System_Nullable___0___System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumber``1(System.Nullable{``0}@,System.Boolean) + name.vb: TryReadCachedNumber(Of T)(ByRef Nullable(Of T), Boolean) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumber(out System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumber(Of T)(ByRef System.Nullable(Of T), System.Boolean) + nameWithType: IDeserializationContext.TryReadCachedNumber(out Nullable, Boolean) + nameWithType.vb: IDeserializationContext.TryReadCachedNumber(Of T)(ByRef Nullable(Of T), Boolean) +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumberAsync* + name: TryReadCachedNumberAsync + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedNumberAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumberAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumberAsync + nameWithType: IDeserializationContext.TryReadCachedNumberAsync +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumberAsync``1(System.Boolean) + name: TryReadCachedNumberAsync(Boolean) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedNumberAsync__1_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumberAsync``1(System.Boolean) + name.vb: TryReadCachedNumberAsync(Of T)(Boolean) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumberAsync(System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedNumberAsync(Of T)(System.Boolean) + nameWithType: IDeserializationContext.TryReadCachedNumberAsync(Boolean) + nameWithType.vb: IDeserializationContext.TryReadCachedNumberAsync(Of T)(Boolean) +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObject* + name: TryReadCachedObject + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObject_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObject + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObject + nameWithType: IDeserializationContext.TryReadCachedObject +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObject``1(``0@,System.Boolean) + name: TryReadCachedObject(out T, Boolean) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObject__1___0__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObject``1(``0@,System.Boolean) + name.vb: TryReadCachedObject(Of T)(ByRef T, Boolean) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObject(out T, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObject(Of T)(ByRef T, System.Boolean) + nameWithType: IDeserializationContext.TryReadCachedObject(out T, Boolean) + nameWithType.vb: IDeserializationContext.TryReadCachedObject(Of T)(ByRef T, Boolean) +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectAsync* + name: TryReadCachedObjectAsync + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObjectAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectAsync + nameWithType: IDeserializationContext.TryReadCachedObjectAsync +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectAsync``1(System.Boolean) + name: TryReadCachedObjectAsync(Boolean) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObjectAsync__1_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectAsync``1(System.Boolean) + name.vb: TryReadCachedObjectAsync(Of T)(Boolean) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectAsync(System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectAsync(Of T)(System.Boolean) + nameWithType: IDeserializationContext.TryReadCachedObjectAsync(Boolean) + nameWithType.vb: IDeserializationContext.TryReadCachedObjectAsync(Of T)(Boolean) +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountable* + name: TryReadCachedObjectCountable + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObjectCountable_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountable + nameWithType: IDeserializationContext.TryReadCachedObjectCountable +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountable``1(``0@,System.Int64@,System.Boolean) + name: TryReadCachedObjectCountable(out T, out Int64, Boolean) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObjectCountable__1___0__System_Int64__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountable``1(``0@,System.Int64@,System.Boolean) + name.vb: TryReadCachedObjectCountable(Of T)(ByRef T, ByRef Int64, Boolean) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountable(out T, out System.Int64, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountable(Of T)(ByRef T, ByRef System.Int64, System.Boolean) + nameWithType: IDeserializationContext.TryReadCachedObjectCountable(out T, out Int64, Boolean) + nameWithType.vb: IDeserializationContext.TryReadCachedObjectCountable(Of T)(ByRef T, ByRef Int64, Boolean) +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountableAsync* + name: TryReadCachedObjectCountableAsync + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObjectCountableAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountableAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountableAsync + nameWithType: IDeserializationContext.TryReadCachedObjectCountableAsync +- uid: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountableAsync``1(System.Boolean) + name: TryReadCachedObjectCountableAsync(Boolean) + href: api/wan24.StreamSerializerExtensions.IDeserializationContext.html#wan24_StreamSerializerExtensions_IDeserializationContext_TryReadCachedObjectCountableAsync__1_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountableAsync``1(System.Boolean) + name.vb: TryReadCachedObjectCountableAsync(Of T)(Boolean) + fullName: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountableAsync(System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.IDeserializationContext.TryReadCachedObjectCountableAsync(Of T)(System.Boolean) + nameWithType: IDeserializationContext.TryReadCachedObjectCountableAsync(Boolean) + nameWithType.vb: IDeserializationContext.TryReadCachedObjectCountableAsync(Of T)(Boolean) +- uid: wan24.StreamSerializerExtensions.ISerializationContext + name: ISerializationContext + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html + commentId: T:wan24.StreamSerializerExtensions.ISerializationContext + fullName: wan24.StreamSerializerExtensions.ISerializationContext + nameWithType: ISerializationContext +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached* + name: TryWriteCached + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCached_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached + nameWithType: ISerializationContext.TryWriteCached +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached``1(``0) + name: TryWriteCached(T) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCached__1___0_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached``1(``0) + name.vb: TryWriteCached(Of T)(T) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached(T) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached(Of T)(T) + nameWithType: ISerializationContext.TryWriteCached(T) + nameWithType.vb: ISerializationContext.TryWriteCached(Of T)(T) +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name: TryWriteCached(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCached__1___0_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name.vb: TryWriteCached(Of T)(T, Nullable(Of ObjectTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached(Of T)(T, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean) + nameWithType: ISerializationContext.TryWriteCached(T, Nullable, Boolean) + nameWithType.vb: ISerializationContext.TryWriteCached(Of T)(T, Nullable(Of ObjectTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name: TryWriteCached(Nullable, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCached__1_System_Nullable___0__System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name.vb: TryWriteCached(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached(System.Nullable, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCached(Of T)(System.Nullable(Of T), System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes), System.Boolean) + nameWithType: ISerializationContext.TryWriteCached(Nullable, Nullable, Boolean) + nameWithType.vb: ISerializationContext.TryWriteCached(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync* + name: TryWriteCachedAsync + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync + nameWithType: ISerializationContext.TryWriteCachedAsync +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync``1(``0) + name: TryWriteCachedAsync(T) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedAsync__1___0_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync``1(``0) + name.vb: TryWriteCachedAsync(Of T)(T) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync(T) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync(Of T)(T) + nameWithType: ISerializationContext.TryWriteCachedAsync(T) + nameWithType.vb: ISerializationContext.TryWriteCachedAsync(Of T)(T) +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name: TryWriteCachedAsync(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedAsync__1___0_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name.vb: TryWriteCachedAsync(Of T)(T, Nullable(Of ObjectTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync(Of T)(T, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean) + nameWithType: ISerializationContext.TryWriteCachedAsync(T, Nullable, Boolean) + nameWithType.vb: ISerializationContext.TryWriteCachedAsync(Of T)(T, Nullable(Of ObjectTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name: TryWriteCachedAsync(Nullable, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedAsync__1_System_Nullable___0__System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name.vb: TryWriteCachedAsync(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync(System.Nullable, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedAsync(Of T)(System.Nullable(Of T), System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes), System.Boolean) + nameWithType: ISerializationContext.TryWriteCachedAsync(Nullable, Nullable, Boolean) + nameWithType.vb: ISerializationContext.TryWriteCachedAsync(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountable* + name: TryWriteCachedCountable + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedCountable_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountable + nameWithType: ISerializationContext.TryWriteCachedCountable +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountable``1(``0,System.Nullable{System.Int64},System.Boolean) + name: TryWriteCachedCountable(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedCountable__1___0_System_Nullable_System_Int64__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountable``1(``0,System.Nullable{System.Int64},System.Boolean) + name.vb: TryWriteCachedCountable(Of T)(T, Nullable(Of Int64), Boolean) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountable(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountable(Of T)(T, System.Nullable(Of System.Int64), System.Boolean) + nameWithType: ISerializationContext.TryWriteCachedCountable(T, Nullable, Boolean) + nameWithType.vb: ISerializationContext.TryWriteCachedCountable(Of T)(T, Nullable(Of Int64), Boolean) +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountableAsync* + name: TryWriteCachedCountableAsync + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedCountableAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountableAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountableAsync + nameWithType: ISerializationContext.TryWriteCachedCountableAsync +- uid: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountableAsync``1(``0,System.Nullable{System.Int64},System.Boolean) + name: TryWriteCachedCountableAsync(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.ISerializationContext.html#wan24_StreamSerializerExtensions_ISerializationContext_TryWriteCachedCountableAsync__1___0_System_Nullable_System_Int64__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountableAsync``1(``0,System.Nullable{System.Int64},System.Boolean) + name.vb: TryWriteCachedCountableAsync(Of T)(T, Nullable(Of Int64), Boolean) + fullName: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountableAsync(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.ISerializationContext.TryWriteCachedCountableAsync(Of T)(T, System.Nullable(Of System.Int64), System.Boolean) + nameWithType: ISerializationContext.TryWriteCachedCountableAsync(T, Nullable, Boolean) + nameWithType.vb: ISerializationContext.TryWriteCachedCountableAsync(Of T)(T, Nullable(Of Int64), Boolean) +- uid: wan24.StreamSerializerExtensions.ISerializerContext + name: ISerializerContext + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html + commentId: T:wan24.StreamSerializerExtensions.ISerializerContext + fullName: wan24.StreamSerializerExtensions.ISerializerContext + nameWithType: ISerializerContext +- uid: wan24.StreamSerializerExtensions.ISerializerContext.BufferPool + name: BufferPool + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_BufferPool + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.BufferPool + fullName: wan24.StreamSerializerExtensions.ISerializerContext.BufferPool + nameWithType: ISerializerContext.BufferPool +- uid: wan24.StreamSerializerExtensions.ISerializerContext.BufferPool* + name: BufferPool + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_BufferPool_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.BufferPool + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.BufferPool + nameWithType: ISerializerContext.BufferPool +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CacheIndexSize + name: CacheIndexSize + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CacheIndexSize + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.CacheIndexSize + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CacheIndexSize + nameWithType: ISerializerContext.CacheIndexSize +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CacheIndexSize* + name: CacheIndexSize + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CacheIndexSize_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.CacheIndexSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CacheIndexSize + nameWithType: ISerializerContext.CacheIndexSize +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CacheOffset + name: CacheOffset + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CacheOffset + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.CacheOffset + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CacheOffset + nameWithType: ISerializerContext.CacheOffset +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CacheOffset* + name: CacheOffset + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CacheOffset_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.CacheOffset + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CacheOffset + nameWithType: ISerializerContext.CacheOffset +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CacheSize + name: CacheSize + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CacheSize + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.CacheSize + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CacheSize + nameWithType: ISerializerContext.CacheSize +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CacheSize* + name: CacheSize + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CacheSize_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.CacheSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CacheSize + nameWithType: ISerializerContext.CacheSize +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Cancellation + name: Cancellation + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Cancellation + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.Cancellation + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Cancellation + nameWithType: ISerializerContext.Cancellation +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Cancellation* + name: Cancellation + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Cancellation_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.Cancellation + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Cancellation + nameWithType: ISerializerContext.Cancellation +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CustomVersion + name: CustomVersion + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CustomVersion + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.CustomVersion + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CustomVersion + nameWithType: ISerializerContext.CustomVersion +- uid: wan24.StreamSerializerExtensions.ISerializerContext.CustomVersion* + name: CustomVersion + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_CustomVersion_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.CustomVersion + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.CustomVersion + nameWithType: ISerializerContext.CustomVersion +- uid: wan24.StreamSerializerExtensions.ISerializerContext.DisableCache + name: DisableCache() + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_DisableCache + commentId: M:wan24.StreamSerializerExtensions.ISerializerContext.DisableCache + fullName: wan24.StreamSerializerExtensions.ISerializerContext.DisableCache() + nameWithType: ISerializerContext.DisableCache() +- uid: wan24.StreamSerializerExtensions.ISerializerContext.DisableCache* + name: DisableCache + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_DisableCache_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.DisableCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.DisableCache + nameWithType: ISerializerContext.DisableCache +- uid: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStream + name: DisposeStream() + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_DisposeStream + commentId: M:wan24.StreamSerializerExtensions.ISerializerContext.DisposeStream + fullName: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStream() + nameWithType: ISerializerContext.DisposeStream() +- uid: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStream* + name: DisposeStream + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_DisposeStream_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.DisposeStream + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStream + nameWithType: ISerializerContext.DisposeStream +- uid: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStreamAsync + name: DisposeStreamAsync() + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_DisposeStreamAsync + commentId: M:wan24.StreamSerializerExtensions.ISerializerContext.DisposeStreamAsync + fullName: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStreamAsync() + nameWithType: ISerializerContext.DisposeStreamAsync() +- uid: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStreamAsync* + name: DisposeStreamAsync + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_DisposeStreamAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.DisposeStreamAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.DisposeStreamAsync + nameWithType: ISerializerContext.DisposeStreamAsync +- uid: wan24.StreamSerializerExtensions.ISerializerContext.EnableCache + name: EnableCache() + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_EnableCache + commentId: M:wan24.StreamSerializerExtensions.ISerializerContext.EnableCache + fullName: wan24.StreamSerializerExtensions.ISerializerContext.EnableCache() + nameWithType: ISerializerContext.EnableCache() +- uid: wan24.StreamSerializerExtensions.ISerializerContext.EnableCache* + name: EnableCache + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_EnableCache_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.EnableCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.EnableCache + nameWithType: ISerializerContext.EnableCache +- uid: wan24.StreamSerializerExtensions.ISerializerContext.IsCacheEnabled + name: IsCacheEnabled + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_IsCacheEnabled + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.IsCacheEnabled + fullName: wan24.StreamSerializerExtensions.ISerializerContext.IsCacheEnabled + nameWithType: ISerializerContext.IsCacheEnabled +- uid: wan24.StreamSerializerExtensions.ISerializerContext.IsCacheEnabled* + name: IsCacheEnabled + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_IsCacheEnabled_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.IsCacheEnabled + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.IsCacheEnabled + nameWithType: ISerializerContext.IsCacheEnabled +- uid: wan24.StreamSerializerExtensions.ISerializerContext.LastNumberType + name: LastNumberType + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_LastNumberType + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.LastNumberType + fullName: wan24.StreamSerializerExtensions.ISerializerContext.LastNumberType + nameWithType: ISerializerContext.LastNumberType +- uid: wan24.StreamSerializerExtensions.ISerializerContext.LastNumberType* + name: LastNumberType + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_LastNumberType_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.LastNumberType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.LastNumberType + nameWithType: ISerializerContext.LastNumberType +- uid: wan24.StreamSerializerExtensions.ISerializerContext.LastObjectType + name: LastObjectType + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_LastObjectType + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.LastObjectType + fullName: wan24.StreamSerializerExtensions.ISerializerContext.LastObjectType + nameWithType: ISerializerContext.LastObjectType +- uid: wan24.StreamSerializerExtensions.ISerializerContext.LastObjectType* + name: LastObjectType + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_LastObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.LastObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.LastObjectType + nameWithType: ISerializerContext.LastObjectType +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Nullable + name: Nullable + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Nullable + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.Nullable + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Nullable + nameWithType: ISerializerContext.Nullable +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Nullable* + name: Nullable + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Nullable_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.Nullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Nullable + nameWithType: ISerializerContext.Nullable +- uid: wan24.StreamSerializerExtensions.ISerializerContext.RealCacheSize + name: RealCacheSize + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_RealCacheSize + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.RealCacheSize + fullName: wan24.StreamSerializerExtensions.ISerializerContext.RealCacheSize + nameWithType: ISerializerContext.RealCacheSize +- uid: wan24.StreamSerializerExtensions.ISerializerContext.RealCacheSize* + name: RealCacheSize + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_RealCacheSize_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.RealCacheSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.RealCacheSize + nameWithType: ISerializerContext.RealCacheSize +- uid: wan24.StreamSerializerExtensions.ISerializerContext.RecursionLevel + name: RecursionLevel + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_RecursionLevel + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.RecursionLevel + fullName: wan24.StreamSerializerExtensions.ISerializerContext.RecursionLevel + nameWithType: ISerializerContext.RecursionLevel +- uid: wan24.StreamSerializerExtensions.ISerializerContext.RecursionLevel* + name: RecursionLevel + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_RecursionLevel_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.RecursionLevel + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.RecursionLevel + nameWithType: ISerializerContext.RecursionLevel +- uid: wan24.StreamSerializerExtensions.ISerializerContext.SerializerVersion + name: SerializerVersion + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_SerializerVersion + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.SerializerVersion + fullName: wan24.StreamSerializerExtensions.ISerializerContext.SerializerVersion + nameWithType: ISerializerContext.SerializerVersion +- uid: wan24.StreamSerializerExtensions.ISerializerContext.SerializerVersion* + name: SerializerVersion + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_SerializerVersion_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.SerializerVersion + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.SerializerVersion + nameWithType: ISerializerContext.SerializerVersion +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Stream + name: Stream + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Stream + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.Stream + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Stream + nameWithType: ISerializerContext.Stream +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Stream* + name: Stream + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Stream_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.Stream + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Stream + nameWithType: ISerializerContext.Stream +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Version + name: Version + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Version + commentId: P:wan24.StreamSerializerExtensions.ISerializerContext.Version + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Version + nameWithType: ISerializerContext.Version +- uid: wan24.StreamSerializerExtensions.ISerializerContext.Version* + name: Version + href: api/wan24.StreamSerializerExtensions.ISerializerContext.html#wan24_StreamSerializerExtensions_ISerializerContext_Version_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerContext.Version + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerContext.Version + nameWithType: ISerializerContext.Version - uid: wan24.StreamSerializerExtensions.ISerializerOptions name: ISerializerOptions href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html @@ -1679,6 +2383,32 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.ISerializerOptions.GetMinLen nameWithType: ISerializerOptions.GetMinLen +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.IsNullable + name: IsNullable + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_IsNullable + commentId: P:wan24.StreamSerializerExtensions.ISerializerOptions.IsNullable + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.IsNullable + nameWithType: ISerializerOptions.IsNullable +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.IsNullable* + name: IsNullable + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_IsNullable_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerOptions.IsNullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.IsNullable + nameWithType: ISerializerOptions.IsNullable +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.KeyOptions + name: KeyOptions + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_KeyOptions + commentId: P:wan24.StreamSerializerExtensions.ISerializerOptions.KeyOptions + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.KeyOptions + nameWithType: ISerializerOptions.KeyOptions +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.KeyOptions* + name: KeyOptions + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_KeyOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerOptions.KeyOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.KeyOptions + nameWithType: ISerializerOptions.KeyOptions - uid: wan24.StreamSerializerExtensions.ISerializerOptions.Property name: Property href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_Property @@ -1692,18 +2422,44 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.ISerializerOptions.Property nameWithType: ISerializerOptions.Property +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.Serializer + name: Serializer + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_Serializer + commentId: P:wan24.StreamSerializerExtensions.ISerializerOptions.Serializer + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.Serializer + nameWithType: ISerializerOptions.Serializer +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.Serializer* + name: Serializer + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_Serializer_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerOptions.Serializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.Serializer + nameWithType: ISerializerOptions.Serializer +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.ValueOptions + name: ValueOptions + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_ValueOptions + commentId: P:wan24.StreamSerializerExtensions.ISerializerOptions.ValueOptions + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.ValueOptions + nameWithType: ISerializerOptions.ValueOptions +- uid: wan24.StreamSerializerExtensions.ISerializerOptions.ValueOptions* + name: ValueOptions + href: api/wan24.StreamSerializerExtensions.ISerializerOptions.html#wan24_StreamSerializerExtensions_ISerializerOptions_ValueOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.ISerializerOptions.ValueOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ISerializerOptions.ValueOptions + nameWithType: ISerializerOptions.ValueOptions - uid: wan24.StreamSerializerExtensions.IStreamSerializer name: IStreamSerializer href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html commentId: T:wan24.StreamSerializerExtensions.IStreamSerializer fullName: wan24.StreamSerializerExtensions.IStreamSerializer nameWithType: IStreamSerializer -- uid: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream,System.Int32) - name: Deserialize(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream,System.Int32) - fullName: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream, System.Int32) - nameWithType: IStreamSerializer.Deserialize(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: IStreamSerializer.Deserialize(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize* name: Deserialize href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_ @@ -1711,12 +2467,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize nameWithType: IStreamSerializer.Deserialize -- uid: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream,System.Int32,CancellationToken) - name: DeserializeAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream, System.Int32, CancellationToken) - nameWithType: IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: IStreamSerializer.DeserializeAsync(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync* name: DeserializeAsync href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_ @@ -1724,12 +2480,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync nameWithType: IStreamSerializer.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) - name: Serialize(Stream) - href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_Stream_ - commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) - fullName: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) - nameWithType: IStreamSerializer.Serialize(Stream) +- uid: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: IStreamSerializer.Serialize(ISerializationContext) - uid: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize* name: Serialize href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_ @@ -1737,12 +2493,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize nameWithType: IStreamSerializer.Serialize -- uid: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream,CancellationToken) - name: SerializeAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream, CancellationToken) - nameWithType: IStreamSerializer.SerializeAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: IStreamSerializer.SerializeAsync(ISerializationContext) - uid: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync* name: SerializeAsync href: api/wan24.StreamSerializerExtensions.IStreamSerializer.html#wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_ @@ -1795,6 +2551,492 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializerVersion nameWithType: IStreamSerializerVersion.SerializerVersion +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext + name: ItemDeserializerContext + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html + commentId: T:wan24.StreamSerializerExtensions.ItemDeserializerContext + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext + nameWithType: ItemDeserializerContext +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Boolean) + name: ItemDeserializerContext(IDeserializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Boolean) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemDeserializerContext(wan24.StreamSerializerExtensions.IDeserializationContext, System.Boolean) + nameWithType: ItemDeserializerContext.ItemDeserializerContext(IDeserializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.#ctor* + name: ItemDeserializerContext + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext__ctor_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.#ctor + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemDeserializerContext + nameWithType: ItemDeserializerContext.ItemDeserializerContext +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddObject* + name: AddObject + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_AddObject_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.AddObject + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddObject + nameWithType: ItemDeserializerContext.AddObject +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddObject``1(``0) + name: AddObject(T) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_AddObject__1___0_ + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.AddObject``1(``0) + name.vb: AddObject(Of T)(T) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddObject(T) + fullName.vb: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddObject(Of T)(T) + nameWithType: ItemDeserializerContext.AddObject(T) + nameWithType.vb: ItemDeserializerContext.AddObject(Of T)(T) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddType(Type) + name: AddType(Type) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_AddType_Type_ + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.AddType(Type) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddType(Type) + nameWithType: ItemDeserializerContext.AddType(Type) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddType* + name: AddType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_AddType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.AddType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.AddType + nameWithType: ItemDeserializerContext.AddType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.Context + name: Context + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_Context + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.Context + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Context + nameWithType: ItemDeserializerContext.Context +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.Context* + name: Context + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_Context_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.Context + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Context + nameWithType: ItemDeserializerContext.Context +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.Dispose(System.Boolean) + name: Dispose(Boolean) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_Dispose_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.Dispose(System.Boolean) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Dispose(System.Boolean) + nameWithType: ItemDeserializerContext.Dispose(Boolean) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.Dispose* + name: Dispose + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_Dispose_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.Dispose + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Dispose + nameWithType: ItemDeserializerContext.Dispose +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedObject(System.Int32) + name: GetCachedObject(Int32) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_GetCachedObject_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedObject(System.Int32) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedObject(System.Int32) + nameWithType: ItemDeserializerContext.GetCachedObject(Int32) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedObject* + name: GetCachedObject + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_GetCachedObject_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedObject + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedObject + nameWithType: ItemDeserializerContext.GetCachedObject +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedType(System.Int32) + name: GetCachedType(Int32) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_GetCachedType_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedType(System.Int32) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedType(System.Int32) + nameWithType: ItemDeserializerContext.GetCachedType(Int32) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedType* + name: GetCachedType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_GetCachedType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.GetCachedType + nameWithType: ItemDeserializerContext.GetCachedType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemAsyncDeserializer + name: ItemAsyncDeserializer + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemAsyncDeserializer + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemAsyncDeserializer + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemAsyncDeserializer + nameWithType: ItemDeserializerContext.ItemAsyncDeserializer +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemAsyncDeserializer* + name: ItemAsyncDeserializer + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemAsyncDeserializer_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemAsyncDeserializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemAsyncDeserializer + nameWithType: ItemDeserializerContext.ItemAsyncDeserializer +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSerializer + name: ItemSerializer + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemSerializer + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSerializer + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSerializer + nameWithType: ItemDeserializerContext.ItemSerializer +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSerializer* + name: ItemSerializer + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemSerializer_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSerializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSerializer + nameWithType: ItemDeserializerContext.ItemSerializer +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSyncDeserializer + name: ItemSyncDeserializer + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemSyncDeserializer + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSyncDeserializer + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSyncDeserializer + nameWithType: ItemDeserializerContext.ItemSyncDeserializer +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSyncDeserializer* + name: ItemSyncDeserializer + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemSyncDeserializer_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSyncDeserializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemSyncDeserializer + nameWithType: ItemDeserializerContext.ItemSyncDeserializer +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemType + name: ItemType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemType + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemType + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemType + nameWithType: ItemDeserializerContext.ItemType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemType* + name: ItemType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ItemType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ItemType + nameWithType: ItemDeserializerContext.ItemType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.LastObjectType + name: LastObjectType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_LastObjectType + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.LastObjectType + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.LastObjectType + nameWithType: ItemDeserializerContext.LastObjectType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.LastObjectType* + name: LastObjectType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_LastObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.LastObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.LastObjectType + nameWithType: ItemDeserializerContext.LastObjectType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.Nullable + name: Nullable + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_Nullable + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.Nullable + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Nullable + nameWithType: ItemDeserializerContext.Nullable +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.Nullable* + name: Nullable + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_Nullable_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.Nullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Nullable + nameWithType: ItemDeserializerContext.Nullable +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ObjectType + name: ObjectType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ObjectType + commentId: P:wan24.StreamSerializerExtensions.ItemDeserializerContext.ObjectType + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ObjectType + nameWithType: ItemDeserializerContext.ObjectType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.ObjectType* + name: ObjectType + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_ObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.ObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.ObjectType + nameWithType: ItemDeserializerContext.ObjectType +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext)~System.Nullable{Type} + name: Implicit(ItemDeserializerContext to Nullable) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemDeserializerContext__System_Nullable_Type_ + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext)~System.Nullable{Type} + name.vb: Widening(ItemDeserializerContext to Nullable(Of Type)) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext to System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.ItemDeserializerContext.Widening(wan24.StreamSerializerExtensions.ItemDeserializerContext to System.Nullable(Of Type)) + nameWithType: ItemDeserializerContext.Implicit(ItemDeserializerContext to Nullable) + nameWithType.vb: ItemDeserializerContext.Widening(ItemDeserializerContext to Nullable(Of Type)) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext)~wan24.StreamSerializerExtensions.ObjectTypes + name: Implicit(ItemDeserializerContext to ObjectTypes) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemDeserializerContext__wan24_StreamSerializerExtensions_ObjectTypes + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext)~wan24.StreamSerializerExtensions.ObjectTypes + name.vb: Widening(ItemDeserializerContext to ObjectTypes) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext to wan24.StreamSerializerExtensions.ObjectTypes) + fullName.vb: wan24.StreamSerializerExtensions.ItemDeserializerContext.Widening(wan24.StreamSerializerExtensions.ItemDeserializerContext to wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: ItemDeserializerContext.Implicit(ItemDeserializerContext to ObjectTypes) + nameWithType.vb: ItemDeserializerContext.Widening(ItemDeserializerContext to ObjectTypes) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext)~wan24.StreamSerializerExtensions.SerializerTypes + name: Implicit(ItemDeserializerContext to SerializerTypes) + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemDeserializerContext__wan24_StreamSerializerExtensions_SerializerTypes + commentId: M:wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext)~wan24.StreamSerializerExtensions.SerializerTypes + name.vb: Widening(ItemDeserializerContext to SerializerTypes) + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Implicit(wan24.StreamSerializerExtensions.ItemDeserializerContext to wan24.StreamSerializerExtensions.SerializerTypes) + fullName.vb: wan24.StreamSerializerExtensions.ItemDeserializerContext.Widening(wan24.StreamSerializerExtensions.ItemDeserializerContext to wan24.StreamSerializerExtensions.SerializerTypes) + nameWithType: ItemDeserializerContext.Implicit(ItemDeserializerContext to SerializerTypes) + nameWithType.vb: ItemDeserializerContext.Widening(ItemDeserializerContext to SerializerTypes) +- uid: wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit* + name: Implicit + href: api/wan24.StreamSerializerExtensions.ItemDeserializerContext.html#wan24_StreamSerializerExtensions_ItemDeserializerContext_op_Implicit_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemDeserializerContext.op_Implicit + isSpec: "True" + name.vb: Widening + fullName: wan24.StreamSerializerExtensions.ItemDeserializerContext.Implicit + fullName.vb: wan24.StreamSerializerExtensions.ItemDeserializerContext.Widening + nameWithType: ItemDeserializerContext.Implicit + nameWithType.vb: ItemDeserializerContext.Widening +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext + name: ItemSerializerContext + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html + commentId: T:wan24.StreamSerializerExtensions.ItemSerializerContext + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext + nameWithType: ItemSerializerContext +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.#ctor(wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: ItemSerializerContext(ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext__ctor_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.#ctor(wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializerContext(wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: ItemSerializerContext.ItemSerializerContext(ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.#ctor* + name: ItemSerializerContext + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext__ctor_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.#ctor + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializerContext + nameWithType: ItemSerializerContext.ItemSerializerContext +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.AddObject* + name: AddObject + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_AddObject_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.AddObject + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.AddObject + nameWithType: ItemSerializerContext.AddObject +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.AddObject``1(``0) + name: AddObject(T) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_AddObject__1___0_ + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.AddObject``1(``0) + name.vb: AddObject(Of T)(T) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.AddObject(T) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.AddObject(Of T)(T) + nameWithType: ItemSerializerContext.AddObject(T) + nameWithType.vb: ItemSerializerContext.AddObject(Of T)(T) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.AddType(Type) + name: AddType(Type) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_AddType_Type_ + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.AddType(Type) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.AddType(Type) + nameWithType: ItemSerializerContext.AddType(Type) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.AddType* + name: AddType + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_AddType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.AddType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.AddType + nameWithType: ItemSerializerContext.AddType +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.Context + name: Context + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_Context + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.Context + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Context + nameWithType: ItemSerializerContext.Context +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.Context* + name: Context + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_Context_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.Context + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Context + nameWithType: ItemSerializerContext.Context +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.Dispose(System.Boolean) + name: Dispose(Boolean) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_Dispose_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.Dispose(System.Boolean) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Dispose(System.Boolean) + nameWithType: ItemSerializerContext.Dispose(Boolean) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.Dispose* + name: Dispose + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_Dispose_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.Dispose + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Dispose + nameWithType: ItemSerializerContext.Dispose +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.GetObjectCacheIndex* + name: GetObjectCacheIndex + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_GetObjectCacheIndex_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.GetObjectCacheIndex + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.GetObjectCacheIndex + nameWithType: ItemSerializerContext.GetObjectCacheIndex +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.GetObjectCacheIndex``1(``0) + name: GetObjectCacheIndex(T) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_GetObjectCacheIndex__1___0_ + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.GetObjectCacheIndex``1(``0) + name.vb: GetObjectCacheIndex(Of T)(T) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.GetObjectCacheIndex(T) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.GetObjectCacheIndex(Of T)(T) + nameWithType: ItemSerializerContext.GetObjectCacheIndex(T) + nameWithType.vb: ItemSerializerContext.GetObjectCacheIndex(Of T)(T) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.GetTypeCacheIndex(Type) + name: GetTypeCacheIndex(Type) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_GetTypeCacheIndex_Type_ + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.GetTypeCacheIndex(Type) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.GetTypeCacheIndex(Type) + nameWithType: ItemSerializerContext.GetTypeCacheIndex(Type) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.GetTypeCacheIndex* + name: GetTypeCacheIndex + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_GetTypeCacheIndex_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.GetTypeCacheIndex + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.GetTypeCacheIndex + nameWithType: ItemSerializerContext.GetTypeCacheIndex +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemAsyncSerializer + name: ItemAsyncSerializer + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ItemAsyncSerializer + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.ItemAsyncSerializer + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemAsyncSerializer + nameWithType: ItemSerializerContext.ItemAsyncSerializer +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemAsyncSerializer* + name: ItemAsyncSerializer + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ItemAsyncSerializer_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.ItemAsyncSerializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemAsyncSerializer + nameWithType: ItemSerializerContext.ItemAsyncSerializer +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializer + name: ItemSerializer + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ItemSerializer + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializer + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializer + nameWithType: ItemSerializerContext.ItemSerializer +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializer* + name: ItemSerializer + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ItemSerializer_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSerializer + nameWithType: ItemSerializerContext.ItemSerializer +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSyncSerializer + name: ItemSyncSerializer + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ItemSyncSerializer + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSyncSerializer + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSyncSerializer + nameWithType: ItemSerializerContext.ItemSyncSerializer +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSyncSerializer* + name: ItemSyncSerializer + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ItemSyncSerializer_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSyncSerializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ItemSyncSerializer + nameWithType: ItemSerializerContext.ItemSyncSerializer +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.LastItemType + name: LastItemType + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_LastItemType + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.LastItemType + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.LastItemType + nameWithType: ItemSerializerContext.LastItemType +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.LastItemType* + name: LastItemType + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_LastItemType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.LastItemType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.LastItemType + nameWithType: ItemSerializerContext.LastItemType +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.Nullable + name: Nullable + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_Nullable + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.Nullable + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Nullable + nameWithType: ItemSerializerContext.Nullable +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.Nullable* + name: Nullable + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_Nullable_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.Nullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Nullable + nameWithType: ItemSerializerContext.Nullable +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ObjectType + name: ObjectType + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ObjectType + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.ObjectType + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ObjectType + nameWithType: ItemSerializerContext.ObjectType +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.ObjectType* + name: ObjectType + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_ObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.ObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.ObjectType + nameWithType: ItemSerializerContext.ObjectType +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~CancellationToken + name: Implicit(ItemSerializerContext to CancellationToken) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemSerializerContext__CancellationToken + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~CancellationToken + name.vb: Widening(ItemSerializerContext to CancellationToken) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext to CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.Widening(wan24.StreamSerializerExtensions.ItemSerializerContext to CancellationToken) + nameWithType: ItemSerializerContext.Implicit(ItemSerializerContext to CancellationToken) + nameWithType.vb: ItemSerializerContext.Widening(ItemSerializerContext to CancellationToken) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~Stream + name: Implicit(ItemSerializerContext to Stream) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemSerializerContext__Stream + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~Stream + name.vb: Widening(ItemSerializerContext to Stream) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext to Stream) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.Widening(wan24.StreamSerializerExtensions.ItemSerializerContext to Stream) + nameWithType: ItemSerializerContext.Implicit(ItemSerializerContext to Stream) + nameWithType.vb: ItemSerializerContext.Widening(ItemSerializerContext to Stream) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~System.Boolean + name: Implicit(ItemSerializerContext to Boolean) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemSerializerContext__System_Boolean + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~System.Boolean + name.vb: Widening(ItemSerializerContext to Boolean) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext to System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.Widening(wan24.StreamSerializerExtensions.ItemSerializerContext to System.Boolean) + nameWithType: ItemSerializerContext.Implicit(ItemSerializerContext to Boolean) + nameWithType.vb: ItemSerializerContext.Widening(ItemSerializerContext to Boolean) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~System.Nullable{Type} + name: Implicit(ItemSerializerContext to Nullable) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemSerializerContext__System_Nullable_Type_ + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~System.Nullable{Type} + name.vb: Widening(ItemSerializerContext to Nullable(Of Type)) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext to System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.Widening(wan24.StreamSerializerExtensions.ItemSerializerContext to System.Nullable(Of Type)) + nameWithType: ItemSerializerContext.Implicit(ItemSerializerContext to Nullable) + nameWithType.vb: ItemSerializerContext.Widening(ItemSerializerContext to Nullable(Of Type)) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~wan24.StreamSerializerExtensions.ObjectTypes + name: Implicit(ItemSerializerContext to ObjectTypes) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemSerializerContext__wan24_StreamSerializerExtensions_ObjectTypes + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~wan24.StreamSerializerExtensions.ObjectTypes + name.vb: Widening(ItemSerializerContext to ObjectTypes) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext to wan24.StreamSerializerExtensions.ObjectTypes) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.Widening(wan24.StreamSerializerExtensions.ItemSerializerContext to wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: ItemSerializerContext.Implicit(ItemSerializerContext to ObjectTypes) + nameWithType.vb: ItemSerializerContext.Widening(ItemSerializerContext to ObjectTypes) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~wan24.StreamSerializerExtensions.SerializerTypes + name: Implicit(ItemSerializerContext to SerializerTypes) + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_op_Implicit_wan24_StreamSerializerExtensions_ItemSerializerContext__wan24_StreamSerializerExtensions_SerializerTypes + commentId: M:wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext)~wan24.StreamSerializerExtensions.SerializerTypes + name.vb: Widening(ItemSerializerContext to SerializerTypes) + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Implicit(wan24.StreamSerializerExtensions.ItemSerializerContext to wan24.StreamSerializerExtensions.SerializerTypes) + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.Widening(wan24.StreamSerializerExtensions.ItemSerializerContext to wan24.StreamSerializerExtensions.SerializerTypes) + nameWithType: ItemSerializerContext.Implicit(ItemSerializerContext to SerializerTypes) + nameWithType.vb: ItemSerializerContext.Widening(ItemSerializerContext to SerializerTypes) +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit* + name: Implicit + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_op_Implicit_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.op_Implicit + isSpec: "True" + name.vb: Widening + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.Implicit + fullName.vb: wan24.StreamSerializerExtensions.ItemSerializerContext.Widening + nameWithType: ItemSerializerContext.Implicit + nameWithType.vb: ItemSerializerContext.Widening +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.WriteObject + name: WriteObject + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_WriteObject + commentId: P:wan24.StreamSerializerExtensions.ItemSerializerContext.WriteObject + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.WriteObject + nameWithType: ItemSerializerContext.WriteObject +- uid: wan24.StreamSerializerExtensions.ItemSerializerContext.WriteObject* + name: WriteObject + href: api/wan24.StreamSerializerExtensions.ItemSerializerContext.html#wan24_StreamSerializerExtensions_ItemSerializerContext_WriteObject_ + commentId: Overload:wan24.StreamSerializerExtensions.ItemSerializerContext.WriteObject + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.ItemSerializerContext.WriteObject + nameWithType: ItemSerializerContext.WriteObject - uid: wan24.StreamSerializerExtensions.NumberTypes name: NumberTypes href: api/wan24.StreamSerializerExtensions.NumberTypes.html @@ -1843,6 +3085,12 @@ references: commentId: F:wan24.StreamSerializerExtensions.NumberTypes.Int fullName: wan24.StreamSerializerExtensions.NumberTypes.Int nameWithType: NumberTypes.Int +- uid: wan24.StreamSerializerExtensions.NumberTypes.IsNull + name: IsNull + href: api/wan24.StreamSerializerExtensions.NumberTypes.html#wan24_StreamSerializerExtensions_NumberTypes_IsNull + commentId: F:wan24.StreamSerializerExtensions.NumberTypes.IsNull + fullName: wan24.StreamSerializerExtensions.NumberTypes.IsNull + nameWithType: NumberTypes.IsNull - uid: wan24.StreamSerializerExtensions.NumberTypes.Long name: Long href: api/wan24.StreamSerializerExtensions.NumberTypes.html#wan24_StreamSerializerExtensions_NumberTypes_Long @@ -1867,12 +3115,6 @@ references: commentId: F:wan24.StreamSerializerExtensions.NumberTypes.None fullName: wan24.StreamSerializerExtensions.NumberTypes.None nameWithType: NumberTypes.None -- uid: wan24.StreamSerializerExtensions.NumberTypes.Null - name: "Null" - href: api/wan24.StreamSerializerExtensions.NumberTypes.html#wan24_StreamSerializerExtensions_NumberTypes_Null - commentId: F:wan24.StreamSerializerExtensions.NumberTypes.Null - fullName: wan24.StreamSerializerExtensions.NumberTypes.Null - nameWithType: NumberTypes.Null - uid: wan24.StreamSerializerExtensions.NumberTypes.Short name: Short href: api/wan24.StreamSerializerExtensions.NumberTypes.html#wan24_StreamSerializerExtensions_NumberTypes_Short @@ -1909,12 +3151,24 @@ references: commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Array fullName: wan24.StreamSerializerExtensions.ObjectTypes.Array nameWithType: ObjectTypes.Array +- uid: wan24.StreamSerializerExtensions.ObjectTypes.BasicTypeInfo + name: BasicTypeInfo + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_BasicTypeInfo + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.BasicTypeInfo + fullName: wan24.StreamSerializerExtensions.ObjectTypes.BasicTypeInfo + nameWithType: ObjectTypes.BasicTypeInfo - uid: wan24.StreamSerializerExtensions.ObjectTypes.Bool name: Bool href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Bool commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Bool fullName: wan24.StreamSerializerExtensions.ObjectTypes.Bool nameWithType: ObjectTypes.Bool +- uid: wan24.StreamSerializerExtensions.ObjectTypes.Break + name: Break + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Break + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Break + fullName: wan24.StreamSerializerExtensions.ObjectTypes.Break + nameWithType: ObjectTypes.Break - uid: wan24.StreamSerializerExtensions.ObjectTypes.Byte name: Byte href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Byte @@ -1927,6 +3181,24 @@ references: commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Bytes fullName: wan24.StreamSerializerExtensions.ObjectTypes.Bytes nameWithType: ObjectTypes.Bytes +- uid: wan24.StreamSerializerExtensions.ObjectTypes.Cached + name: Cached + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Cached + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Cached + fullName: wan24.StreamSerializerExtensions.ObjectTypes.Cached + nameWithType: ObjectTypes.Cached +- uid: wan24.StreamSerializerExtensions.ObjectTypes.CachedSerializable + name: CachedSerializable + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_CachedSerializable + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.CachedSerializable + fullName: wan24.StreamSerializerExtensions.ObjectTypes.CachedSerializable + nameWithType: ObjectTypes.CachedSerializable +- uid: wan24.StreamSerializerExtensions.ObjectTypes.ClrType + name: ClrType + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_ClrType + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.ClrType + fullName: wan24.StreamSerializerExtensions.ObjectTypes.ClrType + nameWithType: ObjectTypes.ClrType - uid: wan24.StreamSerializerExtensions.ObjectTypes.Decimal name: Decimal href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Decimal @@ -1951,6 +3223,12 @@ references: commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Empty fullName: wan24.StreamSerializerExtensions.ObjectTypes.Empty nameWithType: ObjectTypes.Empty +- uid: wan24.StreamSerializerExtensions.ObjectTypes.False + name: "False" + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_False + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.False + fullName: wan24.StreamSerializerExtensions.ObjectTypes.False + nameWithType: ObjectTypes.False - uid: wan24.StreamSerializerExtensions.ObjectTypes.FLAGS name: FLAGS href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_FLAGS @@ -1963,12 +3241,24 @@ references: commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Float fullName: wan24.StreamSerializerExtensions.ObjectTypes.Float nameWithType: ObjectTypes.Float +- uid: wan24.StreamSerializerExtensions.ObjectTypes.Generic + name: Generic + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Generic + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Generic + fullName: wan24.StreamSerializerExtensions.ObjectTypes.Generic + nameWithType: ObjectTypes.Generic - uid: wan24.StreamSerializerExtensions.ObjectTypes.Int name: Int href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Int commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Int fullName: wan24.StreamSerializerExtensions.ObjectTypes.Int nameWithType: ObjectTypes.Int +- uid: wan24.StreamSerializerExtensions.ObjectTypes.LastItemType + name: LastItemType + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_LastItemType + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.LastItemType + fullName: wan24.StreamSerializerExtensions.ObjectTypes.LastItemType + nameWithType: ObjectTypes.LastItemType - uid: wan24.StreamSerializerExtensions.ObjectTypes.List name: List href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_List @@ -1981,6 +3271,12 @@ references: commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Long fullName: wan24.StreamSerializerExtensions.ObjectTypes.Long nameWithType: ObjectTypes.Long +- uid: wan24.StreamSerializerExtensions.ObjectTypes.NoRank + name: NoRank + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_NoRank + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.NoRank + fullName: wan24.StreamSerializerExtensions.ObjectTypes.NoRank + nameWithType: ObjectTypes.NoRank - uid: wan24.StreamSerializerExtensions.ObjectTypes.Null name: "Null" href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Null @@ -2017,18 +3313,993 @@ references: commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.String fullName: wan24.StreamSerializerExtensions.ObjectTypes.String nameWithType: ObjectTypes.String +- uid: wan24.StreamSerializerExtensions.ObjectTypes.String16 + name: String16 + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_String16 + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.String16 + fullName: wan24.StreamSerializerExtensions.ObjectTypes.String16 + nameWithType: ObjectTypes.String16 +- uid: wan24.StreamSerializerExtensions.ObjectTypes.String32 + name: String32 + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_String32 + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.String32 + fullName: wan24.StreamSerializerExtensions.ObjectTypes.String32 + nameWithType: ObjectTypes.String32 - uid: wan24.StreamSerializerExtensions.ObjectTypes.Struct name: Struct href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Struct commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Struct fullName: wan24.StreamSerializerExtensions.ObjectTypes.Struct nameWithType: ObjectTypes.Struct +- uid: wan24.StreamSerializerExtensions.ObjectTypes.True + name: "True" + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_True + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.True + fullName: wan24.StreamSerializerExtensions.ObjectTypes.True + nameWithType: ObjectTypes.True - uid: wan24.StreamSerializerExtensions.ObjectTypes.Unsigned name: Unsigned href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Unsigned commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Unsigned fullName: wan24.StreamSerializerExtensions.ObjectTypes.Unsigned nameWithType: ObjectTypes.Unsigned +- uid: wan24.StreamSerializerExtensions.ObjectTypes.Zero + name: Zero + href: api/wan24.StreamSerializerExtensions.ObjectTypes.html#wan24_StreamSerializerExtensions_ObjectTypes_Zero + commentId: F:wan24.StreamSerializerExtensions.ObjectTypes.Zero + fullName: wan24.StreamSerializerExtensions.ObjectTypes.Zero + nameWithType: ObjectTypes.Zero +- uid: wan24.StreamSerializerExtensions.SequenceTypes + name: SequenceTypes + href: api/wan24.StreamSerializerExtensions.SequenceTypes.html + commentId: T:wan24.StreamSerializerExtensions.SequenceTypes + fullName: wan24.StreamSerializerExtensions.SequenceTypes + nameWithType: SequenceTypes +- uid: wan24.StreamSerializerExtensions.SequenceTypes.ALL_FLAGS + name: ALL_FLAGS + href: api/wan24.StreamSerializerExtensions.SequenceTypes.html#wan24_StreamSerializerExtensions_SequenceTypes_ALL_FLAGS + commentId: F:wan24.StreamSerializerExtensions.SequenceTypes.ALL_FLAGS + fullName: wan24.StreamSerializerExtensions.SequenceTypes.ALL_FLAGS + nameWithType: SequenceTypes.ALL_FLAGS +- uid: wan24.StreamSerializerExtensions.SequenceTypes.ALL_VALUES + name: ALL_VALUES + href: api/wan24.StreamSerializerExtensions.SequenceTypes.html#wan24_StreamSerializerExtensions_SequenceTypes_ALL_VALUES + commentId: F:wan24.StreamSerializerExtensions.SequenceTypes.ALL_VALUES + fullName: wan24.StreamSerializerExtensions.SequenceTypes.ALL_VALUES + nameWithType: SequenceTypes.ALL_VALUES +- uid: wan24.StreamSerializerExtensions.SequenceTypes.Cached + name: Cached + href: api/wan24.StreamSerializerExtensions.SequenceTypes.html#wan24_StreamSerializerExtensions_SequenceTypes_Cached + commentId: F:wan24.StreamSerializerExtensions.SequenceTypes.Cached + fullName: wan24.StreamSerializerExtensions.SequenceTypes.Cached + nameWithType: SequenceTypes.Cached +- uid: wan24.StreamSerializerExtensions.SequenceTypes.NotCached + name: NotCached + href: api/wan24.StreamSerializerExtensions.SequenceTypes.html#wan24_StreamSerializerExtensions_SequenceTypes_NotCached + commentId: F:wan24.StreamSerializerExtensions.SequenceTypes.NotCached + fullName: wan24.StreamSerializerExtensions.SequenceTypes.NotCached + nameWithType: SequenceTypes.NotCached +- uid: wan24.StreamSerializerExtensions.SequenceTypes.Null + name: "Null" + href: api/wan24.StreamSerializerExtensions.SequenceTypes.html#wan24_StreamSerializerExtensions_SequenceTypes_Null + commentId: F:wan24.StreamSerializerExtensions.SequenceTypes.Null + fullName: wan24.StreamSerializerExtensions.SequenceTypes.Null + nameWithType: SequenceTypes.Null +- uid: wan24.StreamSerializerExtensions.SequenceTypes.SmallIndex + name: SmallIndex + href: api/wan24.StreamSerializerExtensions.SequenceTypes.html#wan24_StreamSerializerExtensions_SequenceTypes_SmallIndex + commentId: F:wan24.StreamSerializerExtensions.SequenceTypes.SmallIndex + fullName: wan24.StreamSerializerExtensions.SequenceTypes.SmallIndex + nameWithType: SequenceTypes.SmallIndex +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo + name: SerializedTypeInfo + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html + commentId: T:wan24.StreamSerializerExtensions.SerializedTypeInfo + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo + nameWithType: SerializedTypeInfo +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor + name: SerializedTypeInfo() + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo__ctor + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializedTypeInfo() + nameWithType: SerializedTypeInfo.SerializedTypeInfo() +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor(Type) + name: SerializedTypeInfo(Type) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo__ctor_Type_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor(Type) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializedTypeInfo(Type) + nameWithType: SerializedTypeInfo.SerializedTypeInfo(Type) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor(wan24.StreamSerializerExtensions.ObjectTypes) + name: SerializedTypeInfo(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo__ctor_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializedTypeInfo(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializedTypeInfo.SerializedTypeInfo(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor* + name: SerializedTypeInfo + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo__ctor_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.#ctor + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializedTypeInfo + nameWithType: SerializedTypeInfo.SerializedTypeInfo +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ArrayRank + name: ArrayRank + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ArrayRank + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.ArrayRank + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ArrayRank + nameWithType: SerializedTypeInfo.ArrayRank +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ArrayRank* + name: ArrayRank + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ArrayRank_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.ArrayRank + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ArrayRank + nameWithType: SerializedTypeInfo.ArrayRank +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: SerializedTypeInfo.Deserialize(IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.Deserialize* + name: Deserialize + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_Deserialize_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.Deserialize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Deserialize + nameWithType: SerializedTypeInfo.Deserialize +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: SerializedTypeInfo.DeserializeAsync(IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.DeserializeAsync* + name: DeserializeAsync + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_DeserializeAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.DeserializeAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.DeserializeAsync + nameWithType: SerializedTypeInfo.DeserializeAsync +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ElementType + name: ElementType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ElementType + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.ElementType + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ElementType + nameWithType: SerializedTypeInfo.ElementType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ElementType* + name: ElementType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ElementType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.ElementType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ElementType + nameWithType: SerializedTypeInfo.ElementType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.From(Type) + name: From(Type) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_From_Type_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.From(Type) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.From(Type) + nameWithType: SerializedTypeInfo.From(Type) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.From(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes) + name: From(IDeserializationContext, Int32, ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_From_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.From(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.From(wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializedTypeInfo.From(IDeserializationContext, Int32, ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.From* + name: From + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_From_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.From + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.From + nameWithType: SerializedTypeInfo.From +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.FromAsync(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes) + name: FromAsync(IDeserializationContext, Int32, ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_FromAsync_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.FromAsync(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.FromAsync(wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializedTypeInfo.FromAsync(IDeserializationContext, Int32, ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.FromAsync* + name: FromAsync + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_FromAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.FromAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.FromAsync + nameWithType: SerializedTypeInfo.FromAsync +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameterCount + name: GenericParameterCount + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_GenericParameterCount + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameterCount + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameterCount + nameWithType: SerializedTypeInfo.GenericParameterCount +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameterCount* + name: GenericParameterCount + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_GenericParameterCount_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameterCount + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameterCount + nameWithType: SerializedTypeInfo.GenericParameterCount +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameters + name: GenericParameters + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_GenericParameters + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameters + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameters + nameWithType: SerializedTypeInfo.GenericParameters +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameters* + name: GenericParameters + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_GenericParameters_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameters + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.GenericParameters + nameWithType: SerializedTypeInfo.GenericParameters +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsBasicType + name: IsBasicType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsBasicType + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsBasicType + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsBasicType + nameWithType: SerializedTypeInfo.IsBasicType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsBasicType* + name: IsBasicType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsBasicType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsBasicType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsBasicType + nameWithType: SerializedTypeInfo.IsBasicType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsGenericTypeDefinition + name: IsGenericTypeDefinition + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsGenericTypeDefinition + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsGenericTypeDefinition + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsGenericTypeDefinition + nameWithType: SerializedTypeInfo.IsGenericTypeDefinition +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsGenericTypeDefinition* + name: IsGenericTypeDefinition + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsGenericTypeDefinition_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsGenericTypeDefinition + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsGenericTypeDefinition + nameWithType: SerializedTypeInfo.IsGenericTypeDefinition +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsKnown + name: IsKnown + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsKnown + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsKnown + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsKnown + nameWithType: SerializedTypeInfo.IsKnown +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsKnown* + name: IsKnown + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsKnown_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsKnown + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsKnown + nameWithType: SerializedTypeInfo.IsKnown +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsSerializable + name: IsSerializable + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsSerializable + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsSerializable + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsSerializable + nameWithType: SerializedTypeInfo.IsSerializable +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsSerializable* + name: IsSerializable + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_IsSerializable_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.IsSerializable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.IsSerializable + nameWithType: SerializedTypeInfo.IsSerializable +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.Name + name: Name + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_Name + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.Name + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Name + nameWithType: SerializedTypeInfo.Name +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.Name* + name: Name + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_Name_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.Name + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Name + nameWithType: SerializedTypeInfo.Name +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ObjectType + name: ObjectType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ObjectType + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.ObjectType + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ObjectType + nameWithType: SerializedTypeInfo.ObjectType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ObjectType* + name: ObjectType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.ObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ObjectType + nameWithType: SerializedTypeInfo.ObjectType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(System.Byte[])~wan24.StreamSerializerExtensions.SerializedTypeInfo + name: Implicit(Byte[] to SerializedTypeInfo) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_op_Implicit_System_Byte____wan24_StreamSerializerExtensions_SerializedTypeInfo + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(System.Byte[])~wan24.StreamSerializerExtensions.SerializedTypeInfo + name.vb: Widening(Byte() to SerializedTypeInfo) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Implicit(System.Byte[] to wan24.StreamSerializerExtensions.SerializedTypeInfo) + fullName.vb: wan24.StreamSerializerExtensions.SerializedTypeInfo.Widening(System.Byte() to wan24.StreamSerializerExtensions.SerializedTypeInfo) + nameWithType: SerializedTypeInfo.Implicit(Byte[] to SerializedTypeInfo) + nameWithType.vb: SerializedTypeInfo.Widening(Byte() to SerializedTypeInfo) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(Type)~wan24.StreamSerializerExtensions.SerializedTypeInfo + name: Implicit(Type to SerializedTypeInfo) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_op_Implicit_Type__wan24_StreamSerializerExtensions_SerializedTypeInfo + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(Type)~wan24.StreamSerializerExtensions.SerializedTypeInfo + name.vb: Widening(Type to SerializedTypeInfo) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Implicit(Type to wan24.StreamSerializerExtensions.SerializedTypeInfo) + fullName.vb: wan24.StreamSerializerExtensions.SerializedTypeInfo.Widening(Type to wan24.StreamSerializerExtensions.SerializedTypeInfo) + nameWithType: SerializedTypeInfo.Implicit(Type to SerializedTypeInfo) + nameWithType.vb: SerializedTypeInfo.Widening(Type to SerializedTypeInfo) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo)~System.Boolean + name: Implicit(SerializedTypeInfo to Boolean) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_op_Implicit_wan24_StreamSerializerExtensions_SerializedTypeInfo__System_Boolean + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo)~System.Boolean + name.vb: Widening(SerializedTypeInfo to Boolean) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo to System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializedTypeInfo.Widening(wan24.StreamSerializerExtensions.SerializedTypeInfo to System.Boolean) + nameWithType: SerializedTypeInfo.Implicit(SerializedTypeInfo to Boolean) + nameWithType.vb: SerializedTypeInfo.Widening(SerializedTypeInfo to Boolean) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo)~System.Byte[] + name: Implicit(SerializedTypeInfo to Byte[]) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_op_Implicit_wan24_StreamSerializerExtensions_SerializedTypeInfo__System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo)~System.Byte[] + name.vb: Widening(SerializedTypeInfo to Byte()) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo to System.Byte[]) + fullName.vb: wan24.StreamSerializerExtensions.SerializedTypeInfo.Widening(wan24.StreamSerializerExtensions.SerializedTypeInfo to System.Byte()) + nameWithType: SerializedTypeInfo.Implicit(SerializedTypeInfo to Byte[]) + nameWithType.vb: SerializedTypeInfo.Widening(SerializedTypeInfo to Byte()) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo)~Type + name: Implicit(SerializedTypeInfo to Type) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_op_Implicit_wan24_StreamSerializerExtensions_SerializedTypeInfo__Type + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo)~Type + name.vb: Widening(SerializedTypeInfo to Type) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Implicit(wan24.StreamSerializerExtensions.SerializedTypeInfo to Type) + fullName.vb: wan24.StreamSerializerExtensions.SerializedTypeInfo.Widening(wan24.StreamSerializerExtensions.SerializedTypeInfo to Type) + nameWithType: SerializedTypeInfo.Implicit(SerializedTypeInfo to Type) + nameWithType.vb: SerializedTypeInfo.Widening(SerializedTypeInfo to Type) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit* + name: Implicit + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_op_Implicit_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.op_Implicit + isSpec: "True" + name.vb: Widening + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Implicit + fullName.vb: wan24.StreamSerializerExtensions.SerializedTypeInfo.Widening + nameWithType: SerializedTypeInfo.Implicit + nameWithType.vb: SerializedTypeInfo.Widening +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: SerializedTypeInfo.Serialize(ISerializationContext) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.Serialize* + name: Serialize + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_Serialize_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.Serialize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.Serialize + nameWithType: SerializedTypeInfo.Serialize +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: SerializedTypeInfo.SerializeAsync(ISerializationContext) +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializeAsync* + name: SerializeAsync + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_SerializeAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializeAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.SerializeAsync + nameWithType: SerializedTypeInfo.SerializeAsync +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToClrType + name: ToClrType() + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ToClrType + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.ToClrType + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToClrType() + nameWithType: SerializedTypeInfo.ToClrType() +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToClrType* + name: ToClrType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ToClrType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.ToClrType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToClrType + nameWithType: SerializedTypeInfo.ToClrType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToSerializableType + name: ToSerializableType() + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ToSerializableType + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.ToSerializableType + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToSerializableType() + nameWithType: SerializedTypeInfo.ToSerializableType() +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToSerializableType* + name: ToSerializableType + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ToSerializableType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.ToSerializableType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToSerializableType + nameWithType: SerializedTypeInfo.ToSerializableType +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToString + name: ToString() + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ToString + commentId: M:wan24.StreamSerializerExtensions.SerializedTypeInfo.ToString + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToString() + nameWithType: SerializedTypeInfo.ToString() +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToString* + name: ToString + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_ToString_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.ToString + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.ToString + nameWithType: SerializedTypeInfo.ToString +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.VERSION + name: VERSION + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_VERSION + commentId: F:wan24.StreamSerializerExtensions.SerializedTypeInfo.VERSION + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.VERSION + nameWithType: SerializedTypeInfo.VERSION +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#ObjectVersion + name: IStreamSerializerVersion.ObjectVersion + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_wan24_StreamSerializerExtensions_IStreamSerializerVersion_ObjectVersion + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#ObjectVersion + name.vb: wan24.StreamSerializerExtensions.IStreamSerializerVersion.ObjectVersion + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.ObjectVersion + nameWithType: SerializedTypeInfo.IStreamSerializerVersion.ObjectVersion + nameWithType.vb: SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.ObjectVersion +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#ObjectVersion* + name: IStreamSerializerVersion.ObjectVersion + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_wan24_StreamSerializerExtensions_IStreamSerializerVersion_ObjectVersion_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#ObjectVersion + isSpec: "True" + name.vb: wan24.StreamSerializerExtensions.IStreamSerializerVersion.ObjectVersion + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.ObjectVersion + nameWithType: SerializedTypeInfo.IStreamSerializerVersion.ObjectVersion + nameWithType.vb: SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.ObjectVersion +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializedObjectVersion + name: IStreamSerializerVersion.SerializedObjectVersion + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_wan24_StreamSerializerExtensions_IStreamSerializerVersion_SerializedObjectVersion + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializedObjectVersion + name.vb: wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializedObjectVersion + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializedObjectVersion + nameWithType: SerializedTypeInfo.IStreamSerializerVersion.SerializedObjectVersion + nameWithType.vb: SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializedObjectVersion +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializedObjectVersion* + name: IStreamSerializerVersion.SerializedObjectVersion + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_wan24_StreamSerializerExtensions_IStreamSerializerVersion_SerializedObjectVersion_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializedObjectVersion + isSpec: "True" + name.vb: wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializedObjectVersion + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializedObjectVersion + nameWithType: SerializedTypeInfo.IStreamSerializerVersion.SerializedObjectVersion + nameWithType.vb: SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializedObjectVersion +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializerVersion + name: IStreamSerializerVersion.SerializerVersion + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_wan24_StreamSerializerExtensions_IStreamSerializerVersion_SerializerVersion + commentId: P:wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializerVersion + name.vb: wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializerVersion + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializerVersion + nameWithType: SerializedTypeInfo.IStreamSerializerVersion.SerializerVersion + nameWithType.vb: SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializerVersion +- uid: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializerVersion* + name: IStreamSerializerVersion.SerializerVersion + href: api/wan24.StreamSerializerExtensions.SerializedTypeInfo.html#wan24_StreamSerializerExtensions_SerializedTypeInfo_wan24_StreamSerializerExtensions_IStreamSerializerVersion_SerializerVersion_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24#StreamSerializerExtensions#IStreamSerializerVersion#SerializerVersion + isSpec: "True" + name.vb: wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializerVersion + fullName: wan24.StreamSerializerExtensions.SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializerVersion + nameWithType: SerializedTypeInfo.IStreamSerializerVersion.SerializerVersion + nameWithType.vb: SerializedTypeInfo.wan24.StreamSerializerExtensions.IStreamSerializerVersion.SerializerVersion +- uid: wan24.StreamSerializerExtensions.SerializerContext + name: SerializerContext + href: api/wan24.StreamSerializerExtensions.SerializerContext.html + commentId: T:wan24.StreamSerializerExtensions.SerializerContext + fullName: wan24.StreamSerializerExtensions.SerializerContext + nameWithType: SerializerContext +- uid: wan24.StreamSerializerExtensions.SerializerContext.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) + name: SerializerContext(Stream, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext__ctor_Stream_System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.#ctor(Stream,System.Nullable{System.Int32},CancellationToken) + name.vb: SerializerContext(Stream, Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerContext.SerializerContext(Stream, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.SerializerContext(Stream, System.Nullable(Of System.Int32), CancellationToken) + nameWithType: SerializerContext.SerializerContext(Stream, Nullable, CancellationToken) + nameWithType.vb: SerializerContext.SerializerContext(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerContext.#ctor* + name: SerializerContext + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext__ctor_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.#ctor + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.SerializerContext + nameWithType: SerializerContext.SerializerContext +- uid: wan24.StreamSerializerExtensions.SerializerContext._Cache + name: _Cache + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext__Cache + commentId: F:wan24.StreamSerializerExtensions.SerializerContext._Cache + fullName: wan24.StreamSerializerExtensions.SerializerContext._Cache + nameWithType: SerializerContext._Cache +- uid: wan24.StreamSerializerExtensions.SerializerContext.Cache + name: Cache + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_Cache + commentId: P:wan24.StreamSerializerExtensions.SerializerContext.Cache + fullName: wan24.StreamSerializerExtensions.SerializerContext.Cache + nameWithType: SerializerContext.Cache +- uid: wan24.StreamSerializerExtensions.SerializerContext.Cache* + name: Cache + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_Cache_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.Cache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.Cache + nameWithType: SerializerContext.Cache +- uid: wan24.StreamSerializerExtensions.SerializerContext.CacheSize + name: CacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_CacheSize + commentId: P:wan24.StreamSerializerExtensions.SerializerContext.CacheSize + fullName: wan24.StreamSerializerExtensions.SerializerContext.CacheSize + nameWithType: SerializerContext.CacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContext.CacheSize* + name: CacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_CacheSize_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.CacheSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.CacheSize + nameWithType: SerializerContext.CacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContext.Dispose(System.Boolean) + name: Dispose(Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_Dispose_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.Dispose(System.Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerContext.Dispose(System.Boolean) + nameWithType: SerializerContext.Dispose(Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerContext.Dispose* + name: Dispose + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_Dispose_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.Dispose + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.Dispose + nameWithType: SerializerContext.Dispose +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached* + name: TryWriteCached + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCached_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached + nameWithType: SerializerContext.TryWriteCached +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached``1(``0) + name: TryWriteCached(T) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCached__1___0_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached``1(``0) + name.vb: TryWriteCached(Of T)(T) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached(T) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached(Of T)(T) + nameWithType: SerializerContext.TryWriteCached(T) + nameWithType.vb: SerializerContext.TryWriteCached(Of T)(T) +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name: TryWriteCached(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCached__1___0_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name.vb: TryWriteCached(Of T)(T, Nullable(Of ObjectTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached(Of T)(T, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean) + nameWithType: SerializerContext.TryWriteCached(T, Nullable, Boolean) + nameWithType.vb: SerializerContext.TryWriteCached(Of T)(T, Nullable(Of ObjectTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name: TryWriteCached(Nullable, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCached__1_System_Nullable___0__System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name.vb: TryWriteCached(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached(System.Nullable, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCached(Of T)(System.Nullable(Of T), System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes), System.Boolean) + nameWithType: SerializerContext.TryWriteCached(Nullable, Nullable, Boolean) + nameWithType.vb: SerializerContext.TryWriteCached(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync* + name: TryWriteCachedAsync + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync + nameWithType: SerializerContext.TryWriteCachedAsync +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync``1(``0) + name: TryWriteCachedAsync(T) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedAsync__1___0_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync``1(``0) + name.vb: TryWriteCachedAsync(Of T)(T) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync(T) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync(Of T)(T) + nameWithType: SerializerContext.TryWriteCachedAsync(T) + nameWithType.vb: SerializerContext.TryWriteCachedAsync(Of T)(T) +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name: TryWriteCachedAsync(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedAsync__1___0_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync``1(``0,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean) + name.vb: TryWriteCachedAsync(Of T)(T, Nullable(Of ObjectTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync(Of T)(T, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean) + nameWithType: SerializerContext.TryWriteCachedAsync(T, Nullable, Boolean) + nameWithType.vb: SerializerContext.TryWriteCachedAsync(Of T)(T, Nullable(Of ObjectTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name: TryWriteCachedAsync(Nullable, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedAsync__1_System_Nullable___0__System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync``1(System.Nullable{``0},System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name.vb: TryWriteCachedAsync(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync(System.Nullable, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedAsync(Of T)(System.Nullable(Of T), System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes), System.Boolean) + nameWithType: SerializerContext.TryWriteCachedAsync(Nullable, Nullable, Boolean) + nameWithType.vb: SerializerContext.TryWriteCachedAsync(Of T)(Nullable(Of T), Nullable(Of NumberTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountable* + name: TryWriteCachedCountable + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedCountable_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountable + nameWithType: SerializerContext.TryWriteCachedCountable +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountable``1(``0,System.Nullable{System.Int64},System.Boolean) + name: TryWriteCachedCountable(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedCountable__1___0_System_Nullable_System_Int64__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountable``1(``0,System.Nullable{System.Int64},System.Boolean) + name.vb: TryWriteCachedCountable(Of T)(T, Nullable(Of Int64), Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountable(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountable(Of T)(T, System.Nullable(Of System.Int64), System.Boolean) + nameWithType: SerializerContext.TryWriteCachedCountable(T, Nullable, Boolean) + nameWithType.vb: SerializerContext.TryWriteCachedCountable(Of T)(T, Nullable(Of Int64), Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountableAsync* + name: TryWriteCachedCountableAsync + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedCountableAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountableAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountableAsync + nameWithType: SerializerContext.TryWriteCachedCountableAsync +- uid: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountableAsync``1(``0,System.Nullable{System.Int64},System.Boolean) + name: TryWriteCachedCountableAsync(T, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_TryWriteCachedCountableAsync__1___0_System_Nullable_System_Int64__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountableAsync``1(``0,System.Nullable{System.Int64},System.Boolean) + name.vb: TryWriteCachedCountableAsync(Of T)(T, Nullable(Of Int64), Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountableAsync(T, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContext.TryWriteCachedCountableAsync(Of T)(T, System.Nullable(Of System.Int64), System.Boolean) + nameWithType: SerializerContext.TryWriteCachedCountableAsync(T, Nullable, Boolean) + nameWithType.vb: SerializerContext.TryWriteCachedCountableAsync(Of T)(T, Nullable(Of Int64), Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerContext.WriteCached(System.Int32) + name: WriteCached(Int32) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_WriteCached_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.WriteCached(System.Int32) + fullName: wan24.StreamSerializerExtensions.SerializerContext.WriteCached(System.Int32) + nameWithType: SerializerContext.WriteCached(Int32) +- uid: wan24.StreamSerializerExtensions.SerializerContext.WriteCached* + name: WriteCached + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_WriteCached_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.WriteCached + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.WriteCached + nameWithType: SerializerContext.WriteCached +- uid: wan24.StreamSerializerExtensions.SerializerContext.WriteCachedAsync(System.Int32) + name: WriteCachedAsync(Int32) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_WriteCachedAsync_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.WriteCachedAsync(System.Int32) + fullName: wan24.StreamSerializerExtensions.SerializerContext.WriteCachedAsync(System.Int32) + nameWithType: SerializerContext.WriteCachedAsync(Int32) +- uid: wan24.StreamSerializerExtensions.SerializerContext.WriteCachedAsync* + name: WriteCachedAsync + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_WriteCachedAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.WriteCachedAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.WriteCachedAsync + nameWithType: SerializerContext.WriteCachedAsync +- uid: wan24.StreamSerializerExtensions.SerializerContext.WriteNotCached(System.Int32) + name: WriteNotCached(Int32) + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_WriteNotCached_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContext.WriteNotCached(System.Int32) + fullName: wan24.StreamSerializerExtensions.SerializerContext.WriteNotCached(System.Int32) + nameWithType: SerializerContext.WriteNotCached(Int32) +- uid: wan24.StreamSerializerExtensions.SerializerContext.WriteNotCached* + name: WriteNotCached + href: api/wan24.StreamSerializerExtensions.SerializerContext.html#wan24_StreamSerializerExtensions_SerializerContext_WriteNotCached_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContext.WriteNotCached + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContext.WriteNotCached + nameWithType: SerializerContext.WriteNotCached +- uid: wan24.StreamSerializerExtensions.SerializerContextBase + name: SerializerContextBase + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html + commentId: T:wan24.StreamSerializerExtensions.SerializerContextBase + fullName: wan24.StreamSerializerExtensions.SerializerContextBase + nameWithType: SerializerContextBase +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.#ctor(Stream,System.Nullable{System.Int32},System.Nullable{System.Int32},CancellationToken) + name: SerializerContextBase(Stream, Nullable, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase__ctor_Stream_System_Nullable_System_Int32__System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.SerializerContextBase.#ctor(Stream,System.Nullable{System.Int32},System.Nullable{System.Int32},CancellationToken) + name.vb: SerializerContextBase(Stream, Nullable(Of Int32), Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.SerializerContextBase(Stream, System.Nullable, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.SerializerContextBase.SerializerContextBase(Stream, System.Nullable(Of System.Int32), System.Nullable(Of System.Int32), CancellationToken) + nameWithType: SerializerContextBase.SerializerContextBase(Stream, Nullable, Nullable, CancellationToken) + nameWithType.vb: SerializerContextBase.SerializerContextBase(Stream, Nullable(Of Int32), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.#ctor* + name: SerializerContextBase + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase__ctor_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.#ctor + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.SerializerContextBase + nameWithType: SerializerContextBase.SerializerContextBase +- uid: wan24.StreamSerializerExtensions.SerializerContextBase._CacheSize + name: _CacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase__CacheSize + commentId: F:wan24.StreamSerializerExtensions.SerializerContextBase._CacheSize + fullName: wan24.StreamSerializerExtensions.SerializerContextBase._CacheSize + nameWithType: SerializerContextBase._CacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase._RecursionLevel + name: _RecursionLevel + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase__RecursionLevel + commentId: F:wan24.StreamSerializerExtensions.SerializerContextBase._RecursionLevel + fullName: wan24.StreamSerializerExtensions.SerializerContextBase._RecursionLevel + nameWithType: SerializerContextBase._RecursionLevel +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.BufferPool + name: BufferPool + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_BufferPool + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.BufferPool + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.BufferPool + nameWithType: SerializerContextBase.BufferPool +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.BufferPool* + name: BufferPool + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_BufferPool_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.BufferPool + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.BufferPool + nameWithType: SerializerContextBase.BufferPool +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CacheIndexSize + name: CacheIndexSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CacheIndexSize + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.CacheIndexSize + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CacheIndexSize + nameWithType: SerializerContextBase.CacheIndexSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CacheIndexSize* + name: CacheIndexSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CacheIndexSize_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.CacheIndexSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CacheIndexSize + nameWithType: SerializerContextBase.CacheIndexSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CacheOffset + name: CacheOffset + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CacheOffset + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.CacheOffset + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CacheOffset + nameWithType: SerializerContextBase.CacheOffset +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CacheOffset* + name: CacheOffset + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CacheOffset_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.CacheOffset + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CacheOffset + nameWithType: SerializerContextBase.CacheOffset +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CacheSize + name: CacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CacheSize + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.CacheSize + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CacheSize + nameWithType: SerializerContextBase.CacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CacheSize* + name: CacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CacheSize_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.CacheSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CacheSize + nameWithType: SerializerContextBase.CacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Cancellation + name: Cancellation + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Cancellation + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.Cancellation + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Cancellation + nameWithType: SerializerContextBase.Cancellation +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Cancellation* + name: Cancellation + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Cancellation_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.Cancellation + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Cancellation + nameWithType: SerializerContextBase.Cancellation +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CustomVersion + name: CustomVersion + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CustomVersion + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.CustomVersion + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CustomVersion + nameWithType: SerializerContextBase.CustomVersion +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.CustomVersion* + name: CustomVersion + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_CustomVersion_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.CustomVersion + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.CustomVersion + nameWithType: SerializerContextBase.CustomVersion +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DefaultCacheSize + name: DefaultCacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DefaultCacheSize + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.DefaultCacheSize + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DefaultCacheSize + nameWithType: SerializerContextBase.DefaultCacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DefaultCacheSize* + name: DefaultCacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DefaultCacheSize_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.DefaultCacheSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DefaultCacheSize + nameWithType: SerializerContextBase.DefaultCacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DisableCache + name: DisableCache() + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DisableCache + commentId: M:wan24.StreamSerializerExtensions.SerializerContextBase.DisableCache + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DisableCache() + nameWithType: SerializerContextBase.DisableCache() +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DisableCache* + name: DisableCache + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DisableCache_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.DisableCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DisableCache + nameWithType: SerializerContextBase.DisableCache +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStream + name: DisposeStream() + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DisposeStream + commentId: M:wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStream + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStream() + nameWithType: SerializerContextBase.DisposeStream() +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStream* + name: DisposeStream + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DisposeStream_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStream + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStream + nameWithType: SerializerContextBase.DisposeStream +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStreamAsync + name: DisposeStreamAsync() + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DisposeStreamAsync + commentId: M:wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStreamAsync + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStreamAsync() + nameWithType: SerializerContextBase.DisposeStreamAsync() +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStreamAsync* + name: DisposeStreamAsync + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_DisposeStreamAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStreamAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.DisposeStreamAsync + nameWithType: SerializerContextBase.DisposeStreamAsync +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.EnableCache + name: EnableCache() + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_EnableCache + commentId: M:wan24.StreamSerializerExtensions.SerializerContextBase.EnableCache + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.EnableCache() + nameWithType: SerializerContextBase.EnableCache() +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.EnableCache* + name: EnableCache + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_EnableCache_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.EnableCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.EnableCache + nameWithType: SerializerContextBase.EnableCache +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.IsCacheEnabled + name: IsCacheEnabled + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_IsCacheEnabled + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.IsCacheEnabled + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.IsCacheEnabled + nameWithType: SerializerContextBase.IsCacheEnabled +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.IsCacheEnabled* + name: IsCacheEnabled + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_IsCacheEnabled_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.IsCacheEnabled + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.IsCacheEnabled + nameWithType: SerializerContextBase.IsCacheEnabled +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.LastNumberType + name: LastNumberType + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_LastNumberType + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.LastNumberType + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.LastNumberType + nameWithType: SerializerContextBase.LastNumberType +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.LastNumberType* + name: LastNumberType + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_LastNumberType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.LastNumberType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.LastNumberType + nameWithType: SerializerContextBase.LastNumberType +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.LastObjectType + name: LastObjectType + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_LastObjectType + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.LastObjectType + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.LastObjectType + nameWithType: SerializerContextBase.LastObjectType +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.LastObjectType* + name: LastObjectType + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_LastObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.LastObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.LastObjectType + nameWithType: SerializerContextBase.LastObjectType +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.MaxRecursion + name: MaxRecursion + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_MaxRecursion + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.MaxRecursion + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.MaxRecursion + nameWithType: SerializerContextBase.MaxRecursion +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.MaxRecursion* + name: MaxRecursion + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_MaxRecursion_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.MaxRecursion + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.MaxRecursion + nameWithType: SerializerContextBase.MaxRecursion +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Nullable + name: Nullable + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Nullable + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.Nullable + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Nullable + nameWithType: SerializerContextBase.Nullable +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Nullable* + name: Nullable + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Nullable_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.Nullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Nullable + nameWithType: SerializerContextBase.Nullable +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.RealCacheSize + name: RealCacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_RealCacheSize + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.RealCacheSize + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.RealCacheSize + nameWithType: SerializerContextBase.RealCacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.RealCacheSize* + name: RealCacheSize + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_RealCacheSize_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.RealCacheSize + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.RealCacheSize + nameWithType: SerializerContextBase.RealCacheSize +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.RecursionLevel + name: RecursionLevel + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_RecursionLevel + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.RecursionLevel + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.RecursionLevel + nameWithType: SerializerContextBase.RecursionLevel +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.RecursionLevel* + name: RecursionLevel + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_RecursionLevel_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.RecursionLevel + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.RecursionLevel + nameWithType: SerializerContextBase.RecursionLevel +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.SerializerVersion + name: SerializerVersion + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_SerializerVersion + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.SerializerVersion + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.SerializerVersion + nameWithType: SerializerContextBase.SerializerVersion +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.SerializerVersion* + name: SerializerVersion + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_SerializerVersion_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.SerializerVersion + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.SerializerVersion + nameWithType: SerializerContextBase.SerializerVersion +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Stream + name: Stream + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Stream + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.Stream + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Stream + nameWithType: SerializerContextBase.Stream +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Stream* + name: Stream + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Stream_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.Stream + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Stream + nameWithType: SerializerContextBase.Stream +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Version + name: Version + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Version + commentId: P:wan24.StreamSerializerExtensions.SerializerContextBase.Version + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Version + nameWithType: SerializerContextBase.Version +- uid: wan24.StreamSerializerExtensions.SerializerContextBase.Version* + name: Version + href: api/wan24.StreamSerializerExtensions.SerializerContextBase.html#wan24_StreamSerializerExtensions_SerializerContextBase_Version_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerContextBase.Version + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerContextBase.Version + nameWithType: SerializerContextBase.Version - uid: wan24.StreamSerializerExtensions.SerializerEventArgs`1 name: SerializerEventArgs href: api/wan24.StreamSerializerExtensions.SerializerEventArgs-1.html @@ -2186,6 +4457,31 @@ references: commentId: T:wan24.StreamSerializerExtensions.SerializerHelper fullName: wan24.StreamSerializerExtensions.SerializerHelper nameWithType: SerializerHelper +- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes,PropertyInfoExt) + name: EnsureCorrectObjectType(ObjectTypes, PropertyInfoExt) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureCorrectObjectType_wan24_StreamSerializerExtensions_ObjectTypes_PropertyInfoExt_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes,PropertyInfoExt) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes, PropertyInfoExt) + nameWithType: SerializerHelper.EnsureCorrectObjectType(ObjectTypes, PropertyInfoExt) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.ISerializerOptions) + name: EnsureCorrectObjectType(ObjectTypes, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureCorrectObjectType_wan24_StreamSerializerExtensions_ObjectTypes_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: SerializerHelper.EnsureCorrectObjectType(ObjectTypes, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name: EnsureCorrectObjectType(ObjectTypes, StreamSerializerAttribute) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureCorrectObjectType_wan24_StreamSerializerExtensions_ObjectTypes_wan24_StreamSerializerExtensions_StreamSerializerAttribute_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.StreamSerializerAttribute) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType(wan24.StreamSerializerExtensions.ObjectTypes, wan24.StreamSerializerExtensions.StreamSerializerAttribute) + nameWithType: SerializerHelper.EnsureCorrectObjectType(ObjectTypes, StreamSerializerAttribute) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType* + name: EnsureCorrectObjectType + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureCorrectObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureCorrectObjectType + nameWithType: SerializerHelper.EnsureCorrectObjectType - uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull* name: EnsureNotNull href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureNotNull_ @@ -2193,15 +4489,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull nameWithType: SerializerHelper.EnsureNotNull -- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull``1(``0) - name: EnsureNotNull(T) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureNotNull__1___0_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull``1(``0) - name.vb: EnsureNotNull(Of T)(T) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(T) - fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(Of T)(T) - nameWithType: SerializerHelper.EnsureNotNull(T) - nameWithType.vb: SerializerHelper.EnsureNotNull(Of T)(T) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull``1(``0,System.String) + name: EnsureNotNull(T, String) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureNotNull__1___0_System_String_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull``1(``0,System.String) + name.vb: EnsureNotNull(Of T)(T, String) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(T, System.String) + fullName.vb: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull(Of T)(T, System.String) + nameWithType: SerializerHelper.EnsureNotNull(T, String) + nameWithType.vb: SerializerHelper.EnsureNotNull(Of T)(T, String) - uid: wan24.StreamSerializerExtensions.SerializerHelper.EnsureValidLength(System.Int32,System.Int32,System.Int32) name: EnsureValidLength(Int32, Int32, Int32) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_EnsureValidLength_System_Int32_System_Int32_System_Int32_ @@ -2221,12 +4517,77 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureValidLength nameWithType: SerializerHelper.EnsureValidLength -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - name: GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) - nameWithType: SerializerHelper.GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.FindDeserializer(Type) + name: FindDeserializer(Type) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_FindDeserializer_Type_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.FindDeserializer(Type) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.FindDeserializer(Type) + nameWithType: SerializerHelper.FindDeserializer(Type) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.FindDeserializer* + name: FindDeserializer + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_FindDeserializer_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.FindDeserializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.FindDeserializer + nameWithType: SerializerHelper.FindDeserializer +- uid: wan24.StreamSerializerExtensions.SerializerHelper.FindSerializer(Type) + name: FindSerializer(Type) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_FindSerializer_Type_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.FindSerializer(Type) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.FindSerializer(Type) + nameWithType: SerializerHelper.FindSerializer(Type) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.FindSerializer* + name: FindSerializer + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_FindSerializer_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.FindSerializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.FindSerializer + nameWithType: SerializerHelper.FindSerializer +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetClrType(wan24.StreamSerializerExtensions.NumberTypes) + name: GetClrType(NumberTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetClrType_wan24_StreamSerializerExtensions_NumberTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetClrType(wan24.StreamSerializerExtensions.NumberTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetClrType(wan24.StreamSerializerExtensions.NumberTypes) + nameWithType: SerializerHelper.GetClrType(NumberTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetClrType* + name: GetClrType + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetClrType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.GetClrType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetClrType + nameWithType: SerializerHelper.GetClrType +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetItemDeserializerInfo(Type,wan24.StreamSerializerExtensions.ObjectTypes,System.Boolean) + name: GetItemDeserializerInfo(Type, ObjectTypes, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetItemDeserializerInfo_Type_wan24_StreamSerializerExtensions_ObjectTypes_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetItemDeserializerInfo(Type,wan24.StreamSerializerExtensions.ObjectTypes,System.Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetItemDeserializerInfo(Type, wan24.StreamSerializerExtensions.ObjectTypes, System.Boolean) + nameWithType: SerializerHelper.GetItemDeserializerInfo(Type, ObjectTypes, Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetItemDeserializerInfo* + name: GetItemDeserializerInfo + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetItemDeserializerInfo_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.GetItemDeserializerInfo + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetItemDeserializerInfo + nameWithType: SerializerHelper.GetItemDeserializerInfo +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetItemSerializerInfo(Type,wan24.StreamSerializerExtensions.ObjectTypes,System.Boolean) + name: GetItemSerializerInfo(Type, ObjectTypes, Boolean) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetItemSerializerInfo_Type_wan24_StreamSerializerExtensions_ObjectTypes_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetItemSerializerInfo(Type,wan24.StreamSerializerExtensions.ObjectTypes,System.Boolean) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetItemSerializerInfo(Type, wan24.StreamSerializerExtensions.ObjectTypes, System.Boolean) + nameWithType: SerializerHelper.GetItemSerializerInfo(Type, ObjectTypes, Boolean) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetItemSerializerInfo* + name: GetItemSerializerInfo + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetItemSerializerInfo_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.GetItemSerializerInfo + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetItemSerializerInfo + nameWithType: SerializerHelper.GetItemSerializerInfo +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt,wan24.StreamSerializerExtensions.ISerializerContext) + name: GetKeySerializerOptions(PropertyInfoExt, ISerializerContext) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_PropertyInfoExt_wan24_StreamSerializerExtensions_ISerializerContext_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt,wan24.StreamSerializerExtensions.ISerializerContext) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions(PropertyInfoExt, wan24.StreamSerializerExtensions.ISerializerContext) + nameWithType: SerializerHelper.GetKeySerializerOptions(PropertyInfoExt, ISerializerContext) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetKeySerializerOptions* name: GetKeySerializerOptions href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetKeySerializerOptions_ @@ -2279,12 +4640,25 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectSerializerInfo nameWithType: SerializerHelper.GetObjectSerializerInfo -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - name: GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) - nameWithType: SerializerHelper.GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectType(Type) + name: GetObjectType(Type) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetObjectType_Type_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetObjectType(Type) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectType(Type) + nameWithType: SerializerHelper.GetObjectType(Type) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectType* + name: GetObjectType + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetObjectType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.GetObjectType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetObjectType + nameWithType: SerializerHelper.GetObjectType +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt,wan24.StreamSerializerExtensions.ISerializerContext) + name: GetSerializerOptions(PropertyInfoExt, ISerializerContext) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_PropertyInfoExt_wan24_StreamSerializerExtensions_ISerializerContext_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt,wan24.StreamSerializerExtensions.ISerializerContext) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions(PropertyInfoExt, wan24.StreamSerializerExtensions.ISerializerContext) + nameWithType: SerializerHelper.GetSerializerOptions(PropertyInfoExt, ISerializerContext) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions* name: GetSerializerOptions href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetSerializerOptions_ @@ -2292,12 +4666,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetSerializerOptions nameWithType: SerializerHelper.GetSerializerOptions -- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - name: GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) - nameWithType: SerializerHelper.GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt,wan24.StreamSerializerExtensions.ISerializerContext) + name: GetValueSerializerOptions(PropertyInfoExt, ISerializerContext) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_PropertyInfoExt_wan24_StreamSerializerExtensions_ISerializerContext_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt,wan24.StreamSerializerExtensions.ISerializerContext) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions(PropertyInfoExt, wan24.StreamSerializerExtensions.ISerializerContext) + nameWithType: SerializerHelper.GetValueSerializerOptions(PropertyInfoExt, ISerializerContext) - uid: wan24.StreamSerializerExtensions.SerializerHelper.GetValueSerializerOptions* name: GetValueSerializerOptions href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_GetValueSerializerOptions_ @@ -2318,6 +4692,71 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.HasValueFlags nameWithType: SerializerHelper.HasValueFlags +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsArray(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsArray(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsArray_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsArray(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsArray(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsArray(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsArray* + name: IsArray + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsArray_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsArray + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsArray + nameWithType: SerializerHelper.IsArray +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsBasicTypeInfo(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsBasicTypeInfo(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsBasicTypeInfo_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsBasicTypeInfo(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsBasicTypeInfo(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsBasicTypeInfo(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsBasicTypeInfo* + name: IsBasicTypeInfo + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsBasicTypeInfo_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsBasicTypeInfo + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsBasicTypeInfo + nameWithType: SerializerHelper.IsBasicTypeInfo +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsBreak(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsBreak(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsBreak_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsBreak(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsBreak(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsBreak(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsBreak* + name: IsBreak + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsBreak_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsBreak + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsBreak + nameWithType: SerializerHelper.IsBreak +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsCached(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsCached(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsCached_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsCached(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsCached(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsCached(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsCached* + name: IsCached + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsCached_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsCached + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsCached + nameWithType: SerializerHelper.IsCached +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsCachedSerializable(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsCachedSerializable(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsCachedSerializable_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsCachedSerializable(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsCachedSerializable(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsCachedSerializable(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsCachedSerializable* + name: IsCachedSerializable + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsCachedSerializable_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsCachedSerializable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsCachedSerializable + nameWithType: SerializerHelper.IsCachedSerializable - uid: wan24.StreamSerializerExtensions.SerializerHelper.IsEmpty(wan24.StreamSerializerExtensions.ObjectTypes) name: IsEmpty(ObjectTypes) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsEmpty_wan24_StreamSerializerExtensions_ObjectTypes_ @@ -2331,6 +4770,19 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsEmpty nameWithType: SerializerHelper.IsEmpty +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsGeneric(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsGeneric(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsGeneric_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsGeneric(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsGeneric(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsGeneric(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsGeneric* + name: IsGeneric + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsGeneric_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsGeneric + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsGeneric + nameWithType: SerializerHelper.IsGeneric - uid: wan24.StreamSerializerExtensions.SerializerHelper.IsMaxValue(wan24.StreamSerializerExtensions.NumberTypes) name: IsMaxValue(NumberTypes) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsMaxValue_wan24_StreamSerializerExtensions_NumberTypes_ @@ -2357,6 +4809,19 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsMinValue nameWithType: SerializerHelper.IsMinValue +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsNotRanked(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsNotRanked(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsNotRanked_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsNotRanked(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsNotRanked(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsNotRanked(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsNotRanked* + name: IsNotRanked + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsNotRanked_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.IsNotRanked + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsNotRanked + nameWithType: SerializerHelper.IsNotRanked - uid: wan24.StreamSerializerExtensions.SerializerHelper.IsNumber(wan24.StreamSerializerExtensions.ObjectTypes) name: IsNumber(ObjectTypes) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsNumber_wan24_StreamSerializerExtensions_ObjectTypes_ @@ -2408,6 +4873,12 @@ references: commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsZero(wan24.StreamSerializerExtensions.NumberTypes) fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsZero(wan24.StreamSerializerExtensions.NumberTypes) nameWithType: SerializerHelper.IsZero(NumberTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.IsZero(wan24.StreamSerializerExtensions.ObjectTypes) + name: IsZero(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsZero_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.IsZero(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.IsZero(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.IsZero(ObjectTypes) - uid: wan24.StreamSerializerExtensions.SerializerHelper.IsZero* name: IsZero href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_IsZero_ @@ -2447,6 +4918,38 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.RemoveValueFlags nameWithType: SerializerHelper.RemoveValueFlags +- uid: wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting(wan24.StreamSerializerExtensions.NumberTypes) + name: RequiresObjectWriting(NumberTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_RequiresObjectWriting_wan24_StreamSerializerExtensions_NumberTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting(wan24.StreamSerializerExtensions.NumberTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting(wan24.StreamSerializerExtensions.NumberTypes) + nameWithType: SerializerHelper.RequiresObjectWriting(NumberTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting(wan24.StreamSerializerExtensions.ObjectTypes) + name: RequiresObjectWriting(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_RequiresObjectWriting_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.RequiresObjectWriting(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting* + name: RequiresObjectWriting + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_RequiresObjectWriting_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.RequiresObjectWriting + nameWithType: SerializerHelper.RequiresObjectWriting +- uid: wan24.StreamSerializerExtensions.SerializerHelper.RequiresType(wan24.StreamSerializerExtensions.ObjectTypes) + name: RequiresType(ObjectTypes) + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_RequiresType_wan24_StreamSerializerExtensions_ObjectTypes_ + commentId: M:wan24.StreamSerializerExtensions.SerializerHelper.RequiresType(wan24.StreamSerializerExtensions.ObjectTypes) + fullName: wan24.StreamSerializerExtensions.SerializerHelper.RequiresType(wan24.StreamSerializerExtensions.ObjectTypes) + nameWithType: SerializerHelper.RequiresType(ObjectTypes) +- uid: wan24.StreamSerializerExtensions.SerializerHelper.RequiresType* + name: RequiresType + href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_RequiresType_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerHelper.RequiresType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerHelper.RequiresType + nameWithType: SerializerHelper.RequiresType - uid: wan24.StreamSerializerExtensions.SerializerHelper.ToBytes(wan24.StreamSerializerExtensions.IStreamSerializer,System.Boolean) name: ToBytes(IStreamSerializer, Boolean) href: api/wan24.StreamSerializerExtensions.SerializerHelper.html#wan24_StreamSerializerExtensions_SerializerHelper_ToBytes_wan24_StreamSerializerExtensions_IStreamSerializer_System_Boolean_ @@ -2498,12 +5001,15 @@ references: commentId: T:wan24.StreamSerializerExtensions.SerializerOptionsBase fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase nameWithType: SerializerOptionsBase -- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - name: SerializerOptionsBase(PropertyInfoExt, StreamSerializerAttribute) - href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_wan24_Core_PropertyInfoExt_wan24_StreamSerializerExtensions_StreamSerializerAttribute_ - commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(wan24.Core.PropertyInfoExt,wan24.StreamSerializerExtensions.StreamSerializerAttribute) - fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(wan24.Core.PropertyInfoExt, wan24.StreamSerializerExtensions.StreamSerializerAttribute) - nameWithType: SerializerOptionsBase.SerializerOptionsBase(PropertyInfoExt, StreamSerializerAttribute) +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name: SerializerOptionsBase(Nullable, StreamSerializerAttribute) + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_StreamSerializerAttribute_ + commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.StreamSerializerAttribute) + name.vb: SerializerOptionsBase(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(System.Nullable, wan24.StreamSerializerExtensions.StreamSerializerAttribute) + fullName.vb: wan24.StreamSerializerExtensions.SerializerOptionsBase.SerializerOptionsBase(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.StreamSerializerAttribute) + nameWithType: SerializerOptionsBase.SerializerOptionsBase(Nullable, StreamSerializerAttribute) + nameWithType.vb: SerializerOptionsBase.SerializerOptionsBase(Nullable(Of PropertyInfoExt), StreamSerializerAttribute) - uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.#ctor* name: SerializerOptionsBase href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase__ctor_ @@ -2562,6 +5068,32 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.GetMinLen nameWithType: SerializerOptionsBase.GetMinLen +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.IsNullable + name: IsNullable + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_IsNullable + commentId: P:wan24.StreamSerializerExtensions.SerializerOptionsBase.IsNullable + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.IsNullable + nameWithType: SerializerOptionsBase.IsNullable +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.IsNullable* + name: IsNullable + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_IsNullable_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerOptionsBase.IsNullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.IsNullable + nameWithType: SerializerOptionsBase.IsNullable +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.KeyOptions + name: KeyOptions + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_KeyOptions + commentId: P:wan24.StreamSerializerExtensions.SerializerOptionsBase.KeyOptions + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.KeyOptions + nameWithType: SerializerOptionsBase.KeyOptions +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.KeyOptions* + name: KeyOptions + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_KeyOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerOptionsBase.KeyOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.KeyOptions + nameWithType: SerializerOptionsBase.KeyOptions - uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.Property name: Property href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_Property @@ -2575,6 +5107,178 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.Property nameWithType: SerializerOptionsBase.Property +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.Serializer + name: Serializer + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_Serializer + commentId: P:wan24.StreamSerializerExtensions.SerializerOptionsBase.Serializer + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.Serializer + nameWithType: SerializerOptionsBase.Serializer +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.Serializer* + name: Serializer + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_Serializer_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerOptionsBase.Serializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.Serializer + nameWithType: SerializerOptionsBase.Serializer +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.ValueOptions + name: ValueOptions + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_ValueOptions + commentId: P:wan24.StreamSerializerExtensions.SerializerOptionsBase.ValueOptions + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.ValueOptions + nameWithType: SerializerOptionsBase.ValueOptions +- uid: wan24.StreamSerializerExtensions.SerializerOptionsBase.ValueOptions* + name: ValueOptions + href: api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html#wan24_StreamSerializerExtensions_SerializerOptionsBase_ValueOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerOptionsBase.ValueOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerOptionsBase.ValueOptions + nameWithType: SerializerOptionsBase.ValueOptions +- uid: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions + name: SerializerOptionsFluentExtensions + href: api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html + commentId: T:wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions + fullName: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions + nameWithType: SerializerOptionsFluentExtensions +- uid: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithKeyOptions* + name: WithKeyOptions + href: api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html#wan24_StreamSerializerExtensions_SerializerOptionsFluentExtensions_WithKeyOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithKeyOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithKeyOptions + nameWithType: SerializerOptionsFluentExtensions.WithKeyOptions +- uid: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithKeyOptions``1(``0,wan24.StreamSerializerExtensions.ISerializerOptions) + name: WithKeyOptions(T, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html#wan24_StreamSerializerExtensions_SerializerOptionsFluentExtensions_WithKeyOptions__1___0_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithKeyOptions``1(``0,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: WithKeyOptions(Of T)(T, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithKeyOptions(T, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithKeyOptions(Of T)(T, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: SerializerOptionsFluentExtensions.WithKeyOptions(T, ISerializerOptions) + nameWithType.vb: SerializerOptionsFluentExtensions.WithKeyOptions(Of T)(T, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithValueOptions* + name: WithValueOptions + href: api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html#wan24_StreamSerializerExtensions_SerializerOptionsFluentExtensions_WithValueOptions_ + commentId: Overload:wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithValueOptions + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithValueOptions + nameWithType: SerializerOptionsFluentExtensions.WithValueOptions +- uid: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithValueOptions``1(``0,wan24.StreamSerializerExtensions.ISerializerOptions) + name: WithValueOptions(T, ISerializerOptions) + href: api/wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.html#wan24_StreamSerializerExtensions_SerializerOptionsFluentExtensions_WithValueOptions__1___0_wan24_StreamSerializerExtensions_ISerializerOptions_ + commentId: M:wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithValueOptions``1(``0,wan24.StreamSerializerExtensions.ISerializerOptions) + name.vb: WithValueOptions(Of T)(T, ISerializerOptions) + fullName: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithValueOptions(T, wan24.StreamSerializerExtensions.ISerializerOptions) + fullName.vb: wan24.StreamSerializerExtensions.SerializerOptionsFluentExtensions.WithValueOptions(Of T)(T, wan24.StreamSerializerExtensions.ISerializerOptions) + nameWithType: SerializerOptionsFluentExtensions.WithValueOptions(T, ISerializerOptions) + nameWithType.vb: SerializerOptionsFluentExtensions.WithValueOptions(Of T)(T, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.SerializerTypes + name: SerializerTypes + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html + commentId: T:wan24.StreamSerializerExtensions.SerializerTypes + fullName: wan24.StreamSerializerExtensions.SerializerTypes + nameWithType: SerializerTypes +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Any + name: Any + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Any + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Any + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Any + nameWithType: SerializerTypes.Any +- uid: wan24.StreamSerializerExtensions.SerializerTypes.AnyObject + name: AnyObject + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_AnyObject + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.AnyObject + fullName: wan24.StreamSerializerExtensions.SerializerTypes.AnyObject + nameWithType: SerializerTypes.AnyObject +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Array + name: Array + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Array + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Array + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Array + nameWithType: SerializerTypes.Array +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Bool + name: Bool + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Bool + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Bool + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Bool + nameWithType: SerializerTypes.Bool +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Bytes + name: Bytes + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Bytes + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Bytes + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Bytes + nameWithType: SerializerTypes.Bytes +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Dictionary + name: Dictionary + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Dictionary + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Dictionary + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Dictionary + nameWithType: SerializerTypes.Dictionary +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Enum + name: Enum + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Enum + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Enum + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Enum + nameWithType: SerializerTypes.Enum +- uid: wan24.StreamSerializerExtensions.SerializerTypes.List + name: List + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_List + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.List + fullName: wan24.StreamSerializerExtensions.SerializerTypes.List + nameWithType: SerializerTypes.List +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Number + name: Number + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Number + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Number + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Number + nameWithType: SerializerTypes.Number +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Serializer + name: Serializer + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Serializer + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Serializer + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Serializer + nameWithType: SerializerTypes.Serializer +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Stream + name: Stream + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Stream + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Stream + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Stream + nameWithType: SerializerTypes.Stream +- uid: wan24.StreamSerializerExtensions.SerializerTypes.StreamSerializer + name: StreamSerializer + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_StreamSerializer + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.StreamSerializer + fullName: wan24.StreamSerializerExtensions.SerializerTypes.StreamSerializer + nameWithType: SerializerTypes.StreamSerializer +- uid: wan24.StreamSerializerExtensions.SerializerTypes.String + name: String + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_String + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.String + fullName: wan24.StreamSerializerExtensions.SerializerTypes.String + nameWithType: SerializerTypes.String +- uid: wan24.StreamSerializerExtensions.SerializerTypes.String16 + name: String16 + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_String16 + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.String16 + fullName: wan24.StreamSerializerExtensions.SerializerTypes.String16 + nameWithType: SerializerTypes.String16 +- uid: wan24.StreamSerializerExtensions.SerializerTypes.String32 + name: String32 + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_String32 + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.String32 + fullName: wan24.StreamSerializerExtensions.SerializerTypes.String32 + nameWithType: SerializerTypes.String32 +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Struct + name: Struct + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Struct + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Struct + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Struct + nameWithType: SerializerTypes.Struct +- uid: wan24.StreamSerializerExtensions.SerializerTypes.Type + name: Type + href: api/wan24.StreamSerializerExtensions.SerializerTypes.html#wan24_StreamSerializerExtensions_SerializerTypes_Type + commentId: F:wan24.StreamSerializerExtensions.SerializerTypes.Type + fullName: wan24.StreamSerializerExtensions.SerializerTypes.Type + nameWithType: SerializerTypes.Type - uid: wan24.StreamSerializerExtensions.StreamExtensions name: StreamExtensions href: api/wan24.StreamSerializerExtensions.StreamExtensions.html @@ -2600,6 +5304,18 @@ references: commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ArrayEmptyMethod fullName: wan24.StreamSerializerExtensions.StreamExtensions.ArrayEmptyMethod nameWithType: StreamExtensions.ArrayEmptyMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate + name: StreamExtensions.AsyncNullableWriter_Delegate + href: api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate + fullName: wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate + nameWithType: StreamExtensions.AsyncNullableWriter_Delegate +- uid: wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate + name: StreamExtensions.AsyncStreamNullableWiter_Delegate + href: api/wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate + fullName: wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate + nameWithType: StreamExtensions.AsyncStreamNullableWiter_Delegate - uid: wan24.StreamSerializerExtensions.StreamExtensions.ConvertStructureEndianess(Type,Memory{System.Byte},wan24.StreamSerializerExtensions.StreamSerializerAttribute) name: ConvertStructureEndianess(Type, Memory, StreamSerializerAttribute) href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ConvertStructureEndianess_Type_Memory_System_Byte__wan24_StreamSerializerExtensions_StreamSerializerAttribute_ @@ -2616,6 +5332,38 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ConvertStructureEndianess nameWithType: StreamExtensions.ConvertStructureEndianess +- uid: wan24.StreamSerializerExtensions.StreamExtensions.CreateDeserializationContext(Stream,System.Nullable{System.Int32},System.Nullable{System.Int32},CancellationToken) + name: CreateDeserializationContext(Stream, Nullable, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_CreateDeserializationContext_Stream_System_Nullable_System_Int32__System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.CreateDeserializationContext(Stream,System.Nullable{System.Int32},System.Nullable{System.Int32},CancellationToken) + name.vb: CreateDeserializationContext(Stream, Nullable(Of Int32), Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.CreateDeserializationContext(Stream, System.Nullable, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.CreateDeserializationContext(Stream, System.Nullable(Of System.Int32), System.Nullable(Of System.Int32), CancellationToken) + nameWithType: StreamExtensions.CreateDeserializationContext(Stream, Nullable, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.CreateDeserializationContext(Stream, Nullable(Of Int32), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.CreateDeserializationContext* + name: CreateDeserializationContext + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_CreateDeserializationContext_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.CreateDeserializationContext + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.CreateDeserializationContext + nameWithType: StreamExtensions.CreateDeserializationContext +- uid: wan24.StreamSerializerExtensions.StreamExtensions.CreateSerializationContext(Stream,System.Nullable{System.Int32},CancellationToken) + name: CreateSerializationContext(Stream, Nullable, CancellationToken) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_CreateSerializationContext_Stream_System_Nullable_System_Int32__CancellationToken_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.CreateSerializationContext(Stream,System.Nullable{System.Int32},CancellationToken) + name.vb: CreateSerializationContext(Stream, Nullable(Of Int32), CancellationToken) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.CreateSerializationContext(Stream, System.Nullable, CancellationToken) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.CreateSerializationContext(Stream, System.Nullable(Of System.Int32), CancellationToken) + nameWithType: StreamExtensions.CreateSerializationContext(Stream, Nullable, CancellationToken) + nameWithType.vb: StreamExtensions.CreateSerializationContext(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.CreateSerializationContext* + name: CreateSerializationContext + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_CreateSerializationContext_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.CreateSerializationContext + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.CreateSerializationContext + nameWithType: StreamExtensions.CreateSerializationContext - uid: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate* name: Enumerate href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Enumerate_ @@ -2623,15 +5371,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate nameWithType: StreamExtensions.Enumerate -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate``2(Stream,System.Nullable{System.Int32}) - name: Enumerate(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Enumerate__2_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Enumerate``2(Stream,System.Nullable{System.Int32}) - name.vb: Enumerate(Of tObject, tEnumerator)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate(Of tObject, tEnumerator)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.Enumerate(Stream, Nullable) - nameWithType.vb: StreamExtensions.Enumerate(Of tObject, tEnumerator)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: Enumerate(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Enumerate__2_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Enumerate``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: Enumerate(Of tObject, tEnumerator)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.Enumerate(Of tObject, tEnumerator)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.Enumerate(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.Enumerate(Of tObject, tEnumerator)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync* name: EnumerateAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateAsync_ @@ -2639,15 +5387,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync nameWithType: StreamExtensions.EnumerateAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync``2(Stream,System.Nullable{System.Int32},CancellationToken) - name: EnumerateAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateAsync__2_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync``2(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: EnumerateAsync(Of tObject, tEnumerator)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync(Of tObject, tEnumerator)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.EnumerateAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.EnumerateAsync(Of tObject, tEnumerator)(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: EnumerateAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateAsync__2_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: EnumerateAsync(Of tObject, tEnumerator)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateAsync(Of tObject, tEnumerator)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.EnumerateAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.EnumerateAsync(Of tObject, tEnumerator)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber* name: EnumerateNumber href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateNumber_ @@ -2655,15 +5403,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber nameWithType: StreamExtensions.EnumerateNumber -- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: EnumerateNumber(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateNumber__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: EnumerateNumber(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.EnumerateNumber(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.EnumerateNumber(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: EnumerateNumber(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateNumber__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: EnumerateNumber(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumber(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.EnumerateNumber(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.EnumerateNumber(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync* name: EnumerateNumberAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateNumberAsync_ @@ -2671,15 +5419,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync nameWithType: StreamExtensions.EnumerateNumberAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: EnumerateNumberAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateNumberAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: EnumerateNumberAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.EnumerateNumberAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.EnumerateNumberAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: EnumerateNumberAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateNumberAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: EnumerateNumberAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateNumberAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.EnumerateNumberAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.EnumerateNumberAsync(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized* name: EnumerateSerialized href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateSerialized_ @@ -2687,15 +5435,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized nameWithType: StreamExtensions.EnumerateSerialized -- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized``1(Stream,System.Nullable{System.Int32}) - name: EnumerateSerialized(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateSerialized__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized``1(Stream,System.Nullable{System.Int32}) - name.vb: EnumerateSerialized(Of T)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized(Of T)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.EnumerateSerialized(Stream, Nullable) - nameWithType.vb: StreamExtensions.EnumerateSerialized(Of T)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: EnumerateSerialized(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateSerialized__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: EnumerateSerialized(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerialized(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.EnumerateSerialized(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.EnumerateSerialized(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync* name: EnumerateSerializedAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateSerializedAsync_ @@ -2703,24 +5451,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync nameWithType: StreamExtensions.EnumerateSerializedAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: EnumerateSerializedAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateSerializedAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: EnumerateSerializedAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.EnumerateSerializedAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.EnumerateSerializedAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: EnumerateString(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateString_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: EnumerateString(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.EnumerateString(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.EnumerateString(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: EnumerateSerializedAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateSerializedAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: EnumerateSerializedAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateSerializedAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.EnumerateSerializedAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.EnumerateSerializedAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: EnumerateString(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateString_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.EnumerateString(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString* name: EnumerateString href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateString_ @@ -2728,15 +5473,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateString nameWithType: StreamExtensions.EnumerateString -- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: EnumerateStringAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateStringAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: EnumerateStringAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.EnumerateStringAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.EnumerateStringAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: EnumerateStringAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateStringAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.EnumerateStringAsync(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync* name: EnumerateStringAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_EnumerateStringAsync_ @@ -2744,15 +5486,18 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.EnumerateStringAsync nameWithType: StreamExtensions.EnumerateStringAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadAny(Stream, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAny_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadAny(Stream, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadAny(Stream, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadAny(Stream, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate + name: StreamExtensions.NullableWriter_Delegate + href: api/wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate + fullName: wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate + nameWithType: StreamExtensions.NullableWriter_Delegate +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAny(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAny_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAny(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny* name: ReadAny href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAny_ @@ -2760,15 +5505,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAny nameWithType: StreamExtensions.ReadAny -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadAnyAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyAsync_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadAnyAsync(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadAnyAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadAnyAsync(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync* name: ReadAnyAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyAsync_ @@ -2776,15 +5518,38 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyAsync nameWithType: StreamExtensions.ReadAnyAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadAnyNullable(Stream, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullable_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadAnyNullable(Stream, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadAnyNullable(Stream, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadAnyNullable(Stream, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeader(wan24.StreamSerializerExtensions.ItemDeserializerContext,System.Int32,Type) + name: ReadAnyItemHeader(ItemDeserializerContext, Int32, Type) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyItemHeader_wan24_StreamSerializerExtensions_ItemDeserializerContext_System_Int32_Type_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeader(wan24.StreamSerializerExtensions.ItemDeserializerContext,System.Int32,Type) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeader(wan24.StreamSerializerExtensions.ItemDeserializerContext, System.Int32, Type) + nameWithType: StreamExtensions.ReadAnyItemHeader(ItemDeserializerContext, Int32, Type) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeader* + name: ReadAnyItemHeader + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyItemHeader_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeader + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeader + nameWithType: StreamExtensions.ReadAnyItemHeader +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeaderAsync(wan24.StreamSerializerExtensions.ItemDeserializerContext,System.Int32,Type) + name: ReadAnyItemHeaderAsync(ItemDeserializerContext, Int32, Type) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyItemHeaderAsync_wan24_StreamSerializerExtensions_ItemDeserializerContext_System_Int32_Type_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeaderAsync(wan24.StreamSerializerExtensions.ItemDeserializerContext,System.Int32,Type) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeaderAsync(wan24.StreamSerializerExtensions.ItemDeserializerContext, System.Int32, Type) + nameWithType: StreamExtensions.ReadAnyItemHeaderAsync(ItemDeserializerContext, Int32, Type) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeaderAsync* + name: ReadAnyItemHeaderAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyItemHeaderAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeaderAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyItemHeaderAsync + nameWithType: StreamExtensions.ReadAnyItemHeaderAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable* name: ReadAnyNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullable_ @@ -2792,15 +5557,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullable nameWithType: StreamExtensions.ReadAnyNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadAnyNullableAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullableAsync_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadAnyNullableAsync(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadAnyNullableAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadAnyNullableAsync(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync* name: ReadAnyNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyNullableAsync_ @@ -2808,15 +5570,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyNullableAsync nameWithType: StreamExtensions.ReadAnyNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream,Type,System.Nullable{System.Int32}) - name: ReadAnyObject(Stream, Type, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObject_Stream_Type_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream,Type,System.Nullable{System.Int32}) - name.vb: ReadAnyObject(Stream, Type, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream, Type, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream, Type, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadAnyObject(Stream, Type, Nullable) - nameWithType.vb: StreamExtensions.ReadAnyObject(Stream, Type, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObject(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObject_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObject(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject* name: ReadAnyObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObject_ @@ -2824,24 +5583,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject nameWithType: StreamExtensions.ReadAnyObject -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject``1(Stream,System.Nullable{System.Int32}) - name: ReadAnyObject(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObject__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject``1(Stream,System.Nullable{System.Int32}) - name.vb: ReadAnyObject(Of T)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Of T)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadAnyObject(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadAnyObject(Of T)(Stream, Nullable(Of Int32)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) - name: ReadAnyObjectAsync(Stream, Type, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectAsync_Stream_Type_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadAnyObjectAsync(Stream, Type, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream, Type, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream, Type, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadAnyObjectAsync(Stream, Type, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadAnyObjectAsync(Stream, Type, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObject(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObject__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadAnyObject(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObject(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObject(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadAnyObject(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObjectAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObjectAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync* name: ReadAnyObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectAsync_ @@ -2849,24 +5605,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync nameWithType: StreamExtensions.ReadAnyObjectAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadAnyObjectAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadAnyObjectAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadAnyObjectAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadAnyObjectAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream,Type,System.Nullable{System.Int32}) - name: ReadAnyObjectNullable(Stream, Type, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullable_Stream_Type_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream,Type,System.Nullable{System.Int32}) - name.vb: ReadAnyObjectNullable(Stream, Type, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream, Type, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream, Type, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadAnyObjectNullable(Stream, Type, Nullable) - nameWithType.vb: StreamExtensions.ReadAnyObjectNullable(Stream, Type, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObjectAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadAnyObjectAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObjectAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadAnyObjectAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObjectNullable(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObjectNullable(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable* name: ReadAnyObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullable_ @@ -2874,24 +5627,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable nameWithType: StreamExtensions.ReadAnyObjectNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable``1(Stream,System.Nullable{System.Int32}) - name: ReadAnyObjectNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullable__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable``1(Stream,System.Nullable{System.Int32}) - name.vb: ReadAnyObjectNullable(Of T)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Of T)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadAnyObjectNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadAnyObjectNullable(Of T)(Stream, Nullable(Of Int32)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) - name: ReadAnyObjectNullableAsync(Stream, Type, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullableAsync_Stream_Type_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadAnyObjectNullableAsync(Stream, Type, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObjectNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadAnyObjectNullable(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObjectNullable(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadAnyObjectNullable(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObjectNullableAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObjectNullableAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync* name: ReadAnyObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullableAsync_ @@ -2899,24 +5649,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync nameWithType: StreamExtensions.ReadAnyObjectNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadAnyObjectNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullableAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadAnyObjectNullableAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadAnyObjectNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadAnyObjectNullableAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadArray(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArray_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadArray(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadArray(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadArray(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadAnyObjectNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadAnyObjectNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadAnyObjectNullableAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadAnyObjectNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadAnyObjectNullableAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadAnyObjectNullableAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArray(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArray_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArray(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray* name: ReadArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArray_ @@ -2924,24 +5671,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray nameWithType: StreamExtensions.ReadArray -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadArray(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArray__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArray``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadArray(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadArray(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadArray(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadArrayAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadArrayAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadArrayAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadArrayAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArray(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArray__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArray``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadArray(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArray(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArray(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadArray(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArrayAsync(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArrayAsync(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync* name: ReadArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsync_ @@ -2949,24 +5693,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync nameWithType: StreamExtensions.ReadArrayAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadArrayAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadArrayAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadArrayAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadArrayAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadArrayNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadArrayNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadArrayNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadArrayNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArrayAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadArrayAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArrayAsync(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadArrayAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArrayNullable(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArrayNullable(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable* name: ReadArrayNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullable_ @@ -2974,24 +5715,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable nameWithType: StreamExtensions.ReadArrayNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadArrayNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullable__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadArrayNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadArrayNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadArrayNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadArrayNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadArrayNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadArrayNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadArrayNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArrayNullable(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadArrayNullable(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArrayNullable(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadArrayNullable(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArrayNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArrayNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync* name: ReadArrayNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullableAsync_ @@ -2999,24 +5737,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync nameWithType: StreamExtensions.ReadArrayNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadArrayNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullableAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadArrayNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadArrayNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadArrayNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBool(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadBool(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBool_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBool(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadBool(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBool(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBool(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadBool(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadBool(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadArrayNullableAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadArrayNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadArrayNullableAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadArrayNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadArrayNullableAsync(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadArrayNullableAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBool(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadBool(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBool_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBool(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBool(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadBool(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBool* name: ReadBool href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBool_ @@ -3024,15 +5759,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBool nameWithType: StreamExtensions.ReadBool -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadBoolAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadBoolAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadBoolAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadBoolAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadBoolAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadBoolAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync* name: ReadBoolAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolAsync_ @@ -3040,15 +5772,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolAsync nameWithType: StreamExtensions.ReadBoolAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadBoolNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadBoolNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadBoolNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadBoolNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadBoolNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadBoolNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable* name: ReadBoolNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolNullable_ @@ -3056,15 +5785,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullable nameWithType: StreamExtensions.ReadBoolNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadBoolNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadBoolNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadBoolNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadBoolNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadBoolNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadBoolNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync* name: ReadBoolNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBoolNullableAsync_ @@ -3072,15 +5798,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBoolNullableAsync nameWithType: StreamExtensions.ReadBoolNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadBytes(Stream, Nullable, Byte[], ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytes_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadBytes(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadBytes(Stream, Nullable, Byte[], ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadBytes(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadBytes(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytes_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadBytes(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes* name: ReadBytes href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytes_ @@ -3088,15 +5811,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytes nameWithType: StreamExtensions.ReadBytes -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadBytesAsync(Stream, Nullable, Byte[], ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesAsync_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadBytesAsync(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadBytesAsync(Stream, Nullable, Byte[], ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadBytesAsync(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadBytesAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadBytesAsync(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync* name: ReadBytesAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesAsync_ @@ -3104,15 +5824,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesAsync nameWithType: StreamExtensions.ReadBytesAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadBytesNullable(Stream, Nullable, Byte[], ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesNullable_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadBytesNullable(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadBytesNullable(Stream, Nullable, Byte[], ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadBytesNullable(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadBytesNullable(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadBytesNullable(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable* name: ReadBytesNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesNullable_ @@ -3120,15 +5837,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullable nameWithType: StreamExtensions.ReadBytesNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadBytesNullableAsync(Stream, Nullable, Byte[], ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesNullableAsync_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadBytesNullableAsync(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadBytesNullableAsync(Stream, Nullable, Byte[], ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadBytesNullableAsync(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadBytesNullableAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadBytesNullableAsync(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync* name: ReadBytesNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadBytesNullableAsync_ @@ -3136,15 +5850,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadBytesNullableAsync nameWithType: StreamExtensions.ReadBytesNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadDecimal(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimal_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadDecimal(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadDecimal(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadDecimal(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDecimal(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimal_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDecimal(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal* name: ReadDecimal href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimal_ @@ -3152,15 +5863,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimal nameWithType: StreamExtensions.ReadDecimal -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadDecimalAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadDecimalAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadDecimalAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDecimalAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDecimalAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDecimalAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync* name: ReadDecimalAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalAsync_ @@ -3168,15 +5876,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalAsync nameWithType: StreamExtensions.ReadDecimalAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadDecimalNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadDecimalNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadDecimalNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadDecimalNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDecimalNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDecimalNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable* name: ReadDecimalNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalNullable_ @@ -3184,15 +5889,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullable nameWithType: StreamExtensions.ReadDecimalNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadDecimalNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadDecimalNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadDecimalNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDecimalNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDecimalNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDecimalNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync* name: ReadDecimalNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDecimalNullableAsync_ @@ -3200,15 +5902,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync nameWithType: StreamExtensions.ReadDecimalNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadDict(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDict_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadDict(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadDict(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadDict(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDict(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDict_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDict(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict* name: ReadDict href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDict_ @@ -3216,24 +5915,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict nameWithType: StreamExtensions.ReadDict -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadDict(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDict__2_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDict``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadDict(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Of tKey, tValue)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadDict(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadDict(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadDictAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadDictAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadDictAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDictAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDict(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDict__2_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDict``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadDict(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDict(Of tKey, tValue)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDict(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadDict(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDictAsync(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDictAsync(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync* name: ReadDictAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsync_ @@ -3241,24 +5937,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync nameWithType: StreamExtensions.ReadDictAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadDictAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsync__2_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadDictAsync(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Of tKey, tValue)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadDictAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDictAsync(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadDictNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadDictNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadDictNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadDictNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDictAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictAsync__2_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadDictAsync(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictAsync(Of tKey, tValue)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDictAsync(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadDictAsync(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDictNullable(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDictNullable(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable* name: ReadDictNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullable_ @@ -3266,24 +5959,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable nameWithType: StreamExtensions.ReadDictNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadDictNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullable__2_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadDictNullable(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Of tKey, tValue)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadDictNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadDictNullable(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadDictNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadDictNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadDictNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDictNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDictNullable(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullable__2_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadDictNullable(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullable(Of tKey, tValue)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDictNullable(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadDictNullable(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDictNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDictNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync* name: ReadDictNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullableAsync_ @@ -3291,24 +5981,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync nameWithType: StreamExtensions.ReadDictNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadDictNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullableAsync__2_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync``2(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadDictNullableAsync(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Of tKey, tValue)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadDictNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDictNullableAsync(Of tKey, tValue)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadDouble(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDouble_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadDouble(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadDouble(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadDouble(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadDictNullableAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDictNullableAsync__2_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync``2(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadDictNullableAsync(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDictNullableAsync(Of tKey, tValue)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadDictNullableAsync(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadDictNullableAsync(Of tKey, tValue)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDouble(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDouble_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDouble(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble* name: ReadDouble href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDouble_ @@ -3316,15 +6003,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDouble nameWithType: StreamExtensions.ReadDouble -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadDoubleAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadDoubleAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadDoubleAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDoubleAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDoubleAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDoubleAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync* name: ReadDoubleAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleAsync_ @@ -3332,15 +6016,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleAsync nameWithType: StreamExtensions.ReadDoubleAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadDoubleNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadDoubleNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadDoubleNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadDoubleNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDoubleNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDoubleNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable* name: ReadDoubleNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleNullable_ @@ -3348,15 +6029,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullable nameWithType: StreamExtensions.ReadDoubleNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadDoubleNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadDoubleNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadDoubleNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadDoubleNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadDoubleNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadDoubleNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync* name: ReadDoubleNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadDoubleNullableAsync_ @@ -3364,15 +6042,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync nameWithType: StreamExtensions.ReadDoubleNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadEnum(Stream, Type, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnum_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadEnum(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream, Type, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadEnum(Stream, Type, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadEnum(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnum(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnum_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnum(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum* name: ReadEnum href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnum_ @@ -3380,24 +6055,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum nameWithType: StreamExtensions.ReadEnum -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadEnum(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnum__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadEnum(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadEnum(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadEnum(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadEnumAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadEnumAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadEnumAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadEnumAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnum(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnum__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadEnum(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnum(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnum(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadEnum(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnumAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnumAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync* name: ReadEnumAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsync_ @@ -3405,24 +6077,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync nameWithType: StreamExtensions.ReadEnumAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadEnumAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadEnumAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadEnumAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadEnumAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadEnumNullable(Stream, Type, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadEnumNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadEnumNullable(Stream, Type, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadEnumNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnumAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadEnumAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnumAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadEnumAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnumNullable(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnumNullable(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable* name: ReadEnumNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullable_ @@ -3430,24 +6099,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable nameWithType: StreamExtensions.ReadEnumNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadEnumNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullable__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadEnumNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadEnumNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadEnumNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadEnumNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadEnumNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadEnumNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadEnumNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnumNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadEnumNullable(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnumNullable(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadEnumNullable(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnumNullableAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnumNullableAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync* name: ReadEnumNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullableAsync_ @@ -3455,24 +6121,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync nameWithType: StreamExtensions.ReadEnumNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadEnumNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullableAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadEnumNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadEnumNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadEnumNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadFixedArray(Stream, Array, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray_Stream_Array_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadFixedArray(Stream, Array, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Array, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Array, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadFixedArray(Stream, Array, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadFixedArray(Stream, Array, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadEnumNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadEnumNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadEnumNullableAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadEnumNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadEnumNullableAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadEnumNullableAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream,Array,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFixedArray(Stream, Array, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray_Stream_Array_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream,Array,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Array, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFixedArray(Stream, Array, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray* name: ReadFixedArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray_ @@ -3480,33 +6143,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray nameWithType: StreamExtensions.ReadFixedArray -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,``0[],System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadFixedArray(Stream, T[], Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray__1_Stream___0___System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,``0[],System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadFixedArray(Of T)(Stream, T(), Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, T[], System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Of T)(Stream, T(), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadFixedArray(Stream, T[], Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadFixedArray(Of T)(Stream, T(), Nullable(Of Int32), ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,Span{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadFixedArray(Stream, Span, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray__1_Stream_Span___0__System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,Span{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadFixedArray(Of T)(Stream, Span(Of T), Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Span, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Of T)(Stream, Span(Of T), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadFixedArray(Stream, Span, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadFixedArray(Of T)(Stream, Span(Of T), Nullable(Of Int32), ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadFixedArrayAsync(Stream, Array, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync_Stream_Array_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream,Array,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadFixedArrayAsync(Stream, Array, Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Array, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Array, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, Array, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Stream, Array, Nullable(Of Int32), ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,``0[],wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFixedArray(Stream, T[], IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray__1_Stream___0___wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,``0[],wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadFixedArray(Of T)(Stream, T(), IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, T[], wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Of T)(Stream, T(), wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFixedArray(Stream, T[], IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadFixedArray(Of T)(Stream, T(), IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,Span{``0},wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFixedArray(Stream, Span, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArray__1_Stream_Span___0__wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray``1(Stream,Span{``0},wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadFixedArray(Of T)(Stream, Span(Of T), IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Stream, Span, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArray(Of T)(Stream, Span(Of T), wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFixedArray(Stream, Span, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadFixedArray(Of T)(Stream, Span(Of T), IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream,Array,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFixedArrayAsync(Stream, Array, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync_Stream_Array_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream,Array,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Array, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, Array, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync* name: ReadFixedArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync_ @@ -3514,33 +6174,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync nameWithType: StreamExtensions.ReadFixedArrayAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,``0[],System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadFixedArrayAsync(Stream, T[], Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync__1_Stream___0___System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,``0[],System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadFixedArrayAsync(Of T)(Stream, T(), Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, T[], System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, T(), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, T[], Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, T(), Nullable(Of Int32), ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,Memory{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadFixedArrayAsync(Stream, Memory, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync__1_Stream_Memory___0__System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,Memory{``0},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Memory, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, Memory, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), Nullable(Of Int32), ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadFloat(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloat_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadFloat(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadFloat(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadFloat(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,``0[],wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFixedArrayAsync(Stream, T[], IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync__1_Stream___0___wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,``0[],wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadFixedArrayAsync(Of T)(Stream, T(), IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, T[], wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, T(), wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, T[], IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, T(), IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,Memory{``0},wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFixedArrayAsync(Stream, Memory, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFixedArrayAsync__1_Stream_Memory___0__wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync``1(Stream,Memory{``0},wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Stream, Memory, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFixedArrayAsync(Stream, Memory, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadFixedArrayAsync(Of T)(Stream, Memory(Of T), IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFloat(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloat_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFloat(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat* name: ReadFloat href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloat_ @@ -3548,15 +6205,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloat nameWithType: StreamExtensions.ReadFloat -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadFloatAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadFloatAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadFloatAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadFloatAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFloatAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFloatAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync* name: ReadFloatAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatAsync_ @@ -3564,15 +6218,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatAsync nameWithType: StreamExtensions.ReadFloatAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadFloatNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadFloatNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadFloatNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadFloatNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFloatNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFloatNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable* name: ReadFloatNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatNullable_ @@ -3580,15 +6231,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullable nameWithType: StreamExtensions.ReadFloatNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadFloatNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadFloatNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadFloatNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadFloatNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadFloatNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadFloatNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync* name: ReadFloatNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadFloatNullableAsync_ @@ -3596,15 +6244,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadFloatNullableAsync nameWithType: StreamExtensions.ReadFloatNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadInt(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadInt(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadInt_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadInt(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadInt(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadInt(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadInt(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadInt(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadInt(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadInt(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadInt(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadInt_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadInt(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadInt(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadInt(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadInt* name: ReadInt href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadInt_ @@ -3612,15 +6257,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadInt nameWithType: StreamExtensions.ReadInt -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadIntAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadIntAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadIntAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadIntAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadIntAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadIntAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync* name: ReadIntAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntAsync_ @@ -3628,15 +6270,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntAsync nameWithType: StreamExtensions.ReadIntAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadIntNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadIntNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadIntNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadIntNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadIntNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadIntNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable* name: ReadIntNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntNullable_ @@ -3644,15 +6283,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullable nameWithType: StreamExtensions.ReadIntNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadIntNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadIntNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadIntNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadIntNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadIntNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadIntNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync* name: ReadIntNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadIntNullableAsync_ @@ -3660,15 +6296,38 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync nameWithType: StreamExtensions.ReadIntNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadList(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadList_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadList(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadList(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadList(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadItem(wan24.StreamSerializerExtensions.ItemDeserializerContext) + name: ReadItem(ItemDeserializerContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadItem_wan24_StreamSerializerExtensions_ItemDeserializerContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadItem(wan24.StreamSerializerExtensions.ItemDeserializerContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadItem(wan24.StreamSerializerExtensions.ItemDeserializerContext) + nameWithType: StreamExtensions.ReadItem(ItemDeserializerContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadItem* + name: ReadItem + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadItem_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadItem + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadItem + nameWithType: StreamExtensions.ReadItem +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadItemAsync(wan24.StreamSerializerExtensions.ItemDeserializerContext) + name: ReadItemAsync(ItemDeserializerContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadItemAsync_wan24_StreamSerializerExtensions_ItemDeserializerContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadItemAsync(wan24.StreamSerializerExtensions.ItemDeserializerContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadItemAsync(wan24.StreamSerializerExtensions.ItemDeserializerContext) + nameWithType: StreamExtensions.ReadItemAsync(ItemDeserializerContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadItemAsync* + name: ReadItemAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadItemAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadItemAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadItemAsync + nameWithType: StreamExtensions.ReadItemAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadList(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadList_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadList(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadList* name: ReadList href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadList_ @@ -3676,24 +6335,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadList nameWithType: StreamExtensions.ReadList -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadList``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadList(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadList__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadList``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadList(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadList(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadList(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadListAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadListAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadListAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadListAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadList``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadList(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadList__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadList``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadList(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadList(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadList(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadList(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadListAsync(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadListAsync(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync* name: ReadListAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsync_ @@ -3701,24 +6357,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync nameWithType: StreamExtensions.ReadListAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadListAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadListAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadListAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadListAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadListNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadListNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadListNullable(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadListNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadListAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadListAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadListAsync(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadListAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadListNullable(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadListNullable(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable* name: ReadListNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullable_ @@ -3726,24 +6379,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable nameWithType: StreamExtensions.ReadListNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadListNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullable__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadListNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadListNullable(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadListNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadListNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadListNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadListNullableAsync(Stream, Type, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadListNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadListNullable(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadListNullable(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadListNullable(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadListNullable(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadListNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadListNullableAsync(Stream, Type, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync* name: ReadListNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullableAsync_ @@ -3751,24 +6401,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync nameWithType: StreamExtensions.ReadListNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadListNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullableAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadListNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadListNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadListNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLong(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadLong(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLong_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLong(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadLong(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLong(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadLong(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadLong(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadLong(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadListNullableAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadListNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name.vb: ReadListNullableAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadListNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadListNullableAsync(Stream, IDeserializationContext, Int32, Int32) + nameWithType.vb: StreamExtensions.ReadListNullableAsync(Of T)(Stream, IDeserializationContext, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLong(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadLong(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLong_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLong(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLong(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadLong(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLong* name: ReadLong href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLong_ @@ -3776,15 +6423,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLong nameWithType: StreamExtensions.ReadLong -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadLongAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadLongAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadLongAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadLongAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadLongAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadLongAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync* name: ReadLongAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongAsync_ @@ -3792,15 +6436,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongAsync nameWithType: StreamExtensions.ReadLongAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadLongNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadLongNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadLongNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadLongNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadLongNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadLongNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable* name: ReadLongNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongNullable_ @@ -3808,15 +6449,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullable nameWithType: StreamExtensions.ReadLongNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadLongNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadLongNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadLongNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadLongNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadLongNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadLongNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync* name: ReadLongNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadLongNullableAsync_ @@ -3824,15 +6462,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync nameWithType: StreamExtensions.ReadLongNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadNumber(Stream, Type, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumber_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadNumber(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream, Type, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadNumber(Stream, Type, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadNumber(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumber(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumber_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumber(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber* name: ReadNumber href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumber_ @@ -3840,24 +6475,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber nameWithType: StreamExtensions.ReadNumber -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadNumber(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumber__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadNumber(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadNumber(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadNumber(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadNumberAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadNumberAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadNumberAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadNumberAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumber(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumber__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadNumber(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumber(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumber(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadNumber(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumberAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumberAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync* name: ReadNumberAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsync_ @@ -3865,24 +6497,53 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync nameWithType: StreamExtensions.ReadNumberAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadNumberAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadNumberAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadNumberAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadNumberAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadNumberNullable(Stream, Type, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullable_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadNumberNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream, Type, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadNumberNullable(Stream, Type, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadNumberNullable(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumberAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadNumberAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumberAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadNumberAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberInt(wan24.StreamSerializerExtensions.IDeserializationContext,Type,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) + name: ReadNumberInt(IDeserializationContext, Type, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberInt_wan24_StreamSerializerExtensions_IDeserializationContext_Type_System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberInt(wan24.StreamSerializerExtensions.IDeserializationContext,Type,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) + name.vb: ReadNumberInt(IDeserializationContext, Type, Nullable(Of NumberTypes)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberInt(wan24.StreamSerializerExtensions.IDeserializationContext, Type, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberInt(wan24.StreamSerializerExtensions.IDeserializationContext, Type, System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes)) + nameWithType: StreamExtensions.ReadNumberInt(IDeserializationContext, Type, Nullable) + nameWithType.vb: StreamExtensions.ReadNumberInt(IDeserializationContext, Type, Nullable(Of NumberTypes)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberInt* + name: ReadNumberInt + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberInt_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberInt + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberInt + nameWithType: StreamExtensions.ReadNumberInt +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsync(wan24.StreamSerializerExtensions.IDeserializationContext,Type,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) + name: ReadNumberIntAsync(IDeserializationContext, Type, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberIntAsync_wan24_StreamSerializerExtensions_IDeserializationContext_Type_System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsync(wan24.StreamSerializerExtensions.IDeserializationContext,Type,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes}) + name.vb: ReadNumberIntAsync(IDeserializationContext, Type, Nullable(Of NumberTypes)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsync(wan24.StreamSerializerExtensions.IDeserializationContext, Type, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsync(wan24.StreamSerializerExtensions.IDeserializationContext, Type, System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes)) + nameWithType: StreamExtensions.ReadNumberIntAsync(IDeserializationContext, Type, Nullable) + nameWithType.vb: StreamExtensions.ReadNumberIntAsync(IDeserializationContext, Type, Nullable(Of NumberTypes)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsync* + name: ReadNumberIntAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberIntAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberIntAsync + nameWithType: StreamExtensions.ReadNumberIntAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumberNullable(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumberNullable(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable* name: ReadNumberNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullable_ @@ -3890,24 +6551,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable nameWithType: StreamExtensions.ReadNumberNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadNumberNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullable__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadNumberNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadNumberNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadNumberNullable(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadNumberNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullableAsync_Stream_Type_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream,Type,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadNumberNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream, Type, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream, Type, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadNumberNullableAsync(Stream, Type, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadNumberNullableAsync(Stream, Type, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumberNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadNumberNullable(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumberNullable(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadNumberNullable(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumberNullableAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumberNullableAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync* name: ReadNumberNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullableAsync_ @@ -3915,24 +6573,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync nameWithType: StreamExtensions.ReadNumberNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadNumberNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullableAsync__1_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync``1(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadNumberNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadNumberNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadNumberNullableAsync(Of T)(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadObject(Stream, Type, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObject_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadObject(Stream, Type, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadObject(Stream, Type, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadObject(Stream, Type, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadNumberNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadNumberNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadNumberNullableAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadNumberNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadNumberNullableAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadNumberNullableAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObject(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObject_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObject(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject* name: ReadObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObject_ @@ -3940,24 +6595,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject nameWithType: StreamExtensions.ReadObject -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadObject(Stream, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObject__1_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObject``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadObject(Of T)(Stream, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadObject(Stream, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadObject(Of T)(Stream, Nullable(Of Int32), ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadObjectAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsync_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadObjectAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadObjectAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadObjectAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObject(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObject__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObject``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadObject(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObject(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObject(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadObject(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObjectAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObjectAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync* name: ReadObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsync_ @@ -3965,24 +6617,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync nameWithType: StreamExtensions.ReadObjectAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadObjectAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsync__1_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadObjectAsync(Of T)(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadObjectAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadObjectAsync(Of T)(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadObjectNullable(Stream, Type, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullable_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadObjectNullable(Stream, Type, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadObjectNullable(Stream, Type, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadObjectNullable(Stream, Type, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObjectAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadObjectAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObjectAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadObjectAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObjectNullable(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObjectNullable(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable* name: ReadObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullable_ @@ -3990,24 +6639,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable nameWithType: StreamExtensions.ReadObjectNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: ReadObjectNullable(Stream, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullable__1_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: ReadObjectNullable(Of T)(Stream, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamExtensions.ReadObjectNullable(Stream, Nullable, ISerializerOptions) - nameWithType.vb: StreamExtensions.ReadObjectNullable(Of T)(Stream, Nullable(Of Int32), ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadObjectNullableAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsync_Stream_Type_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream,Type,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadObjectNullableAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream, Type, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream, Type, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadObjectNullableAsync(Stream, Type, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadObjectNullableAsync(Stream, Type, Nullable(Of Int32), ISerializerOptions, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObjectNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadObjectNullable(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObjectNullable(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadObjectNullable(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObjectNullableAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObjectNullableAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync* name: ReadObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsync_ @@ -4015,24 +6661,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync nameWithType: StreamExtensions.ReadObjectNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name: ReadObjectNullableAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsync__1_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync``1(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions,CancellationToken) - name.vb: ReadObjectNullableAsync(Of T)(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions, CancellationToken) - nameWithType: StreamExtensions.ReadObjectNullableAsync(Stream, Nullable, ISerializerOptions, CancellationToken) - nameWithType.vb: StreamExtensions.ReadObjectNullableAsync(Of T)(Stream, Nullable(Of Int32), ISerializerOptions, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream,System.Nullable{System.Int32}) - name: ReadOneByte(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByte_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream,System.Nullable{System.Int32}) - name.vb: ReadOneByte(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadOneByte(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadOneByte(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadObjectNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadObjectNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadObjectNullableAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadObjectNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadObjectNullableAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadObjectNullableAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneByte(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByte_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneByte(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte* name: ReadOneByte href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByte_ @@ -4040,15 +6683,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByte nameWithType: StreamExtensions.ReadOneByte -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadOneByteAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteAsync_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadOneByteAsync(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadOneByteAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadOneByteAsync(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneByteAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneByteAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync* name: ReadOneByteAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteAsync_ @@ -4056,15 +6696,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteAsync nameWithType: StreamExtensions.ReadOneByteAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable(Stream,System.Nullable{System.Int32}) - name: ReadOneByteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteNullable_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable(Stream,System.Nullable{System.Int32}) - name.vb: ReadOneByteNullable(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadOneByteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadOneByteNullable(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneByteNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneByteNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable* name: ReadOneByteNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteNullable_ @@ -4072,15 +6709,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullable nameWithType: StreamExtensions.ReadOneByteNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadOneByteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteNullableAsync_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadOneByteNullableAsync(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadOneByteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadOneByteNullableAsync(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneByteNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneByteNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync* name: ReadOneByteNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneByteNullableAsync_ @@ -4088,15 +6722,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneByteNullableAsync nameWithType: StreamExtensions.ReadOneByteNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte(Stream,System.Nullable{System.Int32}) - name: ReadOneSByte(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByte_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte(Stream,System.Nullable{System.Int32}) - name.vb: ReadOneSByte(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadOneSByte(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadOneSByte(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneSByte(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByte_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneSByte(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte* name: ReadOneSByte href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByte_ @@ -4104,15 +6735,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByte nameWithType: StreamExtensions.ReadOneSByte -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadOneSByteAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteAsync_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadOneSByteAsync(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadOneSByteAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadOneSByteAsync(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneSByteAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneSByteAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync* name: ReadOneSByteAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteAsync_ @@ -4120,15 +6748,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteAsync nameWithType: StreamExtensions.ReadOneSByteAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable(Stream,System.Nullable{System.Int32}) - name: ReadOneSByteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteNullable_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable(Stream,System.Nullable{System.Int32}) - name.vb: ReadOneSByteNullable(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadOneSByteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadOneSByteNullable(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneSByteNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneSByteNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable* name: ReadOneSByteNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteNullable_ @@ -4136,15 +6761,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullable nameWithType: StreamExtensions.ReadOneSByteNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadOneSByteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteNullableAsync_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadOneSByteNullableAsync(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadOneSByteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadOneSByteNullableAsync(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadOneSByteNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadOneSByteNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync* name: ReadOneSByteNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadOneSByteNullableAsync_ @@ -4152,6 +6774,70 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadOneSByteNullableAsync nameWithType: StreamExtensions.ReadOneSByteNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializableType(Stream, Int32, ObjectTypes, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableType_Stream_System_Int32_wan24_StreamSerializerExtensions_ObjectTypes_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType(Stream, System.Int32, wan24.StreamSerializerExtensions.ObjectTypes, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializableType(Stream, Int32, ObjectTypes, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializableType(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableType_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializableType(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType* + name: ReadSerializableType + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableType_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableType + nameWithType: StreamExtensions.ReadSerializableType +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializableTypeAsync(Stream, Int32, ObjectTypes, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableTypeAsync_Stream_System_Int32_wan24_StreamSerializerExtensions_ObjectTypes_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync(Stream, System.Int32, wan24.StreamSerializerExtensions.ObjectTypes, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializableTypeAsync(Stream, Int32, ObjectTypes, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializableTypeAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableTypeAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializableTypeAsync(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync* + name: ReadSerializableTypeAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableTypeAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeAsync + nameWithType: StreamExtensions.ReadSerializableTypeAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializableTypeNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableTypeNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializableTypeNullable(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullable* + name: ReadSerializableTypeNullable + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableTypeNullable_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullable + nameWithType: StreamExtensions.ReadSerializableTypeNullable +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializableTypeNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableTypeNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializableTypeNullableAsync(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullableAsync* + name: ReadSerializableTypeNullableAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializableTypeNullableAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullableAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializableTypeNullableAsync + nameWithType: StreamExtensions.ReadSerializableTypeNullableAsync - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized* name: ReadSerialized href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerialized_ @@ -4159,15 +6845,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized nameWithType: StreamExtensions.ReadSerialized -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized``1(Stream,System.Nullable{System.Int32}) - name: ReadSerialized(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerialized__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized``1(Stream,System.Nullable{System.Int32}) - name.vb: ReadSerialized(Of T)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized(Of T)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadSerialized(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadSerialized(Of T)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerialized(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerialized__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerialized(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerialized(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerialized(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerialized(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync* name: ReadSerializedAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedAsync_ @@ -4175,24 +6861,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync nameWithType: StreamExtensions.ReadSerializedAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadSerializedAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadSerializedAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadSerializedAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadSerializedAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream,System.Int32,System.Buffers.ArrayPool{System.Byte}) - name: ReadSerializedData(Stream, Int32, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedData_Stream_System_Int32_System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream,System.Int32,System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadSerializedData(Stream, Int32, ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream, System.Int32, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream, System.Int32, System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadSerializedData(Stream, Int32, ArrayPool) - nameWithType.vb: StreamExtensions.ReadSerializedData(Stream, Int32, ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerializedAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerializedAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream,System.Int32,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedData(Stream, Int32, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedData_Stream_System_Int32_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream,System.Int32,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData(Stream, System.Int32, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedData(Stream, Int32, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData* name: ReadSerializedData href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedData_ @@ -4200,15 +6883,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedData nameWithType: StreamExtensions.ReadSerializedData -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync(Stream,System.Int32,System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadSerializedDataAsync(Stream, Int32, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedDataAsync_Stream_System_Int32_System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync(Stream,System.Int32,System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadSerializedDataAsync(Stream, Int32, ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync(Stream, System.Int32, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync(Stream, System.Int32, System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadSerializedDataAsync(Stream, Int32, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadSerializedDataAsync(Stream, Int32, ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedDataAsync(Stream, Int32, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedDataAsync_Stream_System_Int32_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync(Stream, System.Int32, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedDataAsync(Stream, Int32, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedDataAsync* name: ReadSerializedDataAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedDataAsync_ @@ -4223,15 +6903,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable nameWithType: StreamExtensions.ReadSerializedNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable``1(Stream,System.Nullable{System.Int32}) - name: ReadSerializedNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedNullable__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable``1(Stream,System.Nullable{System.Int32}) - name.vb: ReadSerializedNullable(Of T)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable(Of T)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadSerializedNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadSerializedNullable(Of T)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerializedNullable(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedNullable(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerializedNullable(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync* name: ReadSerializedNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedNullableAsync_ @@ -4239,24 +6919,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync nameWithType: StreamExtensions.ReadSerializedNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadSerializedNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedNullableAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadSerializedNullableAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadSerializedNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadSerializedNullableAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject(Stream,Type,System.Nullable{System.Int32}) - name: ReadSerializedObject(Stream, Type, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObject_Stream_Type_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject(Stream,Type,System.Nullable{System.Int32}) - name.vb: ReadSerializedObject(Stream, Type, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject(Stream, Type, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject(Stream, Type, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadSerializedObject(Stream, Type, Nullable) - nameWithType.vb: StreamExtensions.ReadSerializedObject(Stream, Type, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerializedNullableAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedNullableAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerializedNullableAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedObject(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObject_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedObject(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject* name: ReadSerializedObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObject_ @@ -4264,15 +6941,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObject nameWithType: StreamExtensions.ReadSerializedObject -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) - name: ReadSerializedObjectAsync(Stream, Type, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObjectAsync_Stream_Type_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync(Stream,Type,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadSerializedObjectAsync(Stream, Type, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync(Stream, Type, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync(Stream, Type, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadSerializedObjectAsync(Stream, Type, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadSerializedObjectAsync(Stream, Type, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedObjectAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObjectAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedObjectAsync(Stream, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync* name: ReadSerializedObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObjectAsync_ @@ -4280,6 +6954,32 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectAsync nameWithType: StreamExtensions.ReadSerializedObjectAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedObjectNullable(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObjectNullable_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullable(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullable(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedObjectNullable(Stream, Type, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullable* + name: ReadSerializedObjectNullable + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObjectNullable_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullable + nameWithType: StreamExtensions.ReadSerializedObjectNullable +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedObjectNullableAsync(Stream, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObjectNullableAsync_Stream_Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullableAsync(Stream,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullableAsync(Stream, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedObjectNullableAsync(Stream, Type, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullableAsync* + name: ReadSerializedObjectNullableAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedObjectNullableAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullableAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedObjectNullableAsync + nameWithType: StreamExtensions.ReadSerializedObjectNullableAsync - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct* name: ReadSerializedStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStruct_ @@ -4287,15 +6987,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct nameWithType: StreamExtensions.ReadSerializedStruct -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct``1(Stream,System.Nullable{System.Int32}) - name: ReadSerializedStruct(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStruct__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct``1(Stream,System.Nullable{System.Int32}) - name.vb: ReadSerializedStruct(Of T)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct(Of T)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadSerializedStruct(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadSerializedStruct(Of T)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedStruct(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStruct__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerializedStruct(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStruct(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedStruct(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerializedStruct(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync* name: ReadSerializedStructAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructAsync_ @@ -4303,15 +7003,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync nameWithType: StreamExtensions.ReadSerializedStructAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadSerializedStructAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadSerializedStructAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadSerializedStructAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadSerializedStructAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedStructAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerializedStructAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedStructAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerializedStructAsync(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable* name: ReadSerializedStructNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructNullable_ @@ -4319,15 +7019,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable nameWithType: StreamExtensions.ReadSerializedStructNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable``1(Stream,System.Nullable{System.Int32}) - name: ReadSerializedStructNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructNullable__1_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable``1(Stream,System.Nullable{System.Int32}) - name.vb: ReadSerializedStructNullable(Of T)(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable(Of T)(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.ReadSerializedStructNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.ReadSerializedStructNullable(Of T)(Stream, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedStructNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerializedStructNullable(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedStructNullable(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerializedStructNullable(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync* name: ReadSerializedStructNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructNullableAsync_ @@ -4335,21 +7035,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync nameWithType: StreamExtensions.ReadSerializedStructNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name: ReadSerializedStructNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructNullableAsync__1_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync``1(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: ReadSerializedStructNullableAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.ReadSerializedStructNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.ReadSerializedStructNullableAsync(Of T)(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion(Stream) - name: ReadSerializerVersion(Stream) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializerVersion_Stream_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion(Stream) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion(Stream) - nameWithType: StreamExtensions.ReadSerializerVersion(Stream) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializedStructNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializedStructNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadSerializedStructNullableAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializedStructNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializedStructNullableAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadSerializedStructNullableAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializerVersion(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializerVersion_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializerVersion(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion* name: ReadSerializerVersion href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializerVersion_ @@ -4357,12 +7057,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersion nameWithType: StreamExtensions.ReadSerializerVersion -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync(Stream,CancellationToken) - name: ReadSerializerVersionAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializerVersionAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync(Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync(Stream, CancellationToken) - nameWithType: StreamExtensions.ReadSerializerVersionAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadSerializerVersionAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializerVersionAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadSerializerVersionAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync* name: ReadSerializerVersionAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadSerializerVersionAsync_ @@ -4370,15 +7070,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadSerializerVersionAsync nameWithType: StreamExtensions.ReadSerializerVersionAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShort(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadShort(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShort_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShort(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadShort(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShort(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadShort(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadShort(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadShort(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShort(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadShort(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShort_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShort(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShort(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadShort(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShort* name: ReadShort href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShort_ @@ -4386,15 +7083,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShort nameWithType: StreamExtensions.ReadShort -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadShortAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadShortAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadShortAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadShortAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadShortAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadShortAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync* name: ReadShortAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortAsync_ @@ -4402,15 +7096,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortAsync nameWithType: StreamExtensions.ReadShortAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadShortNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadShortNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadShortNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadShortNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadShortNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadShortNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable* name: ReadShortNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortNullable_ @@ -4418,15 +7109,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullable nameWithType: StreamExtensions.ReadShortNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadShortNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadShortNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadShortNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadShortNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadShortNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadShortNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync* name: ReadShortNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadShortNullableAsync_ @@ -4434,15 +7122,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync nameWithType: StreamExtensions.ReadShortNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name: ReadStream(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStream_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name.vb: ReadStream(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64) - nameWithType: StreamExtensions.ReadStream(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) - nameWithType.vb: StreamExtensions.ReadStream(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name: ReadStream(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStream_Stream_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Nullable_System_Int32__System_Int64_System_Int64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name.vb: ReadStream(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable, System.Int64, System.Int64) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable(Of System.Int32), System.Int64, System.Int64) + nameWithType: StreamExtensions.ReadStream(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + nameWithType.vb: StreamExtensions.ReadStream(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream* name: ReadStream href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStream_ @@ -4450,15 +7138,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStream nameWithType: StreamExtensions.ReadStream -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name: ReadStreamAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamAsync_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name.vb: ReadStreamAsync(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64, CancellationToken) - nameWithType: StreamExtensions.ReadStreamAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStreamAsync(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name: ReadStreamAsync(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamAsync_Stream_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Nullable_System_Int32__System_Int64_System_Int64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name.vb: ReadStreamAsync(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable, System.Int64, System.Int64) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable(Of System.Int32), System.Int64, System.Int64) + nameWithType: StreamExtensions.ReadStreamAsync(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + nameWithType.vb: StreamExtensions.ReadStreamAsync(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync* name: ReadStreamAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamAsync_ @@ -4466,15 +7154,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamAsync nameWithType: StreamExtensions.ReadStreamAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name: ReadStreamNullable(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullable_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64) - name.vb: ReadStreamNullable(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64) - nameWithType: StreamExtensions.ReadStreamNullable(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64) - nameWithType.vb: StreamExtensions.ReadStreamNullable(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name: ReadStreamNullable(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullable_Stream_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Nullable_System_Int32__System_Int64_System_Int64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name.vb: ReadStreamNullable(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable, System.Int64, System.Int64) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable(Of System.Int32), System.Int64, System.Int64) + nameWithType: StreamExtensions.ReadStreamNullable(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + nameWithType.vb: StreamExtensions.ReadStreamNullable(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable* name: ReadStreamNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullable_ @@ -4482,6 +7170,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullable nameWithType: StreamExtensions.ReadStreamNullable +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name: ReadStreamNullableAsync(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullableAsync_Stream_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Nullable_System_Int32__System_Int64_System_Int64_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Stream,Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32},System.Int64,System.Int64) + name.vb: ReadStreamNullableAsync(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable, System.Int64, System.Int64) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Stream, Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable(Of System.Int32), System.Int64, System.Int64) + nameWithType: StreamExtensions.ReadStreamNullableAsync(Stream, Stream, IDeserializationContext, Nullable, Int64, Int64) + nameWithType.vb: StreamExtensions.ReadStreamNullableAsync(Stream, Stream, IDeserializationContext, Nullable(Of Int32), Int64, Int64) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync* name: ReadStreamNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullableAsync_ @@ -4489,24 +7186,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync nameWithType: StreamExtensions.ReadStreamNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync``1(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name: ReadStreamNullableAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStreamNullableAsync__1_Stream_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__System_Int64_System_Int64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync``1(Stream,Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},System.Int64,System.Int64,CancellationToken) - name.vb: ReadStreamNullableAsync(Of T)(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Stream, Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, System.Int64, System.Int64, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStreamNullableAsync(Of T)(Stream, Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), System.Int64, System.Int64, CancellationToken) - nameWithType: StreamExtensions.ReadStreamNullableAsync(Stream, Stream, Nullable, ArrayPool, Nullable, Int64, Int64, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStreamNullableAsync(Of T)(Stream, Stream, Nullable(Of Int32), ArrayPool(Of Byte), Nullable(Of Int32), Int64, Int64, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadString(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadString(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadString(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadString(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString* name: ReadString href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString_ @@ -4514,15 +7199,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString nameWithType: StreamExtensions.ReadString -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadString16(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadString16(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadString16(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadString16(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString16(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString16(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16* name: ReadString16 href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16_ @@ -4530,15 +7212,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16 nameWithType: StreamExtensions.ReadString16 -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadString16Async(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16Async_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadString16Async(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadString16Async(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadString16Async(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString16Async(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16Async_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString16Async(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async* name: ReadString16Async href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16Async_ @@ -4546,15 +7225,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Async nameWithType: StreamExtensions.ReadString16Async -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadString16Nullable(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16Nullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadString16Nullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadString16Nullable(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadString16Nullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString16Nullable(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16Nullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString16Nullable(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable* name: ReadString16Nullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16Nullable_ @@ -4562,15 +7238,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16Nullable nameWithType: StreamExtensions.ReadString16Nullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadString16NullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16NullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadString16NullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadString16NullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadString16NullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString16NullableAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16NullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString16NullableAsync(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync* name: ReadString16NullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString16NullableAsync_ @@ -4578,15 +7251,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString16NullableAsync nameWithType: StreamExtensions.ReadString16NullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadString32(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadString32(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadString32(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadString32(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString32(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString32(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32* name: ReadString32 href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32_ @@ -4594,15 +7264,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32 nameWithType: StreamExtensions.ReadString32 -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadString32Async(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32Async_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadString32Async(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadString32Async(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadString32Async(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString32Async(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32Async_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString32Async(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async* name: ReadString32Async href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32Async_ @@ -4610,15 +7277,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Async nameWithType: StreamExtensions.ReadString32Async -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadString32Nullable(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32Nullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadString32Nullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadString32Nullable(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadString32Nullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString32Nullable(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32Nullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString32Nullable(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable* name: ReadString32Nullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32Nullable_ @@ -4626,15 +7290,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32Nullable nameWithType: StreamExtensions.ReadString32Nullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadString32NullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32NullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadString32NullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadString32NullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadString32NullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadString32NullableAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32NullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadString32NullableAsync(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync* name: ReadString32NullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadString32NullableAsync_ @@ -4642,15 +7303,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadString32NullableAsync nameWithType: StreamExtensions.ReadString32NullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadStringAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadStringAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadStringAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStringAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadStringAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadStringAsync(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync* name: ReadStringAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringAsync_ @@ -4658,15 +7316,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringAsync nameWithType: StreamExtensions.ReadStringAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name: ReadStringNullable(Stream, Nullable, ArrayPool, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32) - name.vb: ReadStringNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32) - nameWithType: StreamExtensions.ReadStringNullable(Stream, Nullable, ArrayPool, Int32, Int32) - nameWithType.vb: StreamExtensions.ReadStringNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadStringNullable(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadStringNullable(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable* name: ReadStringNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringNullable_ @@ -4674,15 +7329,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullable nameWithType: StreamExtensions.ReadStringNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name: ReadStringNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},System.Int32,System.Int32,CancellationToken) - name.vb: ReadStringNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Int32, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), System.Int32, System.Int32, CancellationToken) - nameWithType: StreamExtensions.ReadStringNullableAsync(Stream, Nullable, ArrayPool, Int32, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStringNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + name: ReadStringNullableAsync(Stream, IDeserializationContext, Int32, Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32, System.Int32) + nameWithType: StreamExtensions.ReadStringNullableAsync(Stream, IDeserializationContext, Int32, Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStringNullableAsync* name: ReadStringNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStringNullableAsync_ @@ -4697,15 +7349,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct nameWithType: StreamExtensions.ReadStruct -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte}) - name: ReadStruct(Stream, Nullable, Byte[], ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStruct__1_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadStruct(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct(Of T)(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadStruct(Stream, Nullable, Byte[], ArrayPool) - nameWithType.vb: StreamExtensions.ReadStruct(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadStruct(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStruct__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadStruct(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStruct(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadStruct(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadStruct(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync* name: ReadStructAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructAsync_ @@ -4713,15 +7365,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync nameWithType: StreamExtensions.ReadStructAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadStructAsync(Stream, Nullable, Byte[], ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructAsync__1_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadStructAsync(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadStructAsync(Stream, Nullable, Byte[], ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStructAsync(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadStructAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadStructAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadStructAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadStructAsync(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructAsyncMethod name: ReadStructAsyncMethod href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructAsyncMethod @@ -4741,15 +7393,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable nameWithType: StreamExtensions.ReadStructNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte}) - name: ReadStructNullable(Stream, Nullable, Byte[], ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructNullable__1_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadStructNullable(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable(Of T)(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadStructNullable(Stream, Nullable, Byte[], ArrayPool) - nameWithType.vb: StreamExtensions.ReadStructNullable(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadStructNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructNullable__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadStructNullable(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullable(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadStructNullable(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadStructNullable(Of T)(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync* name: ReadStructNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructNullableAsync_ @@ -4757,24 +7409,97 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync nameWithType: StreamExtensions.ReadStructNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadStructNullableAsync(Stream, Nullable, Byte[], ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructNullableAsync__1_Stream_System_Nullable_System_Int32__System_Byte___System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync``1(Stream,System.Nullable{System.Int32},System.Byte[],System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadStructNullableAsync(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync(Stream, System.Nullable, System.Byte[], System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync(Of T)(Stream, System.Nullable(Of System.Int32), System.Byte(), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadStructNullableAsync(Stream, Nullable, Byte[], ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadStructNullableAsync(Of T)(Stream, Nullable(Of Int32), Byte(), ArrayPool(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadUInt(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUInt_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadUInt(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadUInt(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadUInt(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadStructNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructNullableAsync__1_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync``1(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: ReadStructNullableAsync(Of T)(Stream, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsync(Of T)(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadStructNullableAsync(Stream, IDeserializationContext) + nameWithType.vb: StreamExtensions.ReadStructNullableAsync(Of T)(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsyncMethod + name: ReadStructNullableAsyncMethod + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructNullableAsyncMethod + commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsyncMethod + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableAsyncMethod + nameWithType: StreamExtensions.ReadStructNullableAsyncMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableMethod + name: ReadStructNullableMethod + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadStructNullableMethod + commentId: F:wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableMethod + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadStructNullableMethod + nameWithType: StreamExtensions.ReadStructNullableMethod +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadType(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadType(Stream, Int32, ObjectTypes, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadType_Stream_System_Int32_wan24_StreamSerializerExtensions_ObjectTypes_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadType(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadType(Stream, System.Int32, wan24.StreamSerializerExtensions.ObjectTypes, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadType(Stream, Int32, ObjectTypes, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadType(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadType(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadType_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadType(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadType(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadType(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadType* + name: ReadType + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadType_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadType + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadType + nameWithType: StreamExtensions.ReadType +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadTypeAsync(Stream, Int32, ObjectTypes, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadTypeAsync_Stream_System_Int32_wan24_StreamSerializerExtensions_ObjectTypes_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.ObjectTypes,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync(Stream, System.Int32, wan24.StreamSerializerExtensions.ObjectTypes, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadTypeAsync(Stream, Int32, ObjectTypes, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadTypeAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadTypeAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadTypeAsync(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync* + name: ReadTypeAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadTypeAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeAsync + nameWithType: StreamExtensions.ReadTypeAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadTypeNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadTypeNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadTypeNullable(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullable* + name: ReadTypeNullable + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadTypeNullable_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullable + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullable + nameWithType: StreamExtensions.ReadTypeNullable +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadTypeNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadTypeNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadTypeNullableAsync(Stream, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullableAsync* + name: ReadTypeNullableAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadTypeNullableAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullableAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadTypeNullableAsync + nameWithType: StreamExtensions.ReadTypeNullableAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUInt(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUInt_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUInt(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt* name: ReadUInt href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUInt_ @@ -4782,15 +7507,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUInt nameWithType: StreamExtensions.ReadUInt -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadUIntAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadUIntAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadUIntAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadUIntAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUIntAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUIntAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync* name: ReadUIntAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntAsync_ @@ -4798,15 +7520,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntAsync nameWithType: StreamExtensions.ReadUIntAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadUIntNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadUIntNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadUIntNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadUIntNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUIntNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUIntNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable* name: ReadUIntNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntNullable_ @@ -4814,15 +7533,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullable nameWithType: StreamExtensions.ReadUIntNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadUIntNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadUIntNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadUIntNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadUIntNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUIntNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUIntNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync* name: ReadUIntNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUIntNullableAsync_ @@ -4830,15 +7546,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUIntNullableAsync nameWithType: StreamExtensions.ReadUIntNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULong(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadULong(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULong_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULong(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadULong(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULong(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadULong(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadULong(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadULong(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULong(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadULong(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULong_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULong(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULong(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadULong(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULong* name: ReadULong href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULong_ @@ -4846,15 +7559,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULong nameWithType: StreamExtensions.ReadULong -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadULongAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadULongAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadULongAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadULongAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadULongAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadULongAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync* name: ReadULongAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongAsync_ @@ -4862,15 +7572,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongAsync nameWithType: StreamExtensions.ReadULongAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadULongNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadULongNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadULongNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadULongNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadULongNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadULongNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable* name: ReadULongNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongNullable_ @@ -4878,15 +7585,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullable nameWithType: StreamExtensions.ReadULongNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadULongNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadULongNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadULongNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadULongNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadULongNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadULongNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync* name: ReadULongNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadULongNullableAsync_ @@ -4894,15 +7598,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadULongNullableAsync nameWithType: StreamExtensions.ReadULongNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadUShort(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShort_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadUShort(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadUShort(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadUShort(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUShort(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShort_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUShort(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort* name: ReadUShort href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShort_ @@ -4910,15 +7611,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShort nameWithType: StreamExtensions.ReadUShort -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadUShortAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadUShortAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadUShortAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadUShortAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUShortAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUShortAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync* name: ReadUShortAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortAsync_ @@ -4926,15 +7624,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortAsync nameWithType: StreamExtensions.ReadUShortAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name: ReadUShortNullable(Stream, Nullable, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortNullable_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte}) - name.vb: ReadUShortNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable(Stream, System.Nullable, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.ReadUShortNullable(Stream, Nullable, ArrayPool) - nameWithType.vb: StreamExtensions.ReadUShortNullable(Stream, Nullable(Of Int32), ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUShortNullable(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortNullable_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUShortNullable(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable* name: ReadUShortNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortNullable_ @@ -4942,15 +7637,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullable nameWithType: StreamExtensions.ReadUShortNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: ReadUShortNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortNullableAsync_Stream_System_Nullable_System_Int32__System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync(Stream,System.Nullable{System.Int32},System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: ReadUShortNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync(Stream, System.Nullable(Of System.Int32), System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.ReadUShortNullableAsync(Stream, Nullable, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.ReadUShortNullableAsync(Stream, Nullable(Of Int32), ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + name: ReadUShortNullableAsync(Stream, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortNullableAsync_Stream_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync(Stream,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync(Stream, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamExtensions.ReadUShortNullableAsync(Stream, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync* name: ReadUShortNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_ReadUShortNullableAsync_ @@ -4958,78 +7650,90 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync nameWithType: StreamExtensions.ReadUShortNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Boolean) - name: Write(Stream, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Boolean) - nameWithType: StreamExtensions.Write(Stream, Boolean) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Byte) - name: Write(Stream, Byte) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Byte_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Byte) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Byte) - nameWithType: StreamExtensions.Write(Stream, Byte) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Decimal) - name: Write(Stream, Decimal) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Decimal_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Decimal) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Decimal) - nameWithType: StreamExtensions.Write(Stream, Decimal) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Double) - name: Write(Stream, Double) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Double_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Double) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Double) - nameWithType: StreamExtensions.Write(Stream, Double) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int16) - name: Write(Stream, Int16) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int16_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int16) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int16) - nameWithType: StreamExtensions.Write(Stream, Int16) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int32) - name: Write(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int32) - nameWithType: StreamExtensions.Write(Stream, Int32) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int64) - name: Write(Stream, Int64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int64) - nameWithType: StreamExtensions.Write(Stream, Int64) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.SByte) - name: Write(Stream, SByte) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_SByte_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.SByte) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.SByte) - nameWithType: StreamExtensions.Write(Stream, SByte) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Single) - name: Write(Stream, Single) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Single_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Single) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Single) - nameWithType: StreamExtensions.Write(Stream, Single) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt16) - name: Write(Stream, UInt16) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt16_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt16) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt16) - nameWithType: StreamExtensions.Write(Stream, UInt16) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt32) - name: Write(Stream, UInt32) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt32_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt32) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt32) - nameWithType: StreamExtensions.Write(Stream, UInt32) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt64) - name: Write(Stream, UInt64) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt64_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt64) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt64) - nameWithType: StreamExtensions.Write(Stream, UInt64) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate + name: StreamExtensions.StreamNullableWiter_Delegate + href: api/wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate + fullName: wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate + nameWithType: StreamExtensions.StreamNullableWiter_Delegate +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Byte,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Byte, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Byte_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Byte,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Byte, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Byte, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Decimal,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Decimal, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Decimal_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Decimal,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Decimal, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Decimal, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Double,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Double, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Double_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Double,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Double, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Double, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int16,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Int16, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int16_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int16,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int16, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Int16, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int32,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Int32, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int32_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int32,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int32, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Int32, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int64,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Int64, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Int64_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Int64,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Int64, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Int64, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.SByte,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, SByte, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_SByte_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.SByte,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.SByte, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, SByte, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Single,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Single, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_Single_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.Single,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.Single, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Single, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt16,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, UInt16, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt16_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt16,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt16, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, UInt16, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt32,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, UInt32, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt32_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt32,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt32, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, UInt32, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt64,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, UInt64, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_System_UInt64_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,System.UInt64,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, System.UInt64, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, UInt64, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,Type,wan24.StreamSerializerExtensions.ISerializationContext) + name: Write(Stream, Type, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_Stream_Type_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream,Type,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write(Stream, Type, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.Write(Stream, Type, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.Write* name: Write href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_Write_ @@ -5037,12 +7741,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.Write nameWithType: StreamExtensions.Write -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object) - name: WriteAny(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAny_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream, System.Object) - nameWithType: StreamExtensions.WriteAny(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAny(Stream, Object, Nullable, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAny_Stream_System_Object_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAny(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream, System.Object, System.Nullable, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAny(Stream, Object, Nullable, Boolean, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAny(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAny(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAny_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAny(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny* name: WriteAny href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAny_ @@ -5050,21 +7763,39 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAny nameWithType: StreamExtensions.WriteAny -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,CancellationToken) - name: WriteAnyAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,CancellationToken) - name: WriteAnyAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteAnyAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAnyAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyAsync(Stream, Object, Nullable, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Stream_System_Object_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyAsync(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream, System.Object, System.Nullable, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyAsync(Stream, Object, Nullable, Boolean, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyAsync(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyAsync(Task, Object, Nullable, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Task_Stream__System_Object_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyAsync(Task(Of Stream), Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task, System.Object, System.Nullable, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task(Of Stream), System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyAsync(Task, Object, Nullable, Boolean, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyAsync(Task(Of Stream), Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync* name: WriteAnyAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyAsync_ @@ -5072,12 +7803,53 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync nameWithType: StreamExtensions.WriteAnyAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object) - name: WriteAnyNullable(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullable_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream, System.Object) - nameWithType: StreamExtensions.WriteAnyNullable(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeader* + name: WriteAnyItemHeader + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyItemHeader_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeader + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeader + nameWithType: StreamExtensions.WriteAnyItemHeader +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeader``1(wan24.StreamSerializerExtensions.ItemSerializerContext,``0,Type) + name: WriteAnyItemHeader(ItemSerializerContext, T, Type) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyItemHeader__1_wan24_StreamSerializerExtensions_ItemSerializerContext___0_Type_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeader``1(wan24.StreamSerializerExtensions.ItemSerializerContext,``0,Type) + name.vb: WriteAnyItemHeader(Of T)(ItemSerializerContext, T, Type) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeader(wan24.StreamSerializerExtensions.ItemSerializerContext, T, Type) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeader(Of T)(wan24.StreamSerializerExtensions.ItemSerializerContext, T, Type) + nameWithType: StreamExtensions.WriteAnyItemHeader(ItemSerializerContext, T, Type) + nameWithType.vb: StreamExtensions.WriteAnyItemHeader(Of T)(ItemSerializerContext, T, Type) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeaderAsync* + name: WriteAnyItemHeaderAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyItemHeaderAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeaderAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeaderAsync + nameWithType: StreamExtensions.WriteAnyItemHeaderAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeaderAsync``1(wan24.StreamSerializerExtensions.ItemSerializerContext,``0,Type) + name: WriteAnyItemHeaderAsync(ItemSerializerContext, T, Type) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyItemHeaderAsync__1_wan24_StreamSerializerExtensions_ItemSerializerContext___0_Type_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeaderAsync``1(wan24.StreamSerializerExtensions.ItemSerializerContext,``0,Type) + name.vb: WriteAnyItemHeaderAsync(Of T)(ItemSerializerContext, T, Type) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeaderAsync(wan24.StreamSerializerExtensions.ItemSerializerContext, T, Type) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyItemHeaderAsync(Of T)(wan24.StreamSerializerExtensions.ItemSerializerContext, T, Type) + nameWithType: StreamExtensions.WriteAnyItemHeaderAsync(ItemSerializerContext, T, Type) + nameWithType.vb: StreamExtensions.WriteAnyItemHeaderAsync(Of T)(ItemSerializerContext, T, Type) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyNullable(Stream, Object, Nullable, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullable_Stream_System_Object_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyNullable(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream, System.Object, System.Nullable, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyNullable(Stream, Object, Nullable, Boolean, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyNullable(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyNullable(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullable_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyNullable(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable* name: WriteAnyNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullable_ @@ -5085,21 +7857,39 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullable nameWithType: StreamExtensions.WriteAnyNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,CancellationToken) - name: WriteAnyNullableAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyNullableAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,CancellationToken) - name: WriteAnyNullableAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteAnyNullableAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyNullableAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyNullableAsync(Stream, Object, Nullable, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Stream_System_Object_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyNullableAsync(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream, System.Object, System.Nullable, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyNullableAsync(Stream, Object, Nullable, Boolean, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyNullableAsync(Stream, Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyNullableAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyNullableAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyNullableAsync(Task, Object, Nullable, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Task_Stream__System_Object_System_Nullable_wan24_StreamSerializerExtensions_ObjectTypes__System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,System.Nullable{wan24.StreamSerializerExtensions.ObjectTypes},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyNullableAsync(Task(Of Stream), Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task, System.Object, System.Nullable, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.ObjectTypes), System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyNullableAsync(Task, Object, Nullable, Boolean, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), Object, Nullable(Of ObjectTypes), Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyNullableAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyNullableAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyNullableAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyNullableAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync* name: WriteAnyNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyNullableAsync_ @@ -5107,12 +7897,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync nameWithType: StreamExtensions.WriteAnyNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream,System.Object) - name: WriteAnyObject(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObject_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream, System.Object) - nameWithType: StreamExtensions.WriteAnyObject(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyObject(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObject_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyObject(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject* name: WriteAnyObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObject_ @@ -5120,21 +7910,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObject nameWithType: StreamExtensions.WriteAnyObject -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream,System.Object,CancellationToken) - name: WriteAnyObjectAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyObjectAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task{Stream},System.Object,CancellationToken) - name: WriteAnyObjectAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteAnyObjectAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyObjectAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAnyObjectAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyObjectAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyObjectAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyObjectAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyObjectAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyObjectAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyObjectAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync* name: WriteAnyObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectAsync_ @@ -5142,12 +7932,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectAsync nameWithType: StreamExtensions.WriteAnyObjectAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream,System.Object) - name: WriteAnyObjectNullable(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullable_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream, System.Object) - nameWithType: StreamExtensions.WriteAnyObjectNullable(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyObjectNullable(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullable_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyObjectNullable(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable* name: WriteAnyObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullable_ @@ -5155,21 +7945,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullable nameWithType: StreamExtensions.WriteAnyObjectNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream,System.Object,CancellationToken) - name: WriteAnyObjectNullableAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task{Stream},System.Object,CancellationToken) - name: WriteAnyObjectNullableAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteAnyObjectNullableAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAnyObjectNullableAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyObjectNullableAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAnyObjectNullableAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAnyObjectNullableAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAnyObjectNullableAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAnyObjectNullableAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync* name: WriteAnyObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAnyObjectNullableAsync_ @@ -5177,12 +7967,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyObjectNullableAsync nameWithType: StreamExtensions.WriteAnyObjectNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream,Array) - name: WriteArray(Stream, Array) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArray_Stream_Array_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream,Array) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream, Array) - nameWithType: StreamExtensions.WriteArray(Stream, Array) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteArray(Stream, Array, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArray_Stream_Array_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray(Stream, Array, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteArray(Stream, Array, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray* name: WriteArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArray_ @@ -5190,21 +7980,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArray nameWithType: StreamExtensions.WriteArray -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream,Array,CancellationToken) - name: WriteArrayAsync(Stream, Array, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_Stream_Array_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream,Array,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream, Array, CancellationToken) - nameWithType: StreamExtensions.WriteArrayAsync(Stream, Array, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task{Stream},Array,CancellationToken) - name: WriteArrayAsync(Task, Array, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_Task_Stream__Array_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task{Stream},Array,CancellationToken) - name.vb: WriteArrayAsync(Task(Of Stream), Array, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task, Array, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task(Of Stream), Array, CancellationToken) - nameWithType: StreamExtensions.WriteArrayAsync(Task, Array, CancellationToken) - nameWithType.vb: StreamExtensions.WriteArrayAsync(Task(Of Stream), Array, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteArrayAsync(Stream, Array, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_Stream_Array_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Stream, Array, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteArrayAsync(Stream, Array, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task{Stream},Array,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteArrayAsync(Task, Array, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_Task_Stream__Array_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task{Stream},Array,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteArrayAsync(Task(Of Stream), Array, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task, Array, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync(Task(Of Stream), Array, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteArrayAsync(Task, Array, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteArrayAsync(Task(Of Stream), Array, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync* name: WriteArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayAsync_ @@ -5212,15 +8002,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayAsync nameWithType: StreamExtensions.WriteArrayAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream,System.Nullable{Array}) - name: WriteArrayNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullable_Stream_System_Nullable_Array__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream,System.Nullable{Array}) - name.vb: WriteArrayNullable(Stream, Nullable(Of Array)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream, System.Nullable(Of Array)) - nameWithType: StreamExtensions.WriteArrayNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteArrayNullable(Stream, Nullable(Of Array)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream,System.Nullable{Array},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteArrayNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullable_Stream_System_Nullable_Array__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream,System.Nullable{Array},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteArrayNullable(Stream, Nullable(Of Array), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable(Stream, System.Nullable(Of Array), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteArrayNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteArrayNullable(Stream, Nullable(Of Array), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable* name: WriteArrayNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullable_ @@ -5228,24 +8018,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullable nameWithType: StreamExtensions.WriteArrayNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream,System.Nullable{Array},CancellationToken) - name: WriteArrayNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_Stream_System_Nullable_Array__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream,System.Nullable{Array},CancellationToken) - name.vb: WriteArrayNullableAsync(Stream, Nullable(Of Array), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, System.Nullable(Of Array), CancellationToken) - nameWithType: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable(Of Array), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task{Stream},System.Nullable{Array},CancellationToken) - name: WriteArrayNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_Task_Stream__System_Nullable_Array__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task{Stream},System.Nullable{Array},CancellationToken) - name.vb: WriteArrayNullableAsync(Task(Of Stream), Nullable(Of Array), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task(Of Stream), System.Nullable(Of Array), CancellationToken) - nameWithType: StreamExtensions.WriteArrayNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Task(Of Stream), Nullable(Of Array), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream,System.Nullable{Array},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteArrayNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_Stream_System_Nullable_Array__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream,System.Nullable{Array},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteArrayNullableAsync(Stream, Nullable(Of Array), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Stream, System.Nullable(Of Array), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Stream, Nullable(Of Array), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task{Stream},System.Nullable{Array},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteArrayNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_Task_Stream__System_Nullable_Array__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task{Stream},System.Nullable{Array},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteArrayNullableAsync(Task(Of Stream), Nullable(Of Array), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync(Task(Of Stream), System.Nullable(Of Array), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteArrayNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteArrayNullableAsync(Task(Of Stream), Nullable(Of Array), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync* name: WriteArrayNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteArrayNullableAsync_ @@ -5253,186 +8043,201 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteArrayNullableAsync nameWithType: StreamExtensions.WriteArrayNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Boolean,CancellationToken) - name: WriteAsync(Stream, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Boolean,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Boolean, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Byte,CancellationToken) - name: WriteAsync(Stream, Byte, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Byte_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Byte,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Byte, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Byte, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Decimal,CancellationToken) - name: WriteAsync(Stream, Decimal, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Decimal_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Decimal,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Decimal, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Decimal, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Double,CancellationToken) - name: WriteAsync(Stream, Double, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Double_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Double,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Double, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Double, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int16,CancellationToken) - name: WriteAsync(Stream, Int16, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Int16_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int16,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Int16, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Int16, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int32,CancellationToken) - name: WriteAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Int32, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Int32, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int64,CancellationToken) - name: WriteAsync(Stream, Int64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Int64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int64,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Int64, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Int64, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.SByte,CancellationToken) - name: WriteAsync(Stream, SByte, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_SByte_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.SByte,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.SByte, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, SByte, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Single,CancellationToken) - name: WriteAsync(Stream, Single, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Single_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Single,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Single, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, Single, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt16,CancellationToken) - name: WriteAsync(Stream, UInt16, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_UInt16_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt16,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.UInt16, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, UInt16, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt32,CancellationToken) - name: WriteAsync(Stream, UInt32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_UInt32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.UInt32, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, UInt32, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt64,CancellationToken) - name: WriteAsync(Stream, UInt64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_UInt64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt64,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.UInt64, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Stream, UInt64, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Boolean,CancellationToken) - name: WriteAsync(Task, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Boolean,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Boolean, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Byte,CancellationToken) - name: WriteAsync(Task, Byte, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Byte_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Byte,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Byte, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Byte, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Byte, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Byte, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Byte, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Decimal,CancellationToken) - name: WriteAsync(Task, Decimal, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Decimal_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Decimal,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Decimal, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Decimal, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Decimal, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Decimal, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Decimal, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Double,CancellationToken) - name: WriteAsync(Task, Double, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Double_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Double,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Double, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Double, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Double, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Double, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Double, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int16,CancellationToken) - name: WriteAsync(Task, Int16, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int16_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int16,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Int16, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int16, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int16, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Int16, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int16, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int32,CancellationToken) - name: WriteAsync(Task, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int32,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int32, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Int32, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int32, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int64,CancellationToken) - name: WriteAsync(Task, Int64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int64,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Int64, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int64, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int64, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Int64, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int64, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.SByte,CancellationToken) - name: WriteAsync(Task, SByte, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_SByte_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.SByte,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), SByte, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.SByte, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.SByte, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, SByte, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), SByte, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Single,CancellationToken) - name: WriteAsync(Task, Single, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Single_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Single,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), Single, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Single, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Single, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, Single, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Single, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt16,CancellationToken) - name: WriteAsync(Task, UInt16, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt16_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt16,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), UInt16, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt16, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt16, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, UInt16, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt16, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt32,CancellationToken) - name: WriteAsync(Task, UInt32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt32,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), UInt32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt32, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt32, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, UInt32, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt32, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt64,CancellationToken) - name: WriteAsync(Task, UInt64, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt64_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt64,CancellationToken) - name.vb: WriteAsync(Task(Of Stream), UInt64, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt64, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt64, CancellationToken) - nameWithType: StreamExtensions.WriteAsync(Task, UInt64, CancellationToken) - nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt64, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Byte,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Byte, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Byte_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Byte,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Byte, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Byte, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Decimal,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Decimal, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Decimal_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Decimal,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Decimal, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Decimal, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Double,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Double, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Double_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Double,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Double, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Double, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int16,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Int16, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Int16_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int16,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Int16, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Int16, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Int32, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Int32_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int32,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Int32, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Int32, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int64,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Int64, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Int64_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Int64,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Int64, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Int64, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.SByte,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, SByte, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_SByte_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.SByte,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.SByte, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, SByte, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Single,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Single, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_Single_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.Single,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.Single, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Single, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt16,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, UInt16, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_UInt16_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt16,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.UInt16, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, UInt16, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt32,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, UInt32, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_UInt32_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt32,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.UInt32, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, UInt32, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt64,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, UInt64, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_System_UInt64_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,System.UInt64,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, System.UInt64, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, UInt64, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,Type,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Stream, Type, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Stream_Type_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream,Type,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Stream, Type, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Stream, Type, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Boolean, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Boolean_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Boolean,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Boolean, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Boolean, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Boolean, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Boolean, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Byte,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Byte, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Byte_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Byte,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Byte, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Byte, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Byte, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Byte, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Byte, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Decimal,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Decimal, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Decimal_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Decimal,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Decimal, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Decimal, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Decimal, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Decimal, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Decimal, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Double,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Double, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Double_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Double,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Double, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Double, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Double, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Double, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Double, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int16,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Int16, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int16_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int16,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Int16, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int16, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int16, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Int16, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int16, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int32,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Int32, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int32_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int32,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Int32, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int32, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int32, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Int32, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int32, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int64,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Int64, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Int64_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Int64,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Int64, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Int64, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Int64, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Int64, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Int64, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.SByte,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, SByte, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_SByte_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.SByte,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), SByte, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.SByte, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.SByte, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, SByte, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), SByte, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Single,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Single, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_Single_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.Single,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Single, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.Single, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.Single, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Single, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Single, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt16,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, UInt16, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt16_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt16,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), UInt16, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt16, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt16, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, UInt16, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt16, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt32,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, UInt32, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt32_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt32,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), UInt32, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt32, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt32, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, UInt32, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt32, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt64,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, UInt64, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__System_UInt64_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},System.UInt64,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), UInt64, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, System.UInt64, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), System.UInt64, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, UInt64, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), UInt64, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},Type,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteAsync(Task, Type, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_Task_Stream__Type_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task{Stream},Type,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteAsync(Task(Of Stream), Type, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task, Type, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync(Task(Of Stream), Type, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteAsync(Task, Type, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteAsync(Task(Of Stream), Type, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync* name: WriteAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteAsync_ @@ -5440,24 +8245,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync nameWithType: StreamExtensions.WriteAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,ReadOnlySpan{System.Byte}) - name: WriteBytes(Stream, ReadOnlySpan) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_Stream_ReadOnlySpan_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,ReadOnlySpan{System.Byte}) - name.vb: WriteBytes(Stream, ReadOnlySpan(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, ReadOnlySpan) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, ReadOnlySpan(Of System.Byte)) - nameWithType: StreamExtensions.WriteBytes(Stream, ReadOnlySpan) - nameWithType.vb: StreamExtensions.WriteBytes(Stream, ReadOnlySpan(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,Span{System.Byte}) - name: WriteBytes(Stream, Span) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_Stream_Span_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,Span{System.Byte}) - name.vb: WriteBytes(Stream, Span(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, Span) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, Span(Of System.Byte)) - nameWithType: StreamExtensions.WriteBytes(Stream, Span) - nameWithType.vb: StreamExtensions.WriteBytes(Stream, Span(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,ReadOnlySpan{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytes(Stream, ReadOnlySpan, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_Stream_ReadOnlySpan_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,ReadOnlySpan{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytes(Stream, ReadOnlySpan(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, ReadOnlySpan, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, ReadOnlySpan(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytes(Stream, ReadOnlySpan, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytes(Stream, ReadOnlySpan(Of Byte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,Span{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytes(Stream, Span, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_Stream_Span_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream,Span{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytes(Stream, Span(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, Span, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes(Stream, Span(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytes(Stream, Span, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytes(Stream, Span(Of Byte), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes* name: WriteBytes href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytes_ @@ -5465,42 +8270,42 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytes nameWithType: StreamExtensions.WriteBytes -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,Memory{System.Byte},CancellationToken) - name: WriteBytesAsync(Stream, Memory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Stream_Memory_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,Memory{System.Byte},CancellationToken) - name.vb: WriteBytesAsync(Stream, Memory(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, Memory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, Memory(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.WriteBytesAsync(Stream, Memory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteBytesAsync(Stream, Memory(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,ReadOnlyMemory{System.Byte},CancellationToken) - name: WriteBytesAsync(Stream, ReadOnlyMemory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Stream_ReadOnlyMemory_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,ReadOnlyMemory{System.Byte},CancellationToken) - name.vb: WriteBytesAsync(Stream, ReadOnlyMemory(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},Memory{System.Byte},CancellationToken) - name: WriteBytesAsync(Task, Memory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Task_Stream__Memory_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},Memory{System.Byte},CancellationToken) - name.vb: WriteBytesAsync(Task(Of Stream), Memory(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task, Memory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task(Of Stream), Memory(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.WriteBytesAsync(Task, Memory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteBytesAsync(Task(Of Stream), Memory(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},ReadOnlyMemory{System.Byte},CancellationToken) - name: WriteBytesAsync(Task, ReadOnlyMemory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Task_Stream__ReadOnlyMemory_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},ReadOnlyMemory{System.Byte},CancellationToken) - name.vb: WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task, ReadOnlyMemory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.WriteBytesAsync(Task, ReadOnlyMemory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,Memory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytesAsync(Stream, Memory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Stream_Memory_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,Memory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytesAsync(Stream, Memory(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, Memory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, Memory(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytesAsync(Stream, Memory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytesAsync(Stream, Memory(Of Byte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,ReadOnlyMemory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytesAsync(Stream, ReadOnlyMemory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Stream_ReadOnlyMemory_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream,ReadOnlyMemory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytesAsync(Stream, ReadOnlyMemory(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytesAsync(Stream, ReadOnlyMemory(Of Byte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},Memory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytesAsync(Task, Memory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Task_Stream__Memory_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},Memory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytesAsync(Task(Of Stream), Memory(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task, Memory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task(Of Stream), Memory(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytesAsync(Task, Memory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytesAsync(Task(Of Stream), Memory(Of Byte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},ReadOnlyMemory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytesAsync(Task, ReadOnlyMemory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_Task_Stream__ReadOnlyMemory_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task{Stream},ReadOnlyMemory{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task, ReadOnlyMemory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytesAsync(Task, ReadOnlyMemory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytesAsync(Task(Of Stream), ReadOnlyMemory(Of Byte), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync* name: WriteBytesAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesAsync_ @@ -5508,15 +8313,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync nameWithType: StreamExtensions.WriteBytesAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream,System.Byte[]) - name: WriteBytesNullable(Stream, Byte[]) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullable_Stream_System_Byte___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream,System.Byte[]) - name.vb: WriteBytesNullable(Stream, Byte()) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream, System.Byte[]) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream, System.Byte()) - nameWithType: StreamExtensions.WriteBytesNullable(Stream, Byte[]) - nameWithType.vb: StreamExtensions.WriteBytesNullable(Stream, Byte()) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream,System.Byte[],wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytesNullable(Stream, Byte[], ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullable_Stream_System_Byte___wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream,System.Byte[],wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytesNullable(Stream, Byte(), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream, System.Byte[], wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable(Stream, System.Byte(), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytesNullable(Stream, Byte[], ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytesNullable(Stream, Byte(), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable* name: WriteBytesNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullable_ @@ -5524,24 +8329,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullable nameWithType: StreamExtensions.WriteBytesNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream,System.Byte[],CancellationToken) - name: WriteBytesNullableAsync(Stream, Byte[], CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_Stream_System_Byte___CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream,System.Byte[],CancellationToken) - name.vb: WriteBytesNullableAsync(Stream, Byte(), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream, System.Byte[], CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream, System.Byte(), CancellationToken) - nameWithType: StreamExtensions.WriteBytesNullableAsync(Stream, Byte[], CancellationToken) - nameWithType.vb: StreamExtensions.WriteBytesNullableAsync(Stream, Byte(), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task{Stream},System.Byte[],CancellationToken) - name: WriteBytesNullableAsync(Task, Byte[], CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_Task_Stream__System_Byte___CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task{Stream},System.Byte[],CancellationToken) - name.vb: WriteBytesNullableAsync(Task(Of Stream), Byte(), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task, System.Byte[], CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task(Of Stream), System.Byte(), CancellationToken) - nameWithType: StreamExtensions.WriteBytesNullableAsync(Task, Byte[], CancellationToken) - nameWithType.vb: StreamExtensions.WriteBytesNullableAsync(Task(Of Stream), Byte(), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream,System.Byte[],wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytesNullableAsync(Stream, Byte[], ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_Stream_System_Byte___wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream,System.Byte[],wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytesNullableAsync(Stream, Byte(), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream, System.Byte[], wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Stream, System.Byte(), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytesNullableAsync(Stream, Byte[], ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytesNullableAsync(Stream, Byte(), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task{Stream},System.Byte[],wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteBytesNullableAsync(Task, Byte[], ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_Task_Stream__System_Byte___wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task{Stream},System.Byte[],wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteBytesNullableAsync(Task(Of Stream), Byte(), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task, System.Byte[], wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync(Task(Of Stream), System.Byte(), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteBytesNullableAsync(Task, Byte[], ISerializationContext) + nameWithType.vb: StreamExtensions.WriteBytesNullableAsync(Task(Of Stream), Byte(), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync* name: WriteBytesNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteBytesNullableAsync_ @@ -5549,12 +8354,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync nameWithType: StreamExtensions.WriteBytesNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream,System.Collections.IDictionary) - name: WriteDict(Stream, IDictionary) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDict_Stream_System_Collections_IDictionary_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream,System.Collections.IDictionary) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream, System.Collections.IDictionary) - nameWithType: StreamExtensions.WriteDict(Stream, IDictionary) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteDict(Stream, IDictionary, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDict_Stream_System_Collections_IDictionary_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict(Stream, System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteDict(Stream, IDictionary, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict* name: WriteDict href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDict_ @@ -5562,21 +8367,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDict nameWithType: StreamExtensions.WriteDict -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream,System.Collections.IDictionary,CancellationToken) - name: WriteDictAsync(Stream, IDictionary, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_Stream_System_Collections_IDictionary_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream,System.Collections.IDictionary,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream, System.Collections.IDictionary, CancellationToken) - nameWithType: StreamExtensions.WriteDictAsync(Stream, IDictionary, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) - name: WriteDictAsync(Task, IDictionary, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_Task_Stream__System_Collections_IDictionary_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) - name.vb: WriteDictAsync(Task(Of Stream), IDictionary, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task, System.Collections.IDictionary, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task(Of Stream), System.Collections.IDictionary, CancellationToken) - nameWithType: StreamExtensions.WriteDictAsync(Task, IDictionary, CancellationToken) - nameWithType.vb: StreamExtensions.WriteDictAsync(Task(Of Stream), IDictionary, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteDictAsync(Stream, IDictionary, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_Stream_System_Collections_IDictionary_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Stream, System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteDictAsync(Stream, IDictionary, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task{Stream},System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteDictAsync(Task, IDictionary, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_Task_Stream__System_Collections_IDictionary_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task{Stream},System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteDictAsync(Task(Of Stream), IDictionary, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task, System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync(Task(Of Stream), System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteDictAsync(Task, IDictionary, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteDictAsync(Task(Of Stream), IDictionary, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync* name: WriteDictAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictAsync_ @@ -5584,12 +8389,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictAsync nameWithType: StreamExtensions.WriteDictAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream,System.Collections.IDictionary) - name: WriteDictNullable(Stream, IDictionary) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullable_Stream_System_Collections_IDictionary_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream,System.Collections.IDictionary) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream, System.Collections.IDictionary) - nameWithType: StreamExtensions.WriteDictNullable(Stream, IDictionary) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteDictNullable(Stream, IDictionary, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullable_Stream_System_Collections_IDictionary_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable(Stream, System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteDictNullable(Stream, IDictionary, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable* name: WriteDictNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullable_ @@ -5597,21 +8402,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullable nameWithType: StreamExtensions.WriteDictNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream,System.Collections.IDictionary,CancellationToken) - name: WriteDictNullableAsync(Stream, IDictionary, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_Stream_System_Collections_IDictionary_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream,System.Collections.IDictionary,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream, System.Collections.IDictionary, CancellationToken) - nameWithType: StreamExtensions.WriteDictNullableAsync(Stream, IDictionary, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) - name: WriteDictNullableAsync(Task, IDictionary, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_Task_Stream__System_Collections_IDictionary_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task{Stream},System.Collections.IDictionary,CancellationToken) - name.vb: WriteDictNullableAsync(Task(Of Stream), IDictionary, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task, System.Collections.IDictionary, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task(Of Stream), System.Collections.IDictionary, CancellationToken) - nameWithType: StreamExtensions.WriteDictNullableAsync(Task, IDictionary, CancellationToken) - nameWithType.vb: StreamExtensions.WriteDictNullableAsync(Task(Of Stream), IDictionary, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteDictNullableAsync(Stream, IDictionary, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_Stream_System_Collections_IDictionary_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream,System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Stream, System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteDictNullableAsync(Stream, IDictionary, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task{Stream},System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteDictNullableAsync(Task, IDictionary, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_Task_Stream__System_Collections_IDictionary_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task{Stream},System.Collections.IDictionary,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteDictNullableAsync(Task(Of Stream), IDictionary, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task, System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync(Task(Of Stream), System.Collections.IDictionary, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteDictNullableAsync(Task, IDictionary, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteDictNullableAsync(Task(Of Stream), IDictionary, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync* name: WriteDictNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteDictNullableAsync_ @@ -5619,12 +8424,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteDictNullableAsync nameWithType: StreamExtensions.WriteDictNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream,System.Object) - name: WriteEnum(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream, System.Object) - nameWithType: StreamExtensions.WriteEnum(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnum(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnum(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum* name: WriteEnum href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum_ @@ -5632,30 +8437,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum nameWithType: StreamExtensions.WriteEnum -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``1(Stream,``0) - name: WriteEnum(Stream, T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum__1_Stream___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``1(Stream,``0) - name.vb: WriteEnum(Of T)(Stream, T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream, T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Of T)(Stream, T) - nameWithType: StreamExtensions.WriteEnum(Stream, T) - nameWithType.vb: StreamExtensions.WriteEnum(Of T)(Stream, T) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream,System.Object,CancellationToken) - name: WriteEnumAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteEnumAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task{Stream},System.Object,CancellationToken) - name: WriteEnumAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteEnumAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteEnumAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteEnumAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnum(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnum__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnum(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnum(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnum(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnum(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnumAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnumAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync* name: WriteEnumAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync_ @@ -5663,30 +8468,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync nameWithType: StreamExtensions.WriteEnumAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Stream,``0,CancellationToken) - name: WriteEnumAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Stream,``0,CancellationToken) - name.vb: WriteEnumAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteEnumAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteEnumAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Task{Stream},``0,CancellationToken) - name: WriteEnumAsync(Task, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync__1_Task_Stream____0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Task{Stream},``0,CancellationToken) - name.vb: WriteEnumAsync(Of T)(Task(Of Stream), T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Of T)(Task(Of Stream), T, CancellationToken) - nameWithType: StreamExtensions.WriteEnumAsync(Task, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteEnumAsync(Of T)(Task(Of Stream), T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream,System.Object) - name: WriteEnumNullable(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream, System.Object) - nameWithType: StreamExtensions.WriteEnumNullable(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumAsync(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnumAsync(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumAsync(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnumAsync(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumAsync(Task, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumAsync__1_Task_Stream____0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnumAsync(Of T)(Task(Of Stream), T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Task, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumAsync(Of T)(Task(Of Stream), T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumAsync(Task, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnumAsync(Of T)(Task(Of Stream), T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumNullable(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumNullable(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable* name: WriteEnumNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable_ @@ -5694,30 +8499,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable nameWithType: StreamExtensions.WriteEnumNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``1(Stream,System.Nullable{``0}) - name: WriteEnumNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable__1_Stream_System_Nullable___0__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``1(Stream,System.Nullable{``0}) - name.vb: WriteEnumNullable(Of T)(Stream, Nullable(Of T)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Of T)(Stream, System.Nullable(Of T)) - nameWithType: StreamExtensions.WriteEnumNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteEnumNullable(Of T)(Stream, Nullable(Of T)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream,System.Object,CancellationToken) - name: WriteEnumNullableAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task{Stream},System.Object,CancellationToken) - name: WriteEnumNullableAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteEnumNullableAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteEnumNullableAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullable__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnumNullable(Of T)(Stream, Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullable(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnumNullable(Of T)(Stream, Nullable(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumNullableAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumNullableAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnumNullableAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumNullableAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync* name: WriteEnumNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync_ @@ -5725,30 +8530,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync nameWithType: StreamExtensions.WriteEnumNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) - name: WriteEnumNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync__1_Stream_System_Nullable___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) - name.vb: WriteEnumNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) - name: WriteEnumNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync__1_Task_Stream__System_Nullable___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) - name.vb: WriteEnumNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteEnumNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream,Array) - name: WriteFixedArray(Stream, Array) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray_Stream_Array_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream,Array) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, Array) - nameWithType: StreamExtensions.WriteFixedArray(Stream, Array) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnumNullableAsync(Of T)(Stream, Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Of T)(Stream, Nullable(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteEnumNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteEnumNullableAsync__1_Task_Stream__System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteEnumNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteEnumNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteEnumNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteEnumNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArray(Stream, Array, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray_Stream_Array_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, Array, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArray(Stream, Array, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray* name: WriteFixedArray href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray_ @@ -5756,39 +8561,39 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray nameWithType: StreamExtensions.WriteFixedArray -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,ReadOnlySpan{``0}) - name: WriteFixedArray(Stream, ReadOnlySpan) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__1_Stream_ReadOnlySpan___0__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,ReadOnlySpan{``0}) - name.vb: WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, ReadOnlySpan) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T)) - nameWithType: StreamExtensions.WriteFixedArray(Stream, ReadOnlySpan) - nameWithType.vb: StreamExtensions.WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,Span{``0}) - name: WriteFixedArray(Stream, Span) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__1_Stream_Span___0__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,Span{``0}) - name.vb: WriteFixedArray(Of T)(Stream, Span(Of T)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, Span) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T)) - nameWithType: StreamExtensions.WriteFixedArray(Stream, Span) - nameWithType.vb: StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream,Array,CancellationToken) - name: WriteFixedArrayAsync(Stream, Array, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_Stream_Array_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream,Array,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, Array, CancellationToken) - nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Array, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task{Stream},Array,CancellationToken) - name: WriteFixedArrayAsync(Task, Array, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_Task_Stream__Array_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task{Stream},Array,CancellationToken) - name.vb: WriteFixedArrayAsync(Task(Of Stream), Array, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, Array, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task(Of Stream), Array, CancellationToken) - nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, Array, CancellationToken) - nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Task(Of Stream), Array, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,ReadOnlySpan{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArray(Stream, ReadOnlySpan, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__1_Stream_ReadOnlySpan___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,ReadOnlySpan{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, ReadOnlySpan, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArray(Stream, ReadOnlySpan, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteFixedArray(Of T)(Stream, ReadOnlySpan(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,Span{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArray(Stream, Span, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArray__1_Stream_Span___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray``1(Stream,Span{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteFixedArray(Of T)(Stream, Span(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Stream, Span, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArray(Stream, Span, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteFixedArray(Of T)(Stream, Span(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArrayAsync(Stream, Array, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_Stream_Array_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream,Array,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, Array, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Array, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task{Stream},Array,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArrayAsync(Task, Array, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_Task_Stream__Array_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task{Stream},Array,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteFixedArrayAsync(Task(Of Stream), Array, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, Array, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task(Of Stream), Array, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, Array, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Task(Of Stream), Array, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync* name: WriteFixedArrayAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync_ @@ -5796,51 +8601,48 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync nameWithType: StreamExtensions.WriteFixedArrayAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,Memory{``0},CancellationToken) - name: WriteFixedArrayAsync(Stream, Memory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Stream_Memory___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,Memory{``0},CancellationToken) - name.vb: WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, Memory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Memory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,ReadOnlyMemory{``0},CancellationToken) - name: WriteFixedArrayAsync(Stream, ReadOnlyMemory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Stream_ReadOnlyMemory___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,ReadOnlyMemory{``0},CancellationToken) - name.vb: WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, ReadOnlyMemory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, ReadOnlyMemory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},Memory{``0},CancellationToken) - name: WriteFixedArrayAsync(Task, Memory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Task_Stream__Memory___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},Memory{``0},CancellationToken) - name.vb: WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, Memory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, Memory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},ReadOnlyMemory{``0},CancellationToken) - name: WriteFixedArrayAsync(Task, ReadOnlyMemory, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Task_Stream__ReadOnlyMemory___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},ReadOnlyMemory{``0},CancellationToken) - name.vb: WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, ReadOnlyMemory, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, ReadOnlyMemory, CancellationToken) - nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream,System.Boolean,Func{Stream,Stream}) - name: WriteIf(Stream, Boolean, Func) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIf_Stream_System_Boolean_Func_Stream_Stream__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream,System.Boolean,Func{Stream,Stream}) - name.vb: WriteIf(Stream, Boolean, Func(Of Stream, Stream)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream, System.Boolean, Func) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream, System.Boolean, Func(Of Stream, Stream)) - nameWithType: StreamExtensions.WriteIf(Stream, Boolean, Func) - nameWithType.vb: StreamExtensions.WriteIf(Stream, Boolean, Func(Of Stream, Stream)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,Memory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArrayAsync(Stream, Memory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Stream_Memory___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,Memory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, Memory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, Memory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, Memory(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,ReadOnlyMemory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArrayAsync(Stream, ReadOnlyMemory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Stream_ReadOnlyMemory___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Stream,ReadOnlyMemory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Stream, ReadOnlyMemory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Stream, ReadOnlyMemory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Stream, ReadOnlyMemory(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},Memory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArrayAsync(Task, Memory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Task_Stream__Memory___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},Memory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, Memory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, Memory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), Memory(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},ReadOnlyMemory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteFixedArrayAsync(Task, ReadOnlyMemory, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteFixedArrayAsync__1_Task_Stream__ReadOnlyMemory___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync``1(Task{Stream},ReadOnlyMemory{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Task, ReadOnlyMemory, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteFixedArrayAsync(Task, ReadOnlyMemory, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteFixedArrayAsync(Of T)(Task(Of Stream), ReadOnlyMemory(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream,System.Boolean,wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate) + name: WriteIf(Stream, Boolean, StreamExtensions.StreamNullableWiter_Delegate) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIf_Stream_System_Boolean_wan24_StreamSerializerExtensions_StreamExtensions_StreamNullableWiter_Delegate_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream,System.Boolean,wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf(Stream, System.Boolean, wan24.StreamSerializerExtensions.StreamExtensions.StreamNullableWiter_Delegate) + nameWithType: StreamExtensions.WriteIf(Stream, Boolean, StreamExtensions.StreamNullableWiter_Delegate) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf* name: WriteIf href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIf_ @@ -5848,24 +8650,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf nameWithType: StreamExtensions.WriteIf -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream,System.Boolean,Func{Stream,Task{Stream}}) - name: WriteIfAsync(Stream, Boolean, Func>) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_Stream_System_Boolean_Func_Stream_Task_Stream___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream,System.Boolean,Func{Stream,Task{Stream}}) - name.vb: WriteIfAsync(Stream, Boolean, Func(Of Stream, Task(Of Stream))) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream, System.Boolean, Func>) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream, System.Boolean, Func(Of Stream, Task(Of Stream))) - nameWithType: StreamExtensions.WriteIfAsync(Stream, Boolean, Func>) - nameWithType.vb: StreamExtensions.WriteIfAsync(Stream, Boolean, Func(Of Stream, Task(Of Stream))) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task{Stream},System.Boolean,Func{Stream,Task{Stream}}) - name: WriteIfAsync(Task, Boolean, Func>) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_Task_Stream__System_Boolean_Func_Stream_Task_Stream___ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task{Stream},System.Boolean,Func{Stream,Task{Stream}}) - name.vb: WriteIfAsync(Task(Of Stream), Boolean, Func(Of Stream, Task(Of Stream))) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task, System.Boolean, Func>) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task(Of Stream), System.Boolean, Func(Of Stream, Task(Of Stream))) - nameWithType: StreamExtensions.WriteIfAsync(Task, Boolean, Func>) - nameWithType.vb: StreamExtensions.WriteIfAsync(Task(Of Stream), Boolean, Func(Of Stream, Task(Of Stream))) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream,System.Boolean,wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate) + name: WriteIfAsync(Stream, Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_Stream_System_Boolean_wan24_StreamSerializerExtensions_StreamExtensions_AsyncStreamNullableWiter_Delegate_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream,System.Boolean,wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Stream, System.Boolean, wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate) + nameWithType: StreamExtensions.WriteIfAsync(Stream, Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task{Stream},System.Boolean,wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate) + name: WriteIfAsync(Task, Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_Task_Stream__System_Boolean_wan24_StreamSerializerExtensions_StreamExtensions_AsyncStreamNullableWiter_Delegate_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task{Stream},System.Boolean,wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate) + name.vb: WriteIfAsync(Task(Of Stream), Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task, System.Boolean, wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync(Task(Of Stream), System.Boolean, wan24.StreamSerializerExtensions.StreamExtensions.AsyncStreamNullableWiter_Delegate) + nameWithType: StreamExtensions.WriteIfAsync(Task, Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate) + nameWithType.vb: StreamExtensions.WriteIfAsync(Task(Of Stream), Boolean, StreamExtensions.AsyncStreamNullableWiter_Delegate) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfAsync* name: WriteIfAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfAsync_ @@ -5880,24 +8679,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull nameWithType: StreamExtensions.WriteIfNotNull -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0) - name: WriteIfNotNull(Stream, T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull__1_Stream___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0) - name.vb: WriteIfNotNull(Of T)(Stream, T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Stream, T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Of T)(Stream, T) - nameWithType: StreamExtensions.WriteIfNotNull(Stream, T) - nameWithType.vb: StreamExtensions.WriteIfNotNull(Of T)(Stream, T) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,Action) - name: WriteIfNotNull(Stream, T, Action) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull__1_Stream___0_Action_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,Action) - name.vb: WriteIfNotNull(Of T)(Stream, T, Action) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Stream, T, Action) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Of T)(Stream, T, Action) - nameWithType: StreamExtensions.WriteIfNotNull(Stream, T, Action) - nameWithType.vb: StreamExtensions.WriteIfNotNull(Of T)(Stream, T, Action) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteIfNotNull(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteIfNotNull(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteIfNotNull(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteIfNotNull(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteIfNotNull(Stream, T, StreamExtensions.NullableWriter_Delegate, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNull__1_Stream___0_wan24_StreamSerializerExtensions_StreamExtensions_NullableWriter_Delegate_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull``1(Stream,``0,wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteIfNotNull(Of T)(Stream, T, StreamExtensions.NullableWriter_Delegate, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Stream, T, wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull(Of T)(Stream, T, wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteIfNotNull(Stream, T, StreamExtensions.NullableWriter_Delegate, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteIfNotNull(Of T)(Stream, T, StreamExtensions.NullableWriter_Delegate, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync* name: WriteIfNotNullAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync_ @@ -5905,30 +8704,56 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync nameWithType: StreamExtensions.WriteIfNotNullAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,CancellationToken) - name: WriteIfNotNullAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,CancellationToken) - name.vb: WriteIfNotNullAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteIfNotNullAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,Func{Task},CancellationToken) - name: WriteIfNotNullAsync(Stream, T, Func, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync__1_Stream___0_Func_Task__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,Func{Task},CancellationToken) - name.vb: WriteIfNotNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Stream, T, Func, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) - nameWithType: StreamExtensions.WriteIfNotNullAsync(Stream, T, Func, CancellationToken) - nameWithType.vb: StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, Func(Of Task), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream,System.Collections.IList) - name: WriteList(Stream, IList) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteList_Stream_System_Collections_IList_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream,System.Collections.IList) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream, System.Collections.IList) - nameWithType: StreamExtensions.WriteList(Stream, IList) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteIfNotNullAsync(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteIfNotNullAsync(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteIfNotNullAsync(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteIfNotNullAsync(Stream, T, StreamExtensions.AsyncNullableWriter_Delegate, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteIfNotNullAsync__1_Stream___0_wan24_StreamSerializerExtensions_StreamExtensions_AsyncNullableWriter_Delegate_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync``1(Stream,``0,wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteIfNotNullAsync(Of T)(Stream, T, StreamExtensions.AsyncNullableWriter_Delegate, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Stream, T, wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteIfNotNullAsync(Stream, T, StreamExtensions.AsyncNullableWriter_Delegate, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteIfNotNullAsync(Of T)(Stream, T, StreamExtensions.AsyncNullableWriter_Delegate, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteItem(wan24.StreamSerializerExtensions.ItemSerializerContext,System.Object) + name: WriteItem(ItemSerializerContext, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteItem_wan24_StreamSerializerExtensions_ItemSerializerContext_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteItem(wan24.StreamSerializerExtensions.ItemSerializerContext,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteItem(wan24.StreamSerializerExtensions.ItemSerializerContext, System.Object) + nameWithType: StreamExtensions.WriteItem(ItemSerializerContext, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteItem* + name: WriteItem + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteItem_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteItem + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteItem + nameWithType: StreamExtensions.WriteItem +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteItemAsync(wan24.StreamSerializerExtensions.ItemSerializerContext,System.Object) + name: WriteItemAsync(ItemSerializerContext, Object) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteItemAsync_wan24_StreamSerializerExtensions_ItemSerializerContext_System_Object_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteItemAsync(wan24.StreamSerializerExtensions.ItemSerializerContext,System.Object) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteItemAsync(wan24.StreamSerializerExtensions.ItemSerializerContext, System.Object) + nameWithType: StreamExtensions.WriteItemAsync(ItemSerializerContext, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteItemAsync* + name: WriteItemAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteItemAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteItemAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteItemAsync + nameWithType: StreamExtensions.WriteItemAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteList(Stream, IList, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteList_Stream_System_Collections_IList_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteList(Stream, System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteList(Stream, IList, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteList* name: WriteList href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteList_ @@ -5936,21 +8761,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteList nameWithType: StreamExtensions.WriteList -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream,System.Collections.IList,CancellationToken) - name: WriteListAsync(Stream, IList, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_Stream_System_Collections_IList_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream,System.Collections.IList,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream, System.Collections.IList, CancellationToken) - nameWithType: StreamExtensions.WriteListAsync(Stream, IList, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task{Stream},System.Collections.IList,CancellationToken) - name: WriteListAsync(Task, IList, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_Task_Stream__System_Collections_IList_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task{Stream},System.Collections.IList,CancellationToken) - name.vb: WriteListAsync(Task(Of Stream), IList, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task, System.Collections.IList, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task(Of Stream), System.Collections.IList, CancellationToken) - nameWithType: StreamExtensions.WriteListAsync(Task, IList, CancellationToken) - nameWithType.vb: StreamExtensions.WriteListAsync(Task(Of Stream), IList, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteListAsync(Stream, IList, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_Stream_System_Collections_IList_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Stream, System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteListAsync(Stream, IList, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task{Stream},System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteListAsync(Task, IList, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_Task_Stream__System_Collections_IList_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task{Stream},System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteListAsync(Task(Of Stream), IList, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task, System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync(Task(Of Stream), System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteListAsync(Task, IList, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteListAsync(Task(Of Stream), IList, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync* name: WriteListAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListAsync_ @@ -5958,12 +8783,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListAsync nameWithType: StreamExtensions.WriteListAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream,System.Collections.IList) - name: WriteListNullable(Stream, IList) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullable_Stream_System_Collections_IList_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream,System.Collections.IList) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream, System.Collections.IList) - nameWithType: StreamExtensions.WriteListNullable(Stream, IList) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteListNullable(Stream, IList, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullable_Stream_System_Collections_IList_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable(Stream, System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteListNullable(Stream, IList, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable* name: WriteListNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullable_ @@ -5971,21 +8796,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullable nameWithType: StreamExtensions.WriteListNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream,System.Collections.IList,CancellationToken) - name: WriteListNullableAsync(Stream, IList, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_Stream_System_Collections_IList_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream,System.Collections.IList,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream, System.Collections.IList, CancellationToken) - nameWithType: StreamExtensions.WriteListNullableAsync(Stream, IList, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task{Stream},System.Collections.IList,CancellationToken) - name: WriteListNullableAsync(Task, IList, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_Task_Stream__System_Collections_IList_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task{Stream},System.Collections.IList,CancellationToken) - name.vb: WriteListNullableAsync(Task(Of Stream), IList, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task, System.Collections.IList, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task(Of Stream), System.Collections.IList, CancellationToken) - nameWithType: StreamExtensions.WriteListNullableAsync(Task, IList, CancellationToken) - nameWithType.vb: StreamExtensions.WriteListNullableAsync(Task(Of Stream), IList, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteListNullableAsync(Stream, IList, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_Stream_System_Collections_IList_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream,System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Stream, System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteListNullableAsync(Stream, IList, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task{Stream},System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteListNullableAsync(Task, IList, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_Task_Stream__System_Collections_IList_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task{Stream},System.Collections.IList,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteListNullableAsync(Task(Of Stream), IList, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task, System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync(Task(Of Stream), System.Collections.IList, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteListNullableAsync(Task, IList, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteListNullableAsync(Task(Of Stream), IList, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync* name: WriteListNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteListNullableAsync_ @@ -5993,114 +8818,123 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteListNullableAsync nameWithType: StreamExtensions.WriteListNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Boolean}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Boolean__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Boolean}) - name.vb: WriteNullable(Stream, Nullable(Of Boolean)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Boolean)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Boolean)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Byte}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Byte}) - name.vb: WriteNullable(Stream, Nullable(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Byte)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Byte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Decimal}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Decimal__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Decimal}) - name.vb: WriteNullable(Stream, Nullable(Of Decimal)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Decimal)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Decimal)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Double}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Double__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Double}) - name.vb: WriteNullable(Stream, Nullable(Of Double)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Double)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Double)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int16}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int16__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int16}) - name.vb: WriteNullable(Stream, Nullable(Of Int16)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int16)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int16)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int32}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int32}) - name.vb: WriteNullable(Stream, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int32)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int64}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int64__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int64}) - name.vb: WriteNullable(Stream, Nullable(Of Int64)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int64)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int64)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.SByte}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_SByte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.SByte}) - name.vb: WriteNullable(Stream, Nullable(Of SByte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.SByte)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of SByte)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Single}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Single__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Single}) - name.vb: WriteNullable(Stream, Nullable(Of Single)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Single)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Single)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt16}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt16__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt16}) - name.vb: WriteNullable(Stream, Nullable(Of UInt16)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt16)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt16)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt32}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt32}) - name.vb: WriteNullable(Stream, Nullable(Of UInt32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt32)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt32)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt64}) - name: WriteNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt64__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt64}) - name.vb: WriteNullable(Stream, Nullable(Of UInt64)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt64)) - nameWithType: StreamExtensions.WriteNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt64)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Boolean},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Boolean__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Boolean},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Boolean), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Boolean), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Boolean), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Byte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Decimal},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Decimal__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Decimal},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Decimal), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Decimal), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Decimal), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Double},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Double__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Double},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Double), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Double), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Double), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int16},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int16__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int16},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Int16), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int16), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int16), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Int32), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int32), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Int64__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Int64), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Int64), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Int64), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.SByte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_SByte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.SByte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of SByte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.SByte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of SByte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Single},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_Single__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.Single},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Single), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.Single), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Single), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt16},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt16__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt16},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of UInt16), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt16), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt16), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt32},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt32__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt32},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of UInt32), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt32), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt32), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt64},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_System_UInt64__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{System.UInt64},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of UInt64), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of System.UInt64), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of UInt64), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{Type},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_Stream_System_Nullable_Type__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream,System.Nullable{Type},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullable(Stream, Nullable(Of Type), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable(Stream, System.Nullable(Of Type), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullable(Stream, Nullable(Of Type), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable* name: WriteNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullable_ @@ -6108,222 +8942,240 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullable nameWithType: StreamExtensions.WriteNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Boolean},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Boolean__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Boolean},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Boolean), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Boolean), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Boolean), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Byte},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Byte},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Decimal},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Decimal__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Decimal},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Decimal), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Decimal), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Decimal), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Double},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Double__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Double},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Double), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Double), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Double), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int16},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Int16__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int16},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Int16), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Int16), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Int16), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int32},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int64},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Int64__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int64},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Int64), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Int64), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Int64), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.SByte},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_SByte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.SByte},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of SByte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.SByte), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of SByte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Single},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Single__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Single},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of Single), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Single), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Single), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt16},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_UInt16__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt16},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of UInt16), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.UInt16), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of UInt16), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt32},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_UInt32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt32},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of UInt32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.UInt32), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of UInt32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt64},CancellationToken) - name: WriteNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_UInt64__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt64},CancellationToken) - name.vb: WriteNullableAsync(Stream, Nullable(Of UInt64), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.UInt64), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of UInt64), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Boolean},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Boolean__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Boolean},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Boolean), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Boolean), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Boolean), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Byte},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Byte},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Byte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Decimal},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Decimal__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Decimal},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Decimal), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Decimal), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Decimal), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Double},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Double__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Double},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Double), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Double), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Double), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int16},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int16__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int16},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int16), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int16), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int16), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int32},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int32},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int64},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int64__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int64},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int64), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int64), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int64), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.SByte},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_SByte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.SByte},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of SByte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.SByte), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of SByte), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Single},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Single__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Single},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Single), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Single), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Single), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt16},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt16__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt16},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt16), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt16), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt16), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt32},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt32},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt32), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt64},CancellationToken) - name: WriteNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt64__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt64},CancellationToken) - name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt64), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt64), CancellationToken) - nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt64), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Boolean},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Boolean__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Boolean},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Boolean), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Boolean), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Boolean), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Byte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Decimal},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Decimal__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Decimal},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Decimal), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Decimal), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Decimal), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Double},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Double__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Double},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Double), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Double), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Double), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int16},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Int16__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int16},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Int16), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Int16), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Int16), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Int32), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Int32), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Int64__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Int64), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Int64), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Int64), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.SByte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_SByte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.SByte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of SByte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.SByte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of SByte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Single},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_Single__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.Single},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Single), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.Single), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Single), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt16},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_UInt16__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt16},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of UInt16), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.UInt16), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of UInt16), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt32},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_UInt32__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt32},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of UInt32), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.UInt32), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of UInt32), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt64},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_System_UInt64__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{System.UInt64},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of UInt64), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of System.UInt64), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of UInt64), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{Type},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Stream_System_Nullable_Type__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream,System.Nullable{Type},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Stream, Nullable(Of Type), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Stream, System.Nullable(Of Type), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Stream, Nullable(Of Type), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Boolean},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Boolean__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Boolean},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Boolean), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Boolean), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Boolean), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Byte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Byte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Byte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Byte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Byte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Decimal},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Decimal__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Decimal},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Decimal), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Decimal), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Decimal), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Double},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Double__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Double},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Double), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Double), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Double), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int16},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int16__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int16},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int16), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int16), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int16), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int32), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int32), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int64},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Int64__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Int64},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Int64), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Int64), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Int64), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.SByte},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_SByte__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.SByte},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of SByte), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.SByte), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of SByte), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Single},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_Single__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.Single},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Single), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.Single), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Single), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt16},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt16__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt16},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt16), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt16), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt16), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt32},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt32__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt32},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt32), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt32), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt32), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt64},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_System_UInt64__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{System.UInt64},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of UInt64), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of System.UInt64), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of UInt64), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{Type},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_Task_Stream__System_Nullable_Type__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task{Stream},System.Nullable{Type},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNullableAsync(Task(Of Stream), Nullable(Of Type), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync(Task(Of Stream), System.Nullable(Of Type), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNullableAsync(Task(Of Stream), Nullable(Of Type), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync* name: WriteNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableAsync_ @@ -6331,24 +9183,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync nameWithType: StreamExtensions.WriteNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64}) - name: WriteNullableCount(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_Stream_System_Nullable_System_Int64__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64}) - name.vb: WriteNullableCount(Stream, Nullable(Of Int64)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable(Of System.Int64)) - nameWithType: StreamExtensions.WriteNullableCount(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNullableCount(Stream, Nullable(Of Int64)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64},Action) - name: WriteNullableCount(Stream, Nullable, Action) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_Stream_System_Nullable_System_Int64__Action_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream,System.Nullable{System.Int64},Action) - name.vb: WriteNullableCount(Stream, Nullable(Of Int64), Action) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable, Action) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(Stream, System.Nullable(Of System.Int64), Action) - nameWithType: StreamExtensions.WriteNullableCount(Stream, Nullable, Action) - nameWithType.vb: StreamExtensions.WriteNullableCount(Stream, Nullable(Of Int64), Action) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64}) + name: WriteNullableCount(ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int64__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64}) + name.vb: WriteNullableCount(ISerializationContext, Nullable(Of Int64)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int64)) + nameWithType: StreamExtensions.WriteNullableCount(ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteNullableCount(ISerializationContext, Nullable(Of Int64)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate) + name: WriteNullableCount(ISerializationContext, Nullable, StreamExtensions.NullableWriter_Delegate) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int64__wan24_StreamSerializerExtensions_StreamExtensions_NullableWriter_Delegate_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate) + name.vb: WriteNullableCount(ISerializationContext, Nullable(Of Int64), StreamExtensions.NullableWriter_Delegate) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable, wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int64), wan24.StreamSerializerExtensions.StreamExtensions.NullableWriter_Delegate) + nameWithType: StreamExtensions.WriteNullableCount(ISerializationContext, Nullable, StreamExtensions.NullableWriter_Delegate) + nameWithType.vb: StreamExtensions.WriteNullableCount(ISerializationContext, Nullable(Of Int64), StreamExtensions.NullableWriter_Delegate) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount* name: WriteNullableCount href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCount_ @@ -6356,24 +9208,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount nameWithType: StreamExtensions.WriteNullableCount -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},CancellationToken) - name: WriteNullableCountAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_Stream_System_Nullable_System_Int64__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},CancellationToken) - name.vb: WriteNullableCountAsync(Stream, Nullable(Of Int64), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable(Of System.Int64), CancellationToken) - nameWithType: StreamExtensions.WriteNullableCountAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableCountAsync(Stream, Nullable(Of Int64), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},Func{Task},CancellationToken) - name: WriteNullableCountAsync(Stream, Nullable, Func, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_Stream_System_Nullable_System_Int64__Func_Task__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream,System.Nullable{System.Int64},Func{Task},CancellationToken) - name.vb: WriteNullableCountAsync(Stream, Nullable(Of Int64), Func(Of Task), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable, Func, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(Stream, System.Nullable(Of System.Int64), Func(Of Task), CancellationToken) - nameWithType: StreamExtensions.WriteNullableCountAsync(Stream, Nullable, Func, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNullableCountAsync(Stream, Nullable(Of Int64), Func(Of Task), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64}) + name: WriteNullableCountAsync(ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int64__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64}) + name.vb: WriteNullableCountAsync(ISerializationContext, Nullable(Of Int64)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int64)) + nameWithType: StreamExtensions.WriteNullableCountAsync(ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteNullableCountAsync(ISerializationContext, Nullable(Of Int64)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate) + name: WriteNullableCountAsync(ISerializationContext, Nullable, StreamExtensions.AsyncNullableWriter_Delegate) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int64__wan24_StreamSerializerExtensions_StreamExtensions_AsyncNullableWriter_Delegate_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int64},wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate) + name.vb: WriteNullableCountAsync(ISerializationContext, Nullable(Of Int64), StreamExtensions.AsyncNullableWriter_Delegate) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable, wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int64), wan24.StreamSerializerExtensions.StreamExtensions.AsyncNullableWriter_Delegate) + nameWithType: StreamExtensions.WriteNullableCountAsync(ISerializationContext, Nullable, StreamExtensions.AsyncNullableWriter_Delegate) + nameWithType.vb: StreamExtensions.WriteNullableCountAsync(ISerializationContext, Nullable(Of Int64), StreamExtensions.AsyncNullableWriter_Delegate) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync* name: WriteNullableCountAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNullableCountAsync_ @@ -6381,12 +9233,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync nameWithType: StreamExtensions.WriteNullableCountAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream,System.Object) - name: WriteNumber(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream, System.Object) - nameWithType: StreamExtensions.WriteNumber(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumber(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumber(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber* name: WriteNumber href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber_ @@ -6394,30 +9246,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber nameWithType: StreamExtensions.WriteNumber -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``1(Stream,``0) - name: WriteNumber(Stream, T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber__1_Stream___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``1(Stream,``0) - name.vb: WriteNumber(Of T)(Stream, T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream, T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Of T)(Stream, T) - nameWithType: StreamExtensions.WriteNumber(Stream, T) - nameWithType.vb: StreamExtensions.WriteNumber(Of T)(Stream, T) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream,System.Object,CancellationToken) - name: WriteNumberAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteNumberAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task{Stream},System.Object,CancellationToken) - name: WriteNumberAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteNumberAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteNumberAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNumberAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumber(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumber__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumber(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumber(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumber(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumber(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumberAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumberAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync* name: WriteNumberAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync_ @@ -6425,30 +9277,62 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync nameWithType: StreamExtensions.WriteNumberAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Stream,``0,CancellationToken) - name: WriteNumberAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Stream,``0,CancellationToken) - name.vb: WriteNumberAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteNumberAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Task{Stream},``0,CancellationToken) - name: WriteNumberAsync(Task, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync__1_Task_Stream____0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Task{Stream},``0,CancellationToken) - name.vb: WriteNumberAsync(Of T)(Task(Of Stream), T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Task(Of Stream), T, CancellationToken) - nameWithType: StreamExtensions.WriteNumberAsync(Task, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Task(Of Stream), T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object) - name: WriteNumberNullable(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream, System.Object) - nameWithType: StreamExtensions.WriteNumberNullable(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberAsync(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumberAsync(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberAsync(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberAsync(Task, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberAsync__1_Task_Stream____0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumberAsync(Of T)(Task(Of Stream), T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Task, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberAsync(Of T)(Task(Of Stream), T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberAsync(Task, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumberAsync(Of T)(Task(Of Stream), T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(wan24.StreamSerializerExtensions.ISerializationContext,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name: WriteNumberInt(ISerializationContext, Object, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberInt_wan24_StreamSerializerExtensions_ISerializationContext_System_Object_System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(wan24.StreamSerializerExtensions.ISerializationContext,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name.vb: WriteNumberInt(ISerializationContext, Object, Nullable(Of NumberTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(wan24.StreamSerializerExtensions.ISerializationContext, System.Object, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt(wan24.StreamSerializerExtensions.ISerializationContext, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes), System.Boolean) + nameWithType: StreamExtensions.WriteNumberInt(ISerializationContext, Object, Nullable, Boolean) + nameWithType.vb: StreamExtensions.WriteNumberInt(ISerializationContext, Object, Nullable(Of NumberTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt* + name: WriteNumberInt + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberInt_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberInt + nameWithType: StreamExtensions.WriteNumberInt +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberIntAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name: WriteNumberIntAsync(ISerializationContext, Object, Nullable, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberIntAsync_wan24_StreamSerializerExtensions_ISerializationContext_System_Object_System_Nullable_wan24_StreamSerializerExtensions_NumberTypes__System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberIntAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Object,System.Nullable{wan24.StreamSerializerExtensions.NumberTypes},System.Boolean) + name.vb: WriteNumberIntAsync(ISerializationContext, Object, Nullable(Of NumberTypes), Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberIntAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Object, System.Nullable, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberIntAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Object, System.Nullable(Of wan24.StreamSerializerExtensions.NumberTypes), System.Boolean) + nameWithType: StreamExtensions.WriteNumberIntAsync(ISerializationContext, Object, Nullable, Boolean) + nameWithType.vb: StreamExtensions.WriteNumberIntAsync(ISerializationContext, Object, Nullable(Of NumberTypes), Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberIntAsync* + name: WriteNumberIntAsync + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberIntAsync_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberIntAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberIntAsync + nameWithType: StreamExtensions.WriteNumberIntAsync +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberNullable(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberNullable(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable* name: WriteNumberNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable_ @@ -6456,30 +9340,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable nameWithType: StreamExtensions.WriteNumberNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``1(Stream,System.Nullable{``0}) - name: WriteNumberNullable(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable__1_Stream_System_Nullable___0__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``1(Stream,System.Nullable{``0}) - name.vb: WriteNumberNullable(Of T)(Stream, Nullable(Of T)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Of T)(Stream, System.Nullable(Of T)) - nameWithType: StreamExtensions.WriteNumberNullable(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteNumberNullable(Of T)(Stream, Nullable(Of T)) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream,System.Object,CancellationToken) - name: WriteNumberNullableAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task{Stream},System.Object,CancellationToken) - name: WriteNumberNullableAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteNumberNullableAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteNumberNullableAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberNullable(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullable__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumberNullable(Of T)(Stream, Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullable(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberNullable(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumberNullable(Of T)(Stream, Nullable(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberNullableAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberNullableAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumberNullableAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberNullableAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync* name: WriteNumberNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync_ @@ -6487,30 +9371,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync nameWithType: StreamExtensions.WriteNumberNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) - name: WriteNumberNullableAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync__1_Stream_System_Nullable___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Stream,System.Nullable{``0},CancellationToken) - name.vb: WriteNumberNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, Nullable(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) - name: WriteNumberNullableAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync__1_Task_Stream__System_Nullable___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) - name.vb: WriteNumberNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteNumberNullableAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream,System.Object) - name: WriteObject(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObject_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream, System.Object) - nameWithType: StreamExtensions.WriteObject(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberNullableAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumberNullableAsync(Of T)(Stream, Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberNullableAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Of T)(Stream, Nullable(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteNumberNullableAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteNumberNullableAsync__1_Task_Stream__System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteNumberNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteNumberNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteNumberNullableAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteNumberNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteObject(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObject_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteObject(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject* name: WriteObject href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObject_ @@ -6518,21 +9402,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObject nameWithType: StreamExtensions.WriteObject -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream,System.Object,CancellationToken) - name: WriteObjectAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteObjectAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task{Stream},System.Object,CancellationToken) - name: WriteObjectAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteObjectAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteObjectAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteObjectAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteObjectAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteObjectAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteObjectAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteObjectAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteObjectAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteObjectAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync* name: WriteObjectAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectAsync_ @@ -6540,12 +9424,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectAsync nameWithType: StreamExtensions.WriteObjectAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream,System.Object) - name: WriteObjectNullable(Stream, Object) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullable_Stream_System_Object_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream,System.Object) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream, System.Object) - nameWithType: StreamExtensions.WriteObjectNullable(Stream, Object) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteObjectNullable(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullable_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteObjectNullable(Stream, Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable* name: WriteObjectNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullable_ @@ -6553,21 +9437,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullable nameWithType: StreamExtensions.WriteObjectNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream,System.Object,CancellationToken) - name: WriteObjectNullableAsync(Stream, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_Stream_System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream,System.Object,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream, System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteObjectNullableAsync(Stream, Object, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task{Stream},System.Object,CancellationToken) - name: WriteObjectNullableAsync(Task, Object, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_Task_Stream__System_Object_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task{Stream},System.Object,CancellationToken) - name.vb: WriteObjectNullableAsync(Task(Of Stream), Object, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task, System.Object, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task(Of Stream), System.Object, CancellationToken) - nameWithType: StreamExtensions.WriteObjectNullableAsync(Task, Object, CancellationToken) - nameWithType.vb: StreamExtensions.WriteObjectNullableAsync(Task(Of Stream), Object, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteObjectNullableAsync(Stream, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteObjectNullableAsync(Stream, Object, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteObjectNullableAsync(Task, Object, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteObjectNullableAsync(Task(Of Stream), Object, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteObjectNullableAsync(Task, Object, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteObjectNullableAsync(Task(Of Stream), Object, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync* name: WriteObjectNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteObjectNullableAsync_ @@ -6575,12 +9459,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteObjectNullableAsync nameWithType: StreamExtensions.WriteObjectNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) - name: WriteSerialized(Stream, IStreamSerializer) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream, wan24.StreamSerializerExtensions.IStreamSerializer) - nameWithType: StreamExtensions.WriteSerialized(Stream, IStreamSerializer) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerialized(Stream, IStreamSerializer, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerialized(Stream, IStreamSerializer, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized* name: WriteSerialized href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized_ @@ -6588,30 +9472,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized nameWithType: StreamExtensions.WriteSerialized -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(Stream,``0) - name: WriteSerialized(Stream, T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized__1_Stream___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(Stream,``0) - name.vb: WriteSerialized(Of T)(Stream, T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream, T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Of T)(Stream, T) - nameWithType: StreamExtensions.WriteSerialized(Stream, T) - nameWithType.vb: StreamExtensions.WriteSerialized(Of T)(Stream, T) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - name: WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedAsync(Stream, IStreamSerializer, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - name: WriteSerializedAsync(Task, IStreamSerializer, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_Task_Stream__wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - name.vb: WriteSerializedAsync(Task(Of Stream), IStreamSerializer, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task(Of Stream), wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedAsync(Task, IStreamSerializer, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedAsync(Task(Of Stream), IStreamSerializer, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerialized(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerialized__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerialized(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerialized(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerialized(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerialized(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedAsync(Stream, IStreamSerializer, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedAsync(Stream, IStreamSerializer, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedAsync(Task, IStreamSerializer, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_Task_Stream__wan24_StreamSerializerExtensions_IStreamSerializer_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedAsync(Task(Of Stream), IStreamSerializer, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task, wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task(Of Stream), wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedAsync(Task, IStreamSerializer, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedAsync(Task(Of Stream), IStreamSerializer, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync* name: WriteSerializedAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync_ @@ -6619,33 +9503,42 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync nameWithType: StreamExtensions.WriteSerializedAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Stream,``0,CancellationToken) - name: WriteSerializedAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Stream,``0,CancellationToken) - name.vb: WriteSerializedAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Task{Stream},``0,CancellationToken) - name: WriteSerializedAsync(Task, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync__1_Task_Stream____0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Task{Stream},``0,CancellationToken) - name.vb: WriteSerializedAsync(Of T)(Task(Of Stream), T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Of T)(Task(Of Stream), T, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedAsync(Task, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedAsync(Of T)(Task(Of Stream), T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte}) - name: WriteSerializedData(Stream, Byte[], Int32, ArrayPool) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_Stream_System_Byte___System_Int32_System_Buffers_ArrayPool_System_Byte__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte}) - name.vb: WriteSerializedData(Stream, Byte(), Int32, ArrayPool(Of Byte)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream, System.Byte[], System.Int32, System.Buffers.ArrayPool) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(Stream, System.Byte(), System.Int32, System.Buffers.ArrayPool(Of System.Byte)) - nameWithType: StreamExtensions.WriteSerializedData(Stream, Byte[], Int32, ArrayPool) - nameWithType.vb: StreamExtensions.WriteSerializedData(Stream, Byte(), Int32, ArrayPool(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedAsync(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedAsync(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedAsync(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedAsync(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedAsync(Task, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedAsync__1_Task_Stream____0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedAsync(Of T)(Task(Of Stream), T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Task, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync(Of T)(Task(Of Stream), T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedAsync(Task, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedAsync(Of T)(Task(Of Stream), T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext,Memory{System.Byte}) + name: WriteSerializedData(ISerializationContext, Memory) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_wan24_StreamSerializerExtensions_ISerializationContext_Memory_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext,Memory{System.Byte}) + name.vb: WriteSerializedData(ISerializationContext, Memory(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext, Memory) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext, Memory(Of System.Byte)) + nameWithType: StreamExtensions.WriteSerializedData(ISerializationContext, Memory) + nameWithType.vb: StreamExtensions.WriteSerializedData(ISerializationContext, Memory(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext,System.Byte[],System.Int32) + name: WriteSerializedData(ISerializationContext, Byte[], Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_wan24_StreamSerializerExtensions_ISerializationContext_System_Byte___System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext,System.Byte[],System.Int32) + name.vb: WriteSerializedData(ISerializationContext, Byte(), Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext, System.Byte[], System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData(wan24.StreamSerializerExtensions.ISerializationContext, System.Byte(), System.Int32) + nameWithType: StreamExtensions.WriteSerializedData(ISerializationContext, Byte[], Int32) + nameWithType.vb: StreamExtensions.WriteSerializedData(ISerializationContext, Byte(), Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData* name: WriteSerializedData href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedData_ @@ -6653,15 +9546,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData nameWithType: StreamExtensions.WriteSerializedData -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte},CancellationToken) - name: WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedDataAsync_Stream_System_Byte___System_Int32_System_Buffers_ArrayPool_System_Byte__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream,System.Byte[],System.Int32,System.Buffers.ArrayPool{System.Byte},CancellationToken) - name.vb: WriteSerializedDataAsync(Stream, Byte(), Int32, ArrayPool(Of Byte), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream, System.Byte[], System.Int32, System.Buffers.ArrayPool, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(Stream, System.Byte(), System.Int32, System.Buffers.ArrayPool(Of System.Byte), CancellationToken) - nameWithType: StreamExtensions.WriteSerializedDataAsync(Stream, Byte[], Int32, ArrayPool, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedDataAsync(Stream, Byte(), Int32, ArrayPool(Of Byte), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext,Memory{System.Byte}) + name: WriteSerializedDataAsync(ISerializationContext, Memory) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedDataAsync_wan24_StreamSerializerExtensions_ISerializationContext_Memory_System_Byte__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext,Memory{System.Byte}) + name.vb: WriteSerializedDataAsync(ISerializationContext, Memory(Of Byte)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext, Memory) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext, Memory(Of System.Byte)) + nameWithType: StreamExtensions.WriteSerializedDataAsync(ISerializationContext, Memory) + nameWithType.vb: StreamExtensions.WriteSerializedDataAsync(ISerializationContext, Memory(Of Byte)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Byte[],System.Int32) + name: WriteSerializedDataAsync(ISerializationContext, Byte[], Int32) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedDataAsync_wan24_StreamSerializerExtensions_ISerializationContext_System_Byte___System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext,System.Byte[],System.Int32) + name.vb: WriteSerializedDataAsync(ISerializationContext, Byte(), Int32) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Byte[], System.Int32) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync(wan24.StreamSerializerExtensions.ISerializationContext, System.Byte(), System.Int32) + nameWithType: StreamExtensions.WriteSerializedDataAsync(ISerializationContext, Byte[], Int32) + nameWithType.vb: StreamExtensions.WriteSerializedDataAsync(ISerializationContext, Byte(), Int32) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync* name: WriteSerializedDataAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedDataAsync_ @@ -6669,12 +9571,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedDataAsync nameWithType: StreamExtensions.WriteSerializedDataAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) - name: WriteSerializedNullable(Stream, IStreamSerializer) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream,wan24.StreamSerializerExtensions.IStreamSerializer) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream, wan24.StreamSerializerExtensions.IStreamSerializer) - nameWithType: StreamExtensions.WriteSerializedNullable(Stream, IStreamSerializer) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullable(Stream, IStreamSerializer, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullable(Stream, IStreamSerializer, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable* name: WriteSerializedNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable_ @@ -6682,30 +9584,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable nameWithType: StreamExtensions.WriteSerializedNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(Stream,``0) - name: WriteSerializedNullable(Stream, T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable__1_Stream___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(Stream,``0) - name.vb: WriteSerializedNullable(Of T)(Stream, T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream, T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Of T)(Stream, T) - nameWithType: StreamExtensions.WriteSerializedNullable(Stream, T) - nameWithType.vb: StreamExtensions.WriteSerializedNullable(Of T)(Stream, T) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - name: WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, IStreamSerializer, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - name: WriteSerializedNullableAsync(Task, IStreamSerializer, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_Task_Stream__wan24_StreamSerializerExtensions_IStreamSerializer_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,CancellationToken) - name.vb: WriteSerializedNullableAsync(Task(Of Stream), IStreamSerializer, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task, wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task(Of Stream), wan24.StreamSerializerExtensions.IStreamSerializer, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedNullableAsync(Task, IStreamSerializer, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Task(Of Stream), IStreamSerializer, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullable(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullable__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedNullable(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullable(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullable(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedNullable(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullableAsync(Stream, IStreamSerializer, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_Stream_wan24_StreamSerializerExtensions_IStreamSerializer_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream,wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, IStreamSerializer, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullableAsync(Task, IStreamSerializer, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_Task_Stream__wan24_StreamSerializerExtensions_IStreamSerializer_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task{Stream},wan24.StreamSerializerExtensions.IStreamSerializer,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedNullableAsync(Task(Of Stream), IStreamSerializer, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task, wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task(Of Stream), wan24.StreamSerializerExtensions.IStreamSerializer, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Task, IStreamSerializer, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Task(Of Stream), IStreamSerializer, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync* name: WriteSerializedNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync_ @@ -6713,24 +9615,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync nameWithType: StreamExtensions.WriteSerializedNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,``0,CancellationToken) - name: WriteSerializedNullableAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,``0,CancellationToken) - name.vb: WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Task{Stream},``0,CancellationToken) - name: WriteSerializedNullableAsync(Task, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Task_Stream____0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Task{Stream},``0,CancellationToken) - name.vb: WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedNullableAsync(Task, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullableAsync(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedNullableAsync(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullableAsync(Task, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableAsync__1_Task_Stream____0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Task, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullableAsync(Task, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedNullableAsync(Of T)(Task(Of Stream), T, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct* name: WriteSerializedNullableStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStruct_ @@ -6738,15 +9640,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct nameWithType: StreamExtensions.WriteSerializedNullableStruct -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct``1(Stream,System.Nullable{``0}) - name: WriteSerializedNullableStruct(Stream, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStruct__1_Stream_System_Nullable___0__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct``1(Stream,System.Nullable{``0}) - name.vb: WriteSerializedNullableStruct(Of T)(Stream, Nullable(Of T)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct(Stream, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, System.Nullable(Of T)) - nameWithType: StreamExtensions.WriteSerializedNullableStruct(Stream, Nullable) - nameWithType.vb: StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, Nullable(Of T)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullableStruct(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStruct__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedNullableStruct(Of T)(Stream, Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullableStruct(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedNullableStruct(Of T)(Stream, Nullable(Of T), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync* name: WriteSerializedNullableStructAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync_ @@ -6754,24 +9656,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync nameWithType: StreamExtensions.WriteSerializedNullableStructAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Stream,System.Nullable{``0},CancellationToken) - name: WriteSerializedNullableStructAsync(Stream, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync__1_Stream_System_Nullable___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Stream,System.Nullable{``0},CancellationToken) - name.vb: WriteSerializedNullableStructAsync(Of T)(Stream, Nullable(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Stream, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, System.Nullable(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteSerializedNullableStructAsync(Stream, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, Nullable(Of T), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) - name: WriteSerializedNullableStructAsync(Task, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync__1_Task_Stream__System_Nullable___0__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Task{Stream},System.Nullable{``0},CancellationToken) - name.vb: WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Task, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), System.Nullable(Of T), CancellationToken) - nameWithType: StreamExtensions.WriteSerializedNullableStructAsync(Task, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), Nullable(Of T), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullableStructAsync(Stream, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedNullableStructAsync(Of T)(Stream, Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullableStructAsync(Stream, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Stream, Nullable(Of T), ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedNullableStructAsync(Task, Nullable, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedNullableStructAsync__1_Task_Stream__System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedNullableStructAsync(Task, Nullable, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedNullableStructAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct* name: WriteSerializedStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStruct_ @@ -6779,15 +9681,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct nameWithType: StreamExtensions.WriteSerializedStruct -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct``1(Stream,``0) - name: WriteSerializedStruct(Stream, T) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStruct__1_Stream___0_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct``1(Stream,``0) - name.vb: WriteSerializedStruct(Of T)(Stream, T) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct(Stream, T) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct(Of T)(Stream, T) - nameWithType: StreamExtensions.WriteSerializedStruct(Stream, T) - nameWithType.vb: StreamExtensions.WriteSerializedStruct(Of T)(Stream, T) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedStruct(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStruct__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedStruct(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedStruct(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedStruct(Of T)(Stream, T, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync* name: WriteSerializedStructAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync_ @@ -6795,30 +9697,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync nameWithType: StreamExtensions.WriteSerializedStructAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Stream,``0,CancellationToken) - name: WriteSerializedStructAsync(Stream, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync__1_Stream___0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Stream,``0,CancellationToken) - name.vb: WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Stream, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedStructAsync(Stream, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Task{Stream},``0,CancellationToken) - name: WriteSerializedStructAsync(Task, T, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync__1_Task_Stream____0_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Task{Stream},``0,CancellationToken) - name.vb: WriteSerializedStructAsync(Of T)(Task(Of Stream), T, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Task, T, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Of T)(Task(Of Stream), T, CancellationToken) - nameWithType: StreamExtensions.WriteSerializedStructAsync(Task, T, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializedStructAsync(Of T)(Task(Of Stream), T, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) - name: WriteSerializerVersion(Stream) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion_Stream_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream) - nameWithType: StreamExtensions.WriteSerializerVersion(Stream) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedStructAsync(Stream, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedStructAsync(Of T)(Stream, T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedStructAsync(Stream, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedStructAsync(Of T)(Stream, T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializedStructAsync(Task, T, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializedStructAsync__1_Task_Stream____0_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializedStructAsync(Of T)(Task(Of Stream), T, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Task, T, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync(Of T)(Task(Of Stream), T, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializedStructAsync(Task, T, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializedStructAsync(Of T)(Task(Of Stream), T, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializerVersion(Stream, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion_Stream_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion(Stream, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializerVersion(Stream, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion* name: WriteSerializerVersion href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersion_ @@ -6826,21 +9728,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersion nameWithType: StreamExtensions.WriteSerializerVersion -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream,CancellationToken) - name: WriteSerializerVersionAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream, CancellationToken) - nameWithType: StreamExtensions.WriteSerializerVersionAsync(Stream, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task{Stream},CancellationToken) - name: WriteSerializerVersionAsync(Task, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_Task_Stream__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task{Stream},CancellationToken) - name.vb: WriteSerializerVersionAsync(Task(Of Stream), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task(Of Stream), CancellationToken) - nameWithType: StreamExtensions.WriteSerializerVersionAsync(Task, CancellationToken) - nameWithType.vb: StreamExtensions.WriteSerializerVersionAsync(Task(Of Stream), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializerVersionAsync(Stream, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_Stream_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Stream, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializerVersionAsync(Stream, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task{Stream},wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteSerializerVersionAsync(Task, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_Task_Stream__wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task{Stream},wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteSerializerVersionAsync(Task(Of Stream), ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync(Task(Of Stream), wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteSerializerVersionAsync(Task, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteSerializerVersionAsync(Task(Of Stream), ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync* name: WriteSerializerVersionAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteSerializerVersionAsync_ @@ -6848,15 +9750,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync nameWithType: StreamExtensions.WriteSerializerVersionAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name: WriteStream(Stream, Stream, ArrayPool, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStream_Stream_Stream_System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name.vb: WriteStream(Stream, Stream, ArrayPool(Of Byte), Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream, Stream, System.Buffers.ArrayPool, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream, Stream, System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.WriteStream(Stream, Stream, ArrayPool, Nullable) - nameWithType.vb: StreamExtensions.WriteStream(Stream, Stream, ArrayPool(Of Byte), Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream,Stream,wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name: WriteStream(Stream, Stream, ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStream_Stream_Stream_wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream,Stream,wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name.vb: WriteStream(Stream, Stream, ISerializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream, Stream, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream(Stream, Stream, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStream(Stream, Stream, ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteStream(Stream, Stream, ISerializationContext, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream* name: WriteStream href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStream_ @@ -6864,24 +9766,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStream nameWithType: StreamExtensions.WriteStream -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name: WriteStreamAsync(Stream, Stream, ArrayPool, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_Stream_Stream_System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream,Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name.vb: WriteStreamAsync(Stream, Stream, ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream, Stream, System.Buffers.ArrayPool, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream, Stream, System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.WriteStreamAsync(Stream, Stream, ArrayPool, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStreamAsync(Stream, Stream, ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task{Stream},Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name: WriteStreamAsync(Task, Stream, ArrayPool, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_Task_Stream__Stream_System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task{Stream},Stream,System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name.vb: WriteStreamAsync(Task(Of Stream), Stream, ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task, Stream, System.Buffers.ArrayPool, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task(Of Stream), Stream, System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.WriteStreamAsync(Task, Stream, ArrayPool, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStreamAsync(Task(Of Stream), Stream, ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream,Stream,wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name: WriteStreamAsync(Stream, Stream, ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_Stream_Stream_wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream,Stream,wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name.vb: WriteStreamAsync(Stream, Stream, ISerializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream, Stream, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Stream, Stream, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStreamAsync(Stream, Stream, ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteStreamAsync(Stream, Stream, ISerializationContext, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task{Stream},Stream,wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name: WriteStreamAsync(Task, Stream, ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_Task_Stream__Stream_wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task{Stream},Stream,wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name.vb: WriteStreamAsync(Task(Of Stream), Stream, ISerializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task, Stream, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync(Task(Of Stream), Stream, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStreamAsync(Task, Stream, ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteStreamAsync(Task(Of Stream), Stream, ISerializationContext, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync* name: WriteStreamAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamAsync_ @@ -6889,15 +9791,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync nameWithType: StreamExtensions.WriteStreamAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name: WriteStreamNullable(Stream, Nullable, ArrayPool, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullable_Stream_System_Nullable_Stream__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32}) - name.vb: WriteStreamNullable(Stream, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream, System.Nullable(Of Stream), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32)) - nameWithType: StreamExtensions.WriteStreamNullable(Stream, Nullable, ArrayPool, Nullable) - nameWithType.vb: StreamExtensions.WriteStreamNullable(Stream, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream,System.Nullable{Stream},wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name: WriteStreamNullable(Stream, Nullable, ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullable_Stream_System_Nullable_Stream__wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream,System.Nullable{Stream},wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name.vb: WriteStreamNullable(Stream, Nullable(Of Stream), ISerializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable(Stream, System.Nullable(Of Stream), wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStreamNullable(Stream, Nullable, ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteStreamNullable(Stream, Nullable(Of Stream), ISerializationContext, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable* name: WriteStreamNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullable_ @@ -6905,24 +9807,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullable nameWithType: StreamExtensions.WriteStreamNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name: WriteStreamNullableAsync(Stream, Nullable, ArrayPool, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_Stream_System_Nullable_Stream__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream,System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name.vb: WriteStreamNullableAsync(Stream, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream, System.Nullable, System.Buffers.ArrayPool, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream, System.Nullable(Of Stream), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.WriteStreamNullableAsync(Stream, Nullable, ArrayPool, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStreamNullableAsync(Stream, Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task{Stream},System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name: WriteStreamNullableAsync(Task, Nullable, ArrayPool, Nullable, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_Task_Stream__System_Nullable_Stream__System_Buffers_ArrayPool_System_Byte__System_Nullable_System_Int32__CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task{Stream},System.Nullable{Stream},System.Buffers.ArrayPool{System.Byte},System.Nullable{System.Int32},CancellationToken) - name.vb: WriteStreamNullableAsync(Task(Of Stream), Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task, System.Nullable, System.Buffers.ArrayPool, System.Nullable, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task(Of Stream), System.Nullable(Of Stream), System.Buffers.ArrayPool(Of System.Byte), System.Nullable(Of System.Int32), CancellationToken) - nameWithType: StreamExtensions.WriteStreamNullableAsync(Task, Nullable, ArrayPool, Nullable, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStreamNullableAsync(Task(Of Stream), Nullable(Of Stream), ArrayPool(Of Byte), Nullable(Of Int32), CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream,System.Nullable{Stream},wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name: WriteStreamNullableAsync(Stream, Nullable, ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_Stream_System_Nullable_Stream__wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream,System.Nullable{Stream},wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name.vb: WriteStreamNullableAsync(Stream, Nullable(Of Stream), ISerializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Stream, System.Nullable(Of Stream), wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStreamNullableAsync(Stream, Nullable, ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteStreamNullableAsync(Stream, Nullable(Of Stream), ISerializationContext, Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task{Stream},System.Nullable{Stream},wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name: WriteStreamNullableAsync(Task, Nullable, ISerializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_Task_Stream__System_Nullable_Stream__wan24_StreamSerializerExtensions_ISerializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task{Stream},System.Nullable{Stream},wan24.StreamSerializerExtensions.ISerializationContext,System.Nullable{System.Int32}) + name.vb: WriteStreamNullableAsync(Task(Of Stream), Nullable(Of Stream), ISerializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync(Task(Of Stream), System.Nullable(Of Stream), wan24.StreamSerializerExtensions.ISerializationContext, System.Nullable(Of System.Int32)) + nameWithType: StreamExtensions.WriteStreamNullableAsync(Task, Nullable, ISerializationContext, Nullable) + nameWithType.vb: StreamExtensions.WriteStreamNullableAsync(Task(Of Stream), Nullable(Of Stream), ISerializationContext, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync* name: WriteStreamNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStreamNullableAsync_ @@ -6930,12 +9832,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync nameWithType: StreamExtensions.WriteStreamNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream,System.String) - name: WriteString(Stream, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString_Stream_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream,System.String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream, System.String) - nameWithType: StreamExtensions.WriteString(Stream, String) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString(Stream, String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString* name: WriteString href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString_ @@ -6943,12 +9845,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString nameWithType: StreamExtensions.WriteString -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream,System.String) - name: WriteString16(Stream, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16_Stream_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream,System.String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream, System.String) - nameWithType: StreamExtensions.WriteString16(Stream, String) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString16(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString16(Stream, String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16* name: WriteString16 href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16_ @@ -6956,21 +9858,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16 nameWithType: StreamExtensions.WriteString16 -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream,System.String,CancellationToken) - name: WriteString16Async(Stream, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_Stream_System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream,System.String,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream, System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString16Async(Stream, String, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task{Stream},System.String,CancellationToken) - name: WriteString16Async(Task, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_Task_Stream__System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task{Stream},System.String,CancellationToken) - name.vb: WriteString16Async(Task(Of Stream), String, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task, System.String, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task(Of Stream), System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString16Async(Task, String, CancellationToken) - nameWithType.vb: StreamExtensions.WriteString16Async(Task(Of Stream), String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString16Async(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString16Async(Stream, String, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString16Async(Task, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_Task_Stream__System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteString16Async(Task(Of Stream), String, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async(Task(Of Stream), System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString16Async(Task, String, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteString16Async(Task(Of Stream), String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async* name: WriteString16Async href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Async_ @@ -6978,6 +9880,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Async nameWithType: StreamExtensions.WriteString16Async +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString16Nullable(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Nullable_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString16Nullable(Stream, String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable* name: WriteString16Nullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Nullable_ @@ -6985,30 +9893,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable nameWithType: StreamExtensions.WriteString16Nullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable``1(Stream,System.String) - name: WriteString16Nullable(Stream, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16Nullable__1_Stream_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable``1(Stream,System.String) - name.vb: WriteString16Nullable(Of T)(Stream, String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Stream, System.String) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16Nullable(Of T)(Stream, System.String) - nameWithType: StreamExtensions.WriteString16Nullable(Stream, String) - nameWithType.vb: StreamExtensions.WriteString16Nullable(Of T)(Stream, String) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream,System.String,CancellationToken) - name: WriteString16NullableAsync(Stream, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_Stream_System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream,System.String,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream, System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString16NullableAsync(Stream, String, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task{Stream},System.String,CancellationToken) - name: WriteString16NullableAsync(Task, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_Task_Stream__System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task{Stream},System.String,CancellationToken) - name.vb: WriteString16NullableAsync(Task(Of Stream), String, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task, System.String, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task(Of Stream), System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString16NullableAsync(Task, String, CancellationToken) - nameWithType.vb: StreamExtensions.WriteString16NullableAsync(Task(Of Stream), String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString16NullableAsync(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString16NullableAsync(Stream, String, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString16NullableAsync(Task, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_Task_Stream__System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteString16NullableAsync(Task(Of Stream), String, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync(Task(Of Stream), System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString16NullableAsync(Task, String, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteString16NullableAsync(Task(Of Stream), String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync* name: WriteString16NullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString16NullableAsync_ @@ -7016,12 +9915,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync nameWithType: StreamExtensions.WriteString16NullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream,System.String) - name: WriteString32(Stream, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32_Stream_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream,System.String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream, System.String) - nameWithType: StreamExtensions.WriteString32(Stream, String) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString32(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString32(Stream, String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32* name: WriteString32 href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32_ @@ -7029,21 +9928,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32 nameWithType: StreamExtensions.WriteString32 -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream,System.String,CancellationToken) - name: WriteString32Async(Stream, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_Stream_System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream,System.String,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream, System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString32Async(Stream, String, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task{Stream},System.String,CancellationToken) - name: WriteString32Async(Task, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_Task_Stream__System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task{Stream},System.String,CancellationToken) - name.vb: WriteString32Async(Task(Of Stream), String, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task, System.String, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task(Of Stream), System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString32Async(Task, String, CancellationToken) - nameWithType.vb: StreamExtensions.WriteString32Async(Task(Of Stream), String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString32Async(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString32Async(Stream, String, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString32Async(Task, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_Task_Stream__System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteString32Async(Task(Of Stream), String, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async(Task(Of Stream), System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString32Async(Task, String, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteString32Async(Task(Of Stream), String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async* name: WriteString32Async href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Async_ @@ -7051,12 +9950,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async nameWithType: StreamExtensions.WriteString32Async -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream,System.String) - name: WriteString32Nullable(Stream, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Nullable_Stream_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream,System.String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream, System.String) - nameWithType: StreamExtensions.WriteString32Nullable(Stream, String) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString32Nullable(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Nullable_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString32Nullable(Stream, String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable* name: WriteString32Nullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32Nullable_ @@ -7064,21 +9963,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Nullable nameWithType: StreamExtensions.WriteString32Nullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream,System.String,CancellationToken) - name: WriteString32NullableAsync(Stream, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_Stream_System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream,System.String,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream, System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString32NullableAsync(Stream, String, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task{Stream},System.String,CancellationToken) - name: WriteString32NullableAsync(Task, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_Task_Stream__System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task{Stream},System.String,CancellationToken) - name.vb: WriteString32NullableAsync(Task(Of Stream), String, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task, System.String, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task(Of Stream), System.String, CancellationToken) - nameWithType: StreamExtensions.WriteString32NullableAsync(Task, String, CancellationToken) - nameWithType.vb: StreamExtensions.WriteString32NullableAsync(Task(Of Stream), String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString32NullableAsync(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString32NullableAsync(Stream, String, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteString32NullableAsync(Task, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_Task_Stream__System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteString32NullableAsync(Task(Of Stream), String, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync(Task(Of Stream), System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteString32NullableAsync(Task, String, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteString32NullableAsync(Task(Of Stream), String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync* name: WriteString32NullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteString32NullableAsync_ @@ -7086,21 +9985,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32NullableAsync nameWithType: StreamExtensions.WriteString32NullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream,System.String,CancellationToken) - name: WriteStringAsync(Stream, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringAsync_Stream_System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream,System.String,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream, System.String, CancellationToken) - nameWithType: StreamExtensions.WriteStringAsync(Stream, String, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task{Stream},System.String,CancellationToken) - name: WriteStringAsync(Task, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringAsync_Task_Stream__System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task{Stream},System.String,CancellationToken) - name.vb: WriteStringAsync(Task(Of Stream), String, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task, System.String, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task(Of Stream), System.String, CancellationToken) - nameWithType: StreamExtensions.WriteStringAsync(Task, String, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStringAsync(Task(Of Stream), String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteStringAsync(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringAsync_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteStringAsync(Stream, String, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteStringAsync(Task, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringAsync_Task_Stream__System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteStringAsync(Task(Of Stream), String, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync(Task(Of Stream), System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteStringAsync(Task, String, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteStringAsync(Task(Of Stream), String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync* name: WriteStringAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringAsync_ @@ -7108,12 +10007,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync nameWithType: StreamExtensions.WriteStringAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream,System.String) - name: WriteStringNullable(Stream, String) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullable_Stream_System_String_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream,System.String) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream, System.String) - nameWithType: StreamExtensions.WriteStringNullable(Stream, String) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteStringNullable(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullable_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteStringNullable(Stream, String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable* name: WriteStringNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullable_ @@ -7121,21 +10020,21 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullable nameWithType: StreamExtensions.WriteStringNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream,System.String,CancellationToken) - name: WriteStringNullableAsync(Stream, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_Stream_System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream,System.String,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream, System.String, CancellationToken) - nameWithType: StreamExtensions.WriteStringNullableAsync(Stream, String, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task{Stream},System.String,CancellationToken) - name: WriteStringNullableAsync(Task, String, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_Task_Stream__System_String_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task{Stream},System.String,CancellationToken) - name.vb: WriteStringNullableAsync(Task(Of Stream), String, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task, System.String, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task(Of Stream), System.String, CancellationToken) - nameWithType: StreamExtensions.WriteStringNullableAsync(Task, String, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStringNullableAsync(Task(Of Stream), String, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteStringNullableAsync(Stream, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_Stream_System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream,System.String,wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Stream, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteStringNullableAsync(Stream, String, ISerializationContext) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name: WriteStringNullableAsync(Task, String, ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_Task_Stream__System_String_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task{Stream},System.String,wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: WriteStringNullableAsync(Task(Of Stream), String, ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task, System.String, wan24.StreamSerializerExtensions.ISerializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync(Task(Of Stream), System.String, wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamExtensions.WriteStringNullableAsync(Task, String, ISerializationContext) + nameWithType.vb: StreamExtensions.WriteStringNullableAsync(Task(Of Stream), String, ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync* name: WriteStringNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStringNullableAsync_ @@ -7143,12 +10042,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync nameWithType: StreamExtensions.WriteStringNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream,System.Object,System.Boolean) - name: WriteStruct(Stream, Object, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct_Stream_System_Object_System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream,System.Object,System.Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream, System.Object, System.Boolean) - nameWithType: StreamExtensions.WriteStruct(Stream, Object, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStruct(Stream, Object, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStruct(Stream, Object, ISerializationContext, Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct* name: WriteStruct href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct_ @@ -7156,30 +10055,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct nameWithType: StreamExtensions.WriteStruct -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``1(Stream,``0,System.Boolean) - name: WriteStruct(Stream, T, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct__1_Stream___0_System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``1(Stream,``0,System.Boolean) - name.vb: WriteStruct(Of T)(Stream, T, Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream, T, System.Boolean) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Of T)(Stream, T, System.Boolean) - nameWithType: StreamExtensions.WriteStruct(Stream, T, Boolean) - nameWithType.vb: StreamExtensions.WriteStruct(Of T)(Stream, T, Boolean) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,System.Boolean,CancellationToken) - name: WriteStructAsync(Stream, Object, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_Stream_System_Object_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,System.Boolean,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream, System.Object, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructAsync(Stream, Object, Boolean, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) - name: WriteStructAsync(Task, Object, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_Task_Stream__System_Object_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) - name.vb: WriteStructAsync(Task(Of Stream), Object, Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task, System.Object, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task(Of Stream), System.Object, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructAsync(Task, Object, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructAsync(Task(Of Stream), Object, Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStruct(Stream, T, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStruct__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStruct(Of T)(Stream, T, ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStruct(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStruct(Stream, T, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStruct(Of T)(Stream, T, ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructAsync(Stream, Object, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructAsync(Stream, Object, ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructAsync(Task, Object, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStructAsync(Task(Of Stream), Object, ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructAsync(Task, Object, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStructAsync(Task(Of Stream), Object, ISerializationContext, Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync* name: WriteStructAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync_ @@ -7187,30 +10086,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync nameWithType: StreamExtensions.WriteStructAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Stream,``0,System.Boolean,CancellationToken) - name: WriteStructAsync(Stream, T, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync__1_Stream___0_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Stream,``0,System.Boolean,CancellationToken) - name.vb: WriteStructAsync(Of T)(Stream, T, Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream, T, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of T)(Stream, T, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructAsync(Stream, T, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructAsync(Of T)(Stream, T, Boolean, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Task{Stream},``0,System.Boolean,CancellationToken) - name: WriteStructAsync(Task, T, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync__1_Task_Stream____0_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Task{Stream},``0,System.Boolean,CancellationToken) - name.vb: WriteStructAsync(Of T)(Task(Of Stream), T, Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task, T, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of T)(Task(Of Stream), T, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructAsync(Task, T, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructAsync(Of T)(Task(Of Stream), T, Boolean, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,System.Boolean) - name: WriteStructNullable(Stream, Object, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable_Stream_System_Object_System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,System.Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream, System.Object, System.Boolean) - nameWithType: StreamExtensions.WriteStructNullable(Stream, Object, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructAsync(Stream, T, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync__1_Stream___0_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Stream,``0,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStructAsync(Of T)(Stream, T, ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of T)(Stream, T, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructAsync(Stream, T, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStructAsync(Of T)(Stream, T, ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructAsync(Task, T, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructAsync__1_Task_Stream____0_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync``1(Task{Stream},``0,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStructAsync(Of T)(Task(Of Stream), T, ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Task, T, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructAsync(Of T)(Task(Of Stream), T, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructAsync(Task, T, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStructAsync(Of T)(Task(Of Stream), T, ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructNullable(Stream, Object, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructNullable(Stream, Object, ISerializationContext, Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable* name: WriteStructNullable href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable_ @@ -7218,30 +10117,30 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable nameWithType: StreamExtensions.WriteStructNullable -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``1(Stream,System.Nullable{``0},System.Boolean) - name: WriteStructNullable(Stream, Nullable, Boolean) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable__1_Stream_System_Nullable___0__System_Boolean_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``1(Stream,System.Nullable{``0},System.Boolean) - name.vb: WriteStructNullable(Of T)(Stream, Nullable(Of T), Boolean) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream, System.Nullable, System.Boolean) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Of T)(Stream, System.Nullable(Of T), System.Boolean) - nameWithType: StreamExtensions.WriteStructNullable(Stream, Nullable, Boolean) - nameWithType.vb: StreamExtensions.WriteStructNullable(Of T)(Stream, Nullable(Of T), Boolean) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,System.Boolean,CancellationToken) - name: WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_Stream_System_Object_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,System.Boolean,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream, System.Object, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Object, Boolean, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) - name: WriteStructNullableAsync(Task, Object, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_Task_Stream__System_Object_System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task{Stream},System.Object,System.Boolean,CancellationToken) - name.vb: WriteStructNullableAsync(Task(Of Stream), Object, Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task, System.Object, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task(Of Stream), System.Object, System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructNullableAsync(Task, Object, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Task(Of Stream), Object, Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructNullable(Stream, Nullable, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullable__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStructNullable(Of T)(Stream, Nullable(Of T), ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullable(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructNullable(Stream, Nullable, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStructNullable(Of T)(Stream, Nullable(Of T), ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructNullableAsync(Stream, Object, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_Stream_System_Object_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream,System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream, System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Object, ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructNullableAsync(Task, Object, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_Task_Stream__System_Object_wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task{Stream},System.Object,wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStructNullableAsync(Task(Of Stream), Object, ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task, System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task(Of Stream), System.Object, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructNullableAsync(Task, Object, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Task(Of Stream), Object, ISerializationContext, Boolean) - uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync* name: WriteStructNullableAsync href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync_ @@ -7249,24 +10148,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync nameWithType: StreamExtensions.WriteStructNullableAsync -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Stream,System.Nullable{``0},System.Boolean,CancellationToken) - name: WriteStructNullableAsync(Stream, Nullable, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync__1_Stream_System_Nullable___0__System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Stream,System.Nullable{``0},System.Boolean,CancellationToken) - name.vb: WriteStructNullableAsync(Of T)(Stream, Nullable(Of T), Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream, System.Nullable, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of T)(Stream, System.Nullable(Of T), System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Nullable, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of T)(Stream, Nullable(Of T), Boolean, CancellationToken) -- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Task{Stream},System.Nullable{``0},System.Boolean,CancellationToken) - name: WriteStructNullableAsync(Task, Nullable, Boolean, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync__1_Task_Stream__System_Nullable___0__System_Boolean_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Task{Stream},System.Nullable{``0},System.Boolean,CancellationToken) - name.vb: WriteStructNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), Boolean, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task, System.Nullable, System.Boolean, CancellationToken) - fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), System.Boolean, CancellationToken) - nameWithType: StreamExtensions.WriteStructNullableAsync(Task, Nullable, Boolean, CancellationToken) - nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), Boolean, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructNullableAsync(Stream, Nullable, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync__1_Stream_System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Stream,System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStructNullableAsync(Of T)(Stream, Nullable(Of T), ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of T)(Stream, System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructNullableAsync(Stream, Nullable, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of T)(Stream, Nullable(Of T), ISerializationContext, Boolean) +- uid: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name: WriteStructNullableAsync(Task, Nullable, ISerializationContext, Boolean) + href: api/wan24.StreamSerializerExtensions.StreamExtensions.html#wan24_StreamSerializerExtensions_StreamExtensions_WriteStructNullableAsync__1_Task_Stream__System_Nullable___0__wan24_StreamSerializerExtensions_ISerializationContext_System_Boolean_ + commentId: M:wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync``1(Task{Stream},System.Nullable{``0},wan24.StreamSerializerExtensions.ISerializationContext,System.Boolean) + name.vb: WriteStructNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext, Boolean) + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Task, System.Nullable, wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + fullName.vb: wan24.StreamSerializerExtensions.StreamExtensions.WriteStructNullableAsync(Of T)(Task(Of Stream), System.Nullable(Of T), wan24.StreamSerializerExtensions.ISerializationContext, System.Boolean) + nameWithType: StreamExtensions.WriteStructNullableAsync(Task, Nullable, ISerializationContext, Boolean) + nameWithType.vb: StreamExtensions.WriteStructNullableAsync(Of T)(Task(Of Stream), Nullable(Of T), ISerializationContext, Boolean) - uid: wan24.StreamSerializerExtensions.StreamSerializer name: StreamSerializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html @@ -7279,30 +10178,30 @@ references: commentId: F:wan24.StreamSerializerExtensions.StreamSerializer.AllowedTypes fullName: wan24.StreamSerializerExtensions.StreamSerializer.AllowedTypes nameWithType: StreamSerializer.AllowedTypes -- uid: wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate - name: StreamSerializer.AsyncDeserialize_Delegate - href: api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate.html - commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate - fullName: wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserialize_Delegate - nameWithType: StreamSerializer.AsyncDeserialize_Delegate - uid: wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer name: AsyncDeserializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_AsyncDeserializer commentId: F:wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer fullName: wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer nameWithType: StreamSerializer.AsyncDeserializer -- uid: wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate - name: StreamSerializer.AsyncSerialize_Delegate - href: api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate.html - commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate - fullName: wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerialize_Delegate - nameWithType: StreamSerializer.AsyncSerialize_Delegate +- uid: wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate + name: StreamSerializer.AsyncDeserializer_Delegate + href: api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate + fullName: wan24.StreamSerializerExtensions.StreamSerializer.AsyncDeserializer_Delegate + nameWithType: StreamSerializer.AsyncDeserializer_Delegate - uid: wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer name: AsyncSerializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_AsyncSerializer commentId: F:wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer fullName: wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer nameWithType: StreamSerializer.AsyncSerializer +- uid: wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate + name: StreamSerializer.AsyncSerializer_Delegate + href: api/wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate + fullName: wan24.StreamSerializerExtensions.StreamSerializer.AsyncSerializer_Delegate + nameWithType: StreamSerializer.AsyncSerializer_Delegate - uid: wan24.StreamSerializerExtensions.StreamSerializer.BufferPool name: BufferPool href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_BufferPool @@ -7316,15 +10215,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializer.BufferPool nameWithType: StreamSerializer.BufferPool -- uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(System.Reflection.ConstructorInfo@,Type,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: CreateInstance(out ConstructorInfo, Type, Stream, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance_System_Reflection_ConstructorInfo__Type_Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(System.Reflection.ConstructorInfo@,Type,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: CreateInstance(ByRef ConstructorInfo, Type, Stream, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(out System.Reflection.ConstructorInfo, Type, Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(ByRef System.Reflection.ConstructorInfo, Type, Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamSerializer.CreateInstance(out ConstructorInfo, Type, Stream, Nullable, ISerializerOptions) - nameWithType.vb: StreamSerializer.CreateInstance(ByRef ConstructorInfo, Type, Stream, Nullable(Of Int32), ISerializerOptions) +- uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(System.Reflection.ConstructorInfo@,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name: CreateInstance(out ConstructorInfo, Type, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance_System_Reflection_ConstructorInfo__Type_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(System.Reflection.ConstructorInfo@,Type,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: CreateInstance(ByRef ConstructorInfo, Type, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(out System.Reflection.ConstructorInfo, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(ByRef System.Reflection.ConstructorInfo, Type, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializer.CreateInstance(out ConstructorInfo, Type, IDeserializationContext) + nameWithType.vb: StreamSerializer.CreateInstance(ByRef ConstructorInfo, Type, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance* name: CreateInstance href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance_ @@ -7332,21 +10231,34 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance nameWithType: StreamSerializer.CreateInstance -- uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance``1(System.Reflection.ConstructorInfo@,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name: CreateInstance(out ConstructorInfo, Stream, Nullable, ISerializerOptions) - href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance__1_System_Reflection_ConstructorInfo__Stream_System_Nullable_System_Int32__wan24_StreamSerializerExtensions_ISerializerOptions_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance``1(System.Reflection.ConstructorInfo@,Stream,System.Nullable{System.Int32},wan24.StreamSerializerExtensions.ISerializerOptions) - name.vb: CreateInstance(Of T)(ByRef ConstructorInfo, Stream, Nullable(Of Int32), ISerializerOptions) - fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(out System.Reflection.ConstructorInfo, Stream, System.Nullable, wan24.StreamSerializerExtensions.ISerializerOptions) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(Of T)(ByRef System.Reflection.ConstructorInfo, Stream, System.Nullable(Of System.Int32), wan24.StreamSerializerExtensions.ISerializerOptions) - nameWithType: StreamSerializer.CreateInstance(out ConstructorInfo, Stream, Nullable, ISerializerOptions) - nameWithType.vb: StreamSerializer.CreateInstance(Of T)(ByRef ConstructorInfo, Stream, Nullable(Of Int32), ISerializerOptions) -- uid: wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate - name: StreamSerializer.Deserialize_Delegate - href: api/wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate.html - commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate - fullName: wan24.StreamSerializerExtensions.StreamSerializer.Deserialize_Delegate - nameWithType: StreamSerializer.Deserialize_Delegate +- uid: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance``1(System.Reflection.ConstructorInfo@,wan24.StreamSerializerExtensions.IDeserializationContext) + name: CreateInstance(out ConstructorInfo, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_CreateInstance__1_System_Reflection_ConstructorInfo__wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance``1(System.Reflection.ConstructorInfo@,wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: CreateInstance(Of T)(ByRef ConstructorInfo, IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(out System.Reflection.ConstructorInfo, wan24.StreamSerializerExtensions.IDeserializationContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializer.CreateInstance(Of T)(ByRef System.Reflection.ConstructorInfo, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializer.CreateInstance(out ConstructorInfo, IDeserializationContext) + nameWithType.vb: StreamSerializer.CreateInstance(Of T)(ByRef ConstructorInfo, IDeserializationContext) +- uid: wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate + name: StreamSerializer.Deserializer_Delegate + href: api/wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate + fullName: wan24.StreamSerializerExtensions.StreamSerializer.Deserializer_Delegate + nameWithType: StreamSerializer.Deserializer_Delegate +- uid: wan24.StreamSerializerExtensions.StreamSerializer.EnableTypeCache + name: EnableTypeCache() + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_EnableTypeCache + commentId: M:wan24.StreamSerializerExtensions.StreamSerializer.EnableTypeCache + fullName: wan24.StreamSerializerExtensions.StreamSerializer.EnableTypeCache() + nameWithType: StreamSerializer.EnableTypeCache() +- uid: wan24.StreamSerializerExtensions.StreamSerializer.EnableTypeCache* + name: EnableTypeCache + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_EnableTypeCache_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializer.EnableTypeCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializer.EnableTypeCache + nameWithType: StreamSerializer.EnableTypeCache - uid: wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncDeserializer(Type) name: FindAsyncDeserializer(Type) href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_FindAsyncDeserializer_Type_ @@ -7439,6 +10351,19 @@ references: commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate fullName: wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate nameWithType: StreamSerializer.FindSyncSerializer_Delegate +- uid: wan24.StreamSerializerExtensions.StreamSerializer.HashCodeCachePool + name: HashCodeCachePool + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_HashCodeCachePool + commentId: P:wan24.StreamSerializerExtensions.StreamSerializer.HashCodeCachePool + fullName: wan24.StreamSerializerExtensions.StreamSerializer.HashCodeCachePool + nameWithType: StreamSerializer.HashCodeCachePool +- uid: wan24.StreamSerializerExtensions.StreamSerializer.HashCodeCachePool* + name: HashCodeCachePool + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_HashCodeCachePool_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializer.HashCodeCachePool + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializer.HashCodeCachePool + nameWithType: StreamSerializer.HashCodeCachePool - uid: wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate name: StreamSerializer.Init_Delegate href: api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html @@ -7489,6 +10414,19 @@ references: commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate fullName: wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate nameWithType: StreamSerializer.LoadType_Delegate +- uid: wan24.StreamSerializerExtensions.StreamSerializer.ObjectCachePool + name: ObjectCachePool + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_ObjectCachePool + commentId: P:wan24.StreamSerializerExtensions.StreamSerializer.ObjectCachePool + fullName: wan24.StreamSerializerExtensions.StreamSerializer.ObjectCachePool + nameWithType: StreamSerializer.ObjectCachePool +- uid: wan24.StreamSerializerExtensions.StreamSerializer.ObjectCachePool* + name: ObjectCachePool + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_ObjectCachePool_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializer.ObjectCachePool + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializer.ObjectCachePool + nameWithType: StreamSerializer.ObjectCachePool - uid: wan24.StreamSerializerExtensions.StreamSerializer.OnFindAsyncDeserializer name: OnFindAsyncDeserializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_OnFindAsyncDeserializer @@ -7525,12 +10463,12 @@ references: commentId: E:wan24.StreamSerializerExtensions.StreamSerializer.OnLoadType fullName: wan24.StreamSerializerExtensions.StreamSerializer.OnLoadType nameWithType: StreamSerializer.OnLoadType -- uid: wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate - name: StreamSerializer.Serialize_Delegate - href: api/wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate.html - commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate - fullName: wan24.StreamSerializerExtensions.StreamSerializer.Serialize_Delegate - nameWithType: StreamSerializer.Serialize_Delegate +- uid: wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate + name: StreamSerializer.Serializer_Delegate + href: api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.html + commentId: T:wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate + fullName: wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate + nameWithType: StreamSerializer.Serializer_Delegate - uid: wan24.StreamSerializerExtensions.StreamSerializer.SyncDeserializer name: SyncDeserializer href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_SyncDeserializer @@ -7549,6 +10487,32 @@ references: commentId: F:wan24.StreamSerializerExtensions.StreamSerializer.SyncSerializer fullName: wan24.StreamSerializerExtensions.StreamSerializer.SyncSerializer nameWithType: StreamSerializer.SyncSerializer +- uid: wan24.StreamSerializerExtensions.StreamSerializer.TypeCacheEnabled + name: TypeCacheEnabled + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_TypeCacheEnabled + commentId: P:wan24.StreamSerializerExtensions.StreamSerializer.TypeCacheEnabled + fullName: wan24.StreamSerializerExtensions.StreamSerializer.TypeCacheEnabled + nameWithType: StreamSerializer.TypeCacheEnabled +- uid: wan24.StreamSerializerExtensions.StreamSerializer.TypeCacheEnabled* + name: TypeCacheEnabled + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_TypeCacheEnabled_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializer.TypeCacheEnabled + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializer.TypeCacheEnabled + nameWithType: StreamSerializer.TypeCacheEnabled +- uid: wan24.StreamSerializerExtensions.StreamSerializer.TypeCachePool + name: TypeCachePool + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_TypeCachePool + commentId: P:wan24.StreamSerializerExtensions.StreamSerializer.TypeCachePool + fullName: wan24.StreamSerializerExtensions.StreamSerializer.TypeCachePool + nameWithType: StreamSerializer.TypeCachePool +- uid: wan24.StreamSerializerExtensions.StreamSerializer.TypeCachePool* + name: TypeCachePool + href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_TypeCachePool_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializer.TypeCachePool + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializer.TypeCachePool + nameWithType: StreamSerializer.TypeCachePool - uid: wan24.StreamSerializerExtensions.StreamSerializer.Version name: Version href: api/wan24.StreamSerializerExtensions.StreamSerializer.html#wan24_StreamSerializerExtensions_StreamSerializer_Version @@ -7574,12 +10538,12 @@ references: commentId: T:wan24.StreamSerializerExtensions.StreamSerializerAdapter fullName: wan24.StreamSerializerExtensions.StreamSerializerAdapter nameWithType: StreamSerializerAdapter -- uid: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion(Stream,System.Int32,System.Int32) - name: ReadSerializedObjectVersion(Stream, Int32, Int32) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html#wan24_StreamSerializerExtensions_StreamSerializerAdapter_ReadSerializedObjectVersion_Stream_System_Int32_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion(Stream,System.Int32,System.Int32) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion(Stream, System.Int32, System.Int32) - nameWithType: StreamSerializerAdapter.ReadSerializedObjectVersion(Stream, Int32, Int32) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32) + name: ReadSerializedObjectVersion(IDeserializationContext, Int32) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html#wan24_StreamSerializerExtensions_StreamSerializerAdapter_ReadSerializedObjectVersion_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion(wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32) + nameWithType: StreamSerializerAdapter.ReadSerializedObjectVersion(IDeserializationContext, Int32) - uid: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion* name: ReadSerializedObjectVersion href: api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html#wan24_StreamSerializerExtensions_StreamSerializerAdapter_ReadSerializedObjectVersion_ @@ -7587,12 +10551,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersion nameWithType: StreamSerializerAdapter.ReadSerializedObjectVersion -- uid: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersionAsync(Stream,System.Int32,System.Int32,CancellationToken) - name: ReadSerializedObjectVersionAsync(Stream, Int32, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html#wan24_StreamSerializerExtensions_StreamSerializerAdapter_ReadSerializedObjectVersionAsync_Stream_System_Int32_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersionAsync(Stream,System.Int32,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersionAsync(Stream, System.Int32, System.Int32, CancellationToken) - nameWithType: StreamSerializerAdapter.ReadSerializedObjectVersionAsync(Stream, Int32, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersionAsync(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32) + name: ReadSerializedObjectVersionAsync(IDeserializationContext, Int32) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html#wan24_StreamSerializerExtensions_StreamSerializerAdapter_ReadSerializedObjectVersionAsync_wan24_StreamSerializerExtensions_IDeserializationContext_System_Int32_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersionAsync(wan24.StreamSerializerExtensions.IDeserializationContext,System.Int32) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersionAsync(wan24.StreamSerializerExtensions.IDeserializationContext, System.Int32) + nameWithType: StreamSerializerAdapter.ReadSerializedObjectVersionAsync(IDeserializationContext, Int32) - uid: wan24.StreamSerializerExtensions.StreamSerializerAdapter.ReadSerializedObjectVersionAsync* name: ReadSerializedObjectVersionAsync href: api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html#wan24_StreamSerializerExtensions_StreamSerializerAdapter_ReadSerializedObjectVersionAsync_ @@ -7625,15 +10589,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamSerializerAttribute nameWithType: StreamSerializerAttribute.StreamSerializerAttribute -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},wan24.Core.PropertyInfoExt) - name: CreateSerializerOptions(Nullable, PropertyInfoExt) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_System_Nullable_Type__wan24_Core_PropertyInfoExt_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},wan24.Core.PropertyInfoExt) - name.vb: CreateSerializerOptions(Nullable(Of Type), PropertyInfoExt) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable, wan24.Core.PropertyInfoExt) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable(Of Type), wan24.Core.PropertyInfoExt) - nameWithType: StreamSerializerAttribute.CreateSerializerOptions(Nullable, PropertyInfoExt) - nameWithType.vb: StreamSerializerAttribute.CreateSerializerOptions(Nullable(Of Type), PropertyInfoExt) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Nullable{PropertyInfoExt}) + name: CreateSerializerOptions(Nullable, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_System_Nullable_Type__System_Nullable_PropertyInfoExt__ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable{Type},System.Nullable{PropertyInfoExt}) + name.vb: CreateSerializerOptions(Nullable(Of Type), Nullable(Of PropertyInfoExt)) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions(System.Nullable(Of Type), System.Nullable(Of PropertyInfoExt)) + nameWithType: StreamSerializerAttribute.CreateSerializerOptions(Nullable, Nullable) + nameWithType.vb: StreamSerializerAttribute.CreateSerializerOptions(Nullable(Of Type), Nullable(Of PropertyInfoExt)) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.CreateSerializerOptions* name: CreateSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_CreateSerializerOptions_ @@ -7654,12 +10618,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.FromVersion nameWithType: StreamSerializerAttribute.FromVersion -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - name: GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetKeySerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.ISerializerContext) + name: GetKeySerializerOptions(Nullable, ISerializerContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_ISerializerContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.ISerializerContext) + name.vb: GetKeySerializerOptions(Nullable(Of PropertyInfoExt), ISerializerContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable, wan24.StreamSerializerExtensions.ISerializerContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.ISerializerContext) + nameWithType: StreamSerializerAttribute.GetKeySerializerOptions(Nullable, ISerializerContext) + nameWithType.vb: StreamSerializerAttribute.GetKeySerializerOptions(Nullable(Of PropertyInfoExt), ISerializerContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetKeySerializerOptions* name: GetKeySerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetKeySerializerOptions_ @@ -7696,12 +10663,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetReadProperties nameWithType: StreamSerializerAttribute.GetReadProperties -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - name: GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.ISerializerContext) + name: GetSerializerOptions(Nullable, ISerializerContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_ISerializerContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.ISerializerContext) + name.vb: GetSerializerOptions(Nullable(Of PropertyInfoExt), ISerializerContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable, wan24.StreamSerializerExtensions.ISerializerContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.ISerializerContext) + nameWithType: StreamSerializerAttribute.GetSerializerOptions(Nullable, ISerializerContext) + nameWithType.vb: StreamSerializerAttribute.GetSerializerOptions(Nullable(Of PropertyInfoExt), ISerializerContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions* name: GetSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetSerializerOptions_ @@ -7709,12 +10679,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetSerializerOptions nameWithType: StreamSerializerAttribute.GetSerializerOptions -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream(System.Object,System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - name: GetStream(Object, PropertyInfo, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetStream_System_Object_System_Reflection_PropertyInfo_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream(System.Object,System.Reflection.PropertyInfo,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream(System.Object, System.Reflection.PropertyInfo, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetStream(Object, PropertyInfo, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream(System.Object,System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.IDeserializationContext) + name: GetStream(Object, PropertyInfo, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetStream_System_Object_System_Reflection_PropertyInfo_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream(System.Object,System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream(System.Object, System.Reflection.PropertyInfo, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerAttribute.GetStream(Object, PropertyInfo, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetStream* name: GetStream href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetStream_ @@ -7735,12 +10705,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetUseDefaultValue nameWithType: StreamSerializerAttribute.GetUseDefaultValue -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - name: GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_wan24_Core_PropertyInfoExt_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(wan24.Core.PropertyInfoExt,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(wan24.Core.PropertyInfoExt, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.GetValueSerializerOptions(PropertyInfoExt, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.ISerializerContext) + name: GetValueSerializerOptions(Nullable, ISerializerContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_System_Nullable_PropertyInfoExt__wan24_StreamSerializerExtensions_ISerializerContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable{PropertyInfoExt},wan24.StreamSerializerExtensions.ISerializerContext) + name.vb: GetValueSerializerOptions(Nullable(Of PropertyInfoExt), ISerializerContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable, wan24.StreamSerializerExtensions.ISerializerContext) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions(System.Nullable(Of PropertyInfoExt), wan24.StreamSerializerExtensions.ISerializerContext) + nameWithType: StreamSerializerAttribute.GetValueSerializerOptions(Nullable, ISerializerContext) + nameWithType.vb: StreamSerializerAttribute.GetValueSerializerOptions(Nullable(Of PropertyInfoExt), ISerializerContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.GetValueSerializerOptions* name: GetValueSerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_GetValueSerializerOptions_ @@ -7842,12 +10815,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.MaxLen nameWithType: StreamSerializerAttribute.MaxLen -- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.MemoryStreamFactory(System.Object,System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute,Stream,System.Int32,CancellationToken) - name: MemoryStreamFactory(Object, PropertyInfo, StreamSerializerAttribute, Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_MemoryStreamFactory_System_Object_System_Reflection_PropertyInfo_wan24_StreamSerializerExtensions_StreamSerializerAttribute_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.MemoryStreamFactory(System.Object,System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute,Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.MemoryStreamFactory(System.Object, System.Reflection.PropertyInfo, wan24.StreamSerializerExtensions.StreamSerializerAttribute, Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerAttribute.MemoryStreamFactory(Object, PropertyInfo, StreamSerializerAttribute, Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.MemoryStreamFactory(System.Object,System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute,wan24.StreamSerializerExtensions.IDeserializationContext) + name: MemoryStreamFactory(Object, PropertyInfo, StreamSerializerAttribute, IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_MemoryStreamFactory_System_Object_System_Reflection_PropertyInfo_wan24_StreamSerializerExtensions_StreamSerializerAttribute_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerAttribute.MemoryStreamFactory(System.Object,System.Reflection.PropertyInfo,wan24.StreamSerializerExtensions.StreamSerializerAttribute,wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.MemoryStreamFactory(System.Object, System.Reflection.PropertyInfo, wan24.StreamSerializerExtensions.StreamSerializerAttribute, wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerAttribute.MemoryStreamFactory(Object, PropertyInfo, StreamSerializerAttribute, IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.MemoryStreamFactory* name: MemoryStreamFactory href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_MemoryStreamFactory_ @@ -7913,6 +10886,19 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.Position nameWithType: StreamSerializerAttribute.Position +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.Serializer + name: Serializer + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_Serializer + commentId: P:wan24.StreamSerializerExtensions.StreamSerializerAttribute.Serializer + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.Serializer + nameWithType: StreamSerializerAttribute.Serializer +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.Serializer* + name: Serializer + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_Serializer_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializerAttribute.Serializer + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.Serializer + nameWithType: StreamSerializerAttribute.Serializer - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptions name: SerializerOptions href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_SerializerOptions @@ -8016,6 +11002,19 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactoryType nameWithType: StreamSerializerAttribute.StreamFactoryType +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseCache + name: UseCache + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_UseCache + commentId: P:wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseCache + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseCache + nameWithType: StreamSerializerAttribute.UseCache +- uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseCache* + name: UseCache + href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_UseCache_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseCache + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseCache + nameWithType: StreamSerializerAttribute.UseCache - uid: wan24.StreamSerializerExtensions.StreamSerializerAttribute.UseDefaultValues name: UseDefaultValues href: api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html#wan24_StreamSerializerExtensions_StreamSerializerAttribute_UseDefaultValues @@ -8100,15 +11099,6 @@ references: commentId: T:wan24.StreamSerializerExtensions.StreamSerializerBase fullName: wan24.StreamSerializerExtensions.StreamSerializerBase nameWithType: StreamSerializerBase -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.#ctor(Stream,System.Int32,System.Nullable{System.Int32}) - name: StreamSerializerBase(Stream, Int32, Nullable) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase__ctor_Stream_System_Int32_System_Nullable_System_Int32__ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.#ctor(Stream,System.Int32,System.Nullable{System.Int32}) - name.vb: StreamSerializerBase(Stream, Int32, Nullable(Of Int32)) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.StreamSerializerBase(Stream, System.Int32, System.Nullable) - fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerBase.StreamSerializerBase(Stream, System.Int32, System.Nullable(Of System.Int32)) - nameWithType: StreamSerializerBase.StreamSerializerBase(Stream, Int32, Nullable) - nameWithType.vb: StreamSerializerBase.StreamSerializerBase(Stream, Int32, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.#ctor(System.Nullable{System.Int32}) name: StreamSerializerBase(Nullable) href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase__ctor_System_Nullable_System_Int32__ @@ -8118,6 +11108,15 @@ references: fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerBase.StreamSerializerBase(System.Nullable(Of System.Int32)) nameWithType: StreamSerializerBase.StreamSerializerBase(Nullable) nameWithType.vb: StreamSerializerBase.StreamSerializerBase(Nullable(Of Int32)) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32}) + name: StreamSerializerBase(IDeserializationContext, Nullable) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase__ctor_wan24_StreamSerializerExtensions_IDeserializationContext_System_Nullable_System_Int32__ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.#ctor(wan24.StreamSerializerExtensions.IDeserializationContext,System.Nullable{System.Int32}) + name.vb: StreamSerializerBase(IDeserializationContext, Nullable(Of Int32)) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.StreamSerializerBase(wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable) + fullName.vb: wan24.StreamSerializerExtensions.StreamSerializerBase.StreamSerializerBase(wan24.StreamSerializerExtensions.IDeserializationContext, System.Nullable(Of System.Int32)) + nameWithType: StreamSerializerBase.StreamSerializerBase(IDeserializationContext, Nullable) + nameWithType.vb: StreamSerializerBase.StreamSerializerBase(IDeserializationContext, Nullable(Of Int32)) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.#ctor* name: StreamSerializerBase href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase__ctor_ @@ -8131,12 +11130,12 @@ references: commentId: F:wan24.StreamSerializerExtensions.StreamSerializerBase.BASE_VERSION fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.BASE_VERSION nameWithType: StreamSerializerBase.BASE_VERSION -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize(Stream,System.Int32) - name: Deserialize(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_Deserialize_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize(Stream,System.Int32) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize(Stream, System.Int32) - nameWithType: StreamSerializerBase.Deserialize(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerBase.Deserialize(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize* name: Deserialize href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_Deserialize_ @@ -8144,12 +11143,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.Deserialize nameWithType: StreamSerializerBase.Deserialize -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync(Stream,System.Int32,CancellationToken) - name: DeserializeAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_DeserializeAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync(Stream,System.Int32,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync(Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerBase.DeserializeAsync(Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerBase.DeserializeAsync(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync* name: DeserializeAsync href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_DeserializeAsync_ @@ -8157,12 +11156,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.DeserializeAsync nameWithType: StreamSerializerBase.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize(Stream) - name: Serialize(Stream) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_Serialize_Stream_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize(Stream) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize(Stream) - nameWithType: StreamSerializerBase.Serialize(Stream) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamSerializerBase.Serialize(ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize* name: Serialize href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_Serialize_ @@ -8170,12 +11169,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.Serialize nameWithType: StreamSerializerBase.Serialize -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync(Stream,CancellationToken) - name: SerializeAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_SerializeAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync(Stream,CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync(Stream, CancellationToken) - nameWithType: StreamSerializerBase.SerializeAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamSerializerBase.SerializeAsync(ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync* name: SerializeAsync href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_SerializeAsync_ @@ -8183,14 +11182,14 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.SerializeAsync nameWithType: StreamSerializerBase.SerializeAsync -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(Stream,System.Int32) - name: IStreamSerializer.Deserialize(Stream, Int32) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_Stream_System_Int32_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(Stream,System.Int32) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream, Int32) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream, System.Int32) - nameWithType: StreamSerializerBase.IStreamSerializer.Deserialize(Stream, Int32) - nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(Stream, Int32) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name: IStreamSerializer.Deserialize(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerBase.IStreamSerializer.Deserialize(IDeserializationContext) + nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Deserialize* name: IStreamSerializer.Deserialize href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Deserialize_ @@ -8200,14 +11199,14 @@ references: fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize nameWithType: StreamSerializerBase.IStreamSerializer.Deserialize nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Deserialize -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(Stream,System.Int32,CancellationToken) - name: IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_Stream_System_Int32_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(Stream,System.Int32,CancellationToken) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream, System.Int32, CancellationToken) - nameWithType: StreamSerializerBase.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) - nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(Stream, Int32, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name: IStreamSerializer.DeserializeAsync(IDeserializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_wan24_StreamSerializerExtensions_IDeserializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(IDeserializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(wan24.StreamSerializerExtensions.IDeserializationContext) + nameWithType: StreamSerializerBase.IStreamSerializer.DeserializeAsync(IDeserializationContext) + nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync(IDeserializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#DeserializeAsync* name: IStreamSerializer.DeserializeAsync href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_DeserializeAsync_ @@ -8217,14 +11216,14 @@ references: fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync nameWithType: StreamSerializerBase.IStreamSerializer.DeserializeAsync nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.DeserializeAsync -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(Stream) - name: IStreamSerializer.Serialize(Stream) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_Stream_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(Stream) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) - nameWithType: StreamSerializerBase.IStreamSerializer.Serialize(Stream) - nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(Stream) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name: IStreamSerializer.Serialize(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamSerializerBase.IStreamSerializer.Serialize(ISerializationContext) + nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize(ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#Serialize* name: IStreamSerializer.Serialize href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_Serialize_ @@ -8234,14 +11233,14 @@ references: fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize nameWithType: StreamSerializerBase.IStreamSerializer.Serialize nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.Serialize -- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(Stream,CancellationToken) - name: IStreamSerializer.SerializeAsync(Stream, CancellationToken) - href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_Stream_CancellationToken_ - commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(Stream,CancellationToken) - name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream, CancellationToken) - fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream, CancellationToken) - nameWithType: StreamSerializerBase.IStreamSerializer.SerializeAsync(Stream, CancellationToken) - nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(Stream, CancellationToken) +- uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name: IStreamSerializer.SerializeAsync(ISerializationContext) + href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_wan24_StreamSerializerExtensions_ISerializationContext_ + commentId: M:wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + name.vb: wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(ISerializationContext) + fullName: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(wan24.StreamSerializerExtensions.ISerializationContext) + nameWithType: StreamSerializerBase.IStreamSerializer.SerializeAsync(ISerializationContext) + nameWithType.vb: StreamSerializerBase.wan24.StreamSerializerExtensions.IStreamSerializer.SerializeAsync(ISerializationContext) - uid: wan24.StreamSerializerExtensions.StreamSerializerBase.wan24#StreamSerializerExtensions#IStreamSerializer#SerializeAsync* name: IStreamSerializer.SerializeAsync href: api/wan24.StreamSerializerExtensions.StreamSerializerBase.html#wan24_StreamSerializerExtensions_StreamSerializerBase_wan24_StreamSerializerExtensions_IStreamSerializer_SerializeAsync_ diff --git a/src/Stream-Serializer-Extensions Docs/index.md b/src/Stream-Serializer-Extensions Docs/index.md index d4c928f..c85de16 100644 --- a/src/Stream-Serializer-Extensions Docs/index.md +++ b/src/Stream-Serializer-Extensions Docs/index.md @@ -15,13 +15,12 @@ The built in serializer supports binary serialization of - dictionaries - byte arrays - structures -- possibly any other objects with a parameterless public constructor -- streams +- possibly any other types +- streams (embedded) +- CLR type informations and exports an asynchronous fluent API for writing operations, too. -**NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. - It's possible to override the build in serializers, and to add custom type serializers, too. @@ -30,39 +29,93 @@ binary serializable with backward compatibility, easily. The serializer is designed to produce only a minimum of absolutely required overhead, which sometimes can result in even less data, too (compared to -usually used serialization methods). +usually used serialization methods). The produced binary sequences are + +- processor architecture independent +- platform independent +- runtime independent +- language independent +- type and type version safe +- compatible with newer serializer versions +- as small as possible (trade off between complexity <-> performance <-> size) +- using aggressive caching + +In theory it'd by possible to deserialize a binary sequence using a language +such as JavaScript or C++. However, at present there's only a .NET +implementation of the (de)serializer available. + +**NOTE**: The deserialized type must be present at the processing computer. +The deserializer won't create anonymous types. Only for deserializing CLR type +informations there's a type implemented which can be used to browse the +seqenced CLR type informations before trying to get a `Type` instance, finally. + +Most people think of object serialization, but this library can be used to +deserialize any binary sequence, and also a text format (which is an encoded +binary sequence at a higher level) may be parsed as well. And since a stream +is a quiet abstract type, the output/input must not be a file all the time. +Using some creativity just everything can be serialized or deserialized and +target any stream consuming interface. The API is fully synchronous and asynchronous - you choose depending on the used stream type. +**TIP**: Because often very tiny sequences will be written/red, you may want +to use a buffering stream to gain more performance! Streams will be accessed +non-seeking and sequential only. + Cold storage of serialized sequences can be challenging. Using the build in sequencer versioning you can ensure that a sequence can be deserialized at any time after a component was updated. -## Methods +## How to get it + +This library is available as +[NuGet package "Stream-Serializer-Extensions"](https://www.nuget.org/packages/Stream-Serializer-Extensions/). -The `Write` and `WriteAsync` methods will be extended with supported types, -while serializing some types is being done with specialized methods: +There's also another +[NuGet package "Stream-Serializer-Extensions-Full"](https://www.nuget.org/packages/Stream-Serializer-Extensions-Full/), +which contains advanced serialization tools. -| Type | Serialization method | Deserialization method | +## Methods + +| Type | Serialization | Deserialization | | --- | --- | --- | -| `string` | `WriteString*` | `ReadString*` | -| `Enum` | `WriteEnum*` | `ReadEnum*` | -| `Array` | `Write*Array*` | `Read*Array*` | -| `List` | `WriteList*` | `ReadList*` | -| `Dictionary` | `WriteDict*` | `ReadDict*` | -| `IStreamSerializer` | `WriteSerialized*` | `ReadSerialized*` | -| `byte[]` | `WriteBytes*` | `ReadBytes*` | -| `Stream` | `WriteStream*` | `ReadStream*` | -| Structure | `WriteStruct*` | `ReadStruct*` | -| (any other) | `WriteAnyObject*` | `ReadAnyObject*` | +| `bool` | `Write` | `ReadBool` | +| `sbyte` | `Write` | `ReadOneSByte` | +| `byte` | `Write` | `ReadOneByte` | +| `short` | `Write` | `ReadShort` | +| `ushort` | `Write` | `ReadUShort` | +| `int` | `Write` | `ReadInt` | +| `uint` | `Write` | `ReadUInt` | +| `long` | `Write` | `ReadLong` | +| `ulong` | `Write` | `ReadULong` | +| `float` | `Write` | `ReadFloat` | +| `double` | `Write` | `ReadDouble` | +| `decimal` | `Write` | `ReadDecimal` | +| (U)Int 8-64, `float`, `double`, `decimal` | `WriteNumber` | `ReadNumber` | +| `Enum` | `WriteEnum` | `ReadEnum` | +| `byte[]` | `WriteBytes` | `ReadBytes` | +| `string` (UTF-8) | `WriteString` | `ReadString` | +| `string` (UTF-16) | `WriteString16` | `ReadString16` | +| `string` (UTF-32) | `WriteString32` | `ReadString32` | +| `IStreamSerializer` (class) | `WriteSerialized` | `ReadSerialized` | +| `IStreamSerializer` (structure) | `WriteSerializedStruct` | `ReadSerializedStruct` | +| Structures | `WriteStruct` | `ReadStruct` | +| `Array` (variable length) | `WriteArray` | `ReadArray` | +| `Array` (fixed length) | `WriteFixedArray` | `ReadFixedArray` | +| `IList` | `WriteList` | `ReadList` | +| `IDictionary` | `WriteDict` | `ReadDict` | +| `Stream` | `WriteStream` | `ReadStream` | +| `Type` | `WriteType` | `ReadType` | + +**NOTE**: In general you should use the opposite method for reading a binary +sequence that you've used for writing it! For all methods there is an `*Async` +version also. Use the `*Nullable*` methods for writing/reading nullable +values. Some may have to add an extra byte for `null` detection. Using the `WriteObject*` and `ReadObject*` methods you can let the library decide which method to use for the given object type. -Using the `WriteAny*` and `ReadAny*` methods, you can write and read an object -with a dynamic type. - Using the `WriteAnyObject*` and `ReadAnyObject*` methods you can also (de)serialize objects which have a constructor without parameters. The serializer will process public properties which have a public getter and @@ -70,18 +123,15 @@ setter. If in the future the object changes, it's not possible to deserialize an older binary sequence, unless you work with the `StreamSerializerAttribute` and set an object version to the type and its properties. -**NOTE**: Please use the `*Nullable*` methods for working with nullables. -They'll add an extra byte for `null` value detection. - -**NOTE**: In general you should use the opposite method for reading a binary -sequence that you've used for writing it! +Using the `WriteAny*` and `ReadAny*` methods, you can write and read an object +with a dynamic type. Most methods are designed specially for one type, while other methods work more generic. This is when to choose which method: | Method | Condition | | --- | --- | -| `*Serialized*` | The fixed type is a stream serializer base object | +| `*Serialized*` | The fixed type implements `IStreamSerializer` | | `*Object*` | The fixed type has a specialized serializer | | `*Struct*` | The fixed type is a marshalable structure | | `*AnyObject*` | The type uses attributes (or no serializer contract information at all) and doesn't have a specialized serializer | @@ -105,7 +155,7 @@ data. Seekable streams will just be copied, having their length as header, while non-seekable streams will be embedded chunked. When deserializing an embedded stream using generic read-methods (like -`ReadObject` or `ReadAny`), a temporary `FileStream` will be created, which +`ReadObject` or `ReadAny`), a temporary `TempStream` will be created, which will delete the temporary file when disposing. You can define a stream factory using `StreamSerializerAttribute.StreamFactoryType` and `StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom @@ -145,6 +195,26 @@ only: written using the `WriteSerializedStruct*` methods. For reading you can use the `ReadSerializedStruct*` methods. +## CLR type information serialization + +CLR type informations support + +- normal types (also abstract and interface types) +- generic types (or type definitions) +- array types (with array rank) + +Internal the serializer uses a `SerializedTypeInfo` instance. + +```cs +stream.Write(typeof(Dictionary)); +stream.Position = 0; +Type type = stream.ReadType(); +Assert.AreEqual(typeof(Dictionary), type); +``` + +Use the `ReadSerializableType*` methods to ensure a serializer supported CLR +type. + ## Custom serializer ### Using the `StreamSerializerAttribute` attribute @@ -486,6 +556,37 @@ These enumerators are implemented at present: | Numeric types | `StreamNumber(Async)Enumerator` | `ReadNumber(Async)` | `EnumerateNumber(Async)` | | `string` | `StreamString(Async)Enumerator` | `ReadString(Async)` | `EnumerateString(Async)` | +## Type cache + +By calling `StreamSerializer.EnableTypeCache()`, you can use a type cache, +which enables the serializer to write type information about types which +implement the `IStreamSerializer` interface using only 6 bytes. For this all +matching types will be stored in the `wan24.Core.TypeCache`. + +**CAUTION**: Calling this method will ensure that the `wan24-Core` +bootstrapper did run! A call during bootstrapping will cause an exception. + +Please ensure that the type cache has been enabled first, whenever you want to +write or read any byte sequence. A byte sequence which was created using the +type cache can't be deserialized, if the type cache isn't enabled! Anyway, the +opposite isn't a problem. + +**CAUTION**: Because the type cache uses the types hash code, you shouldn't +use this feature, if you want to cold store a sequence, or if if the +deserializing peer may know a different version if the type: If the type +changes, its hash code may change! + +## Stream-Serializer-Extensions-Full + +This library is an add-on which contains advanced serialization tools: + +- `SerializerStream` which manages a `SerializerContext` and/or +`DeserializerContext` and has its own extension methods without the context +argument +- `Write/ReadAll` extensions for writing/reading a type sequence +- `ReadUntil` extension for reading until any byte sequence (requires a +seekable stream!) + ## Security The base serializer supports basic types and lists. Especially when @@ -510,7 +611,7 @@ could harm your computer! The job of the serializer is to write and read objects to/from a binary sequence. There's no compression, encryption or hashing built in. If you want to compress/protect a created binary sequence, you can apply compression, -encryption and hashing on the result as you want. +encryption and hashing on the result as you need. Object validation will be applied to deserialized objects to ensure their -validity. +validity (using `ObjectValidation`). diff --git a/src/Stream-Serializer-Extensions Docs/log.txt b/src/Stream-Serializer-Extensions Docs/log.txt index 8180310..084cb5a 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -71,3 +71,12 @@ {"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-06-25T20:23:13.69762Z","message_severity":"warning","correlation_id":"48430F40-D597-4AC2-9272-B977A0DB3AA7.1.1.13"} {"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs","line":"73","date_time":"2023-06-25T20:23:17.4205791Z","message_severity":"warning","correlation_id":"48430F40-D597-4AC2-9272-B977A0DB3AA7.1.1.18"} {"message":"Could not resolve base documentation for 'wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase`1.Dispose(System.Boolean)'","source":"MetadataCommand.ExtractMetadata","file":"../Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs","line":"84","date_time":"2023-06-25T20:23:17.4205791Z","message_severity":"warning","correlation_id":"48430F40-D597-4AC2-9272-B977A0DB3AA7.1.1.19"} +{"message":"Invalid cref value \"!:Type\" found in triple-slash-comments for ClrType defined in ../Stream-Serializer-Extensions/ObjectTypes.cs Line 97, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:09.6621158Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.17"} +{"message":"Invalid cref value \"!:Type\" found in triple-slash-comments for CachedSerializable defined in ../Stream-Serializer-Extensions/ObjectTypes.cs Line 114, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:09.6671157Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.18"} +{"message":"Invalid cref value \"!:Type\" found in triple-slash-comments for op_Implicit defined in ../Stream-Serializer-Extensions/SerializedTypeInfo.cs Line 290, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:09.7661161Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.19"} +{"message":"Invalid cref value \"!:Type\" found in triple-slash-comments for op_Implicit defined in ../Stream-Serializer-Extensions/SerializedTypeInfo.cs Line 302, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:09.7671155Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.20"} +{"message":"Invalid cref value \"!:Type\" found in triple-slash-comments for op_Implicit defined in ../Stream-Serializer-Extensions/SerializedTypeInfo.cs Line 302, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:09.7671155Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.21"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:09.8451164Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.22"} +{"message":"Invalid cref value \"!:Exception\" found in triple-slash-comments for From defined in ../Stream-Serializer-Extensions/SerializerException.cs Line 137, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:09.8451164Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.23"} +{"message":"Invalid cref value \"!:InvalidOperationException\" found in triple-slash-comments for EnableTypeCache defined in ../Stream-Serializer-Extensions/StreamSerializer.cs Line 178, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:10.4191139Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.24"} +{"message":"Invalid cref value \"!:Task\" found in triple-slash-comments for AsyncDeserializer_Delegate defined in ../Stream-Serializer-Extensions/StreamSerializer.cs Line 228, ignored.","source":"MetadataCommand.ExtractMetadata","date_time":"2023-07-09T20:45:10.4551179Z","message_severity":"warning","correlation_id":"AF17A3DF-6092-4C31-99CD-DF8DB9F94975.1.1.25"} diff --git a/src/Stream-Serializer-Extensions Tests/A_Initialization.cs b/src/Stream-Serializer-Extensions Tests/A_Initialization.cs index 4716b6f..9b29895 100644 --- a/src/Stream-Serializer-Extensions Tests/A_Initialization.cs +++ b/src/Stream-Serializer-Extensions Tests/A_Initialization.cs @@ -11,7 +11,9 @@ public class A_Initialization public static ILoggerFactory LoggerFactory { get; private set; } = null!; [AssemblyInitialize] +#pragma warning disable IDE0060 public static async Task Init(TestContext tc) +#pragma warning restore IDE0060 { LoggerFactory = Microsoft.Extensions.Logging.LoggerFactory.Create(b => b.AddConsole()); Logging.Logger = LoggerFactory.CreateLogger("Tests"); @@ -19,6 +21,7 @@ public static async Task Init(TestContext tc) TypeHelper.Instance.ScanAssemblies(typeof(A_Initialization).Assembly); await Bootstrap.Async(); StreamSerializer.OnLoadType += (e) => e.Type ??= TypeHelper.Instance.GetType(e.Name); + StreamSerializer.AllowedTypes.Add(typeof(ITestObject)); Logging.WriteDebug("Stream-Serializer-Extensions Tests initialized"); } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs index 959453c..59206af 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs @@ -56,7 +56,6 @@ public void IsTypeAllowed_Tests() { StreamSerializer.AllowedTypes.TryTake(out _); } - Assert.IsFalse(StreamSerializer.IsTypeAllowed(typeof(TestObject))); Assert.IsTrue(StreamSerializer.IsTypeAllowed(typeof(TestObject2))); Assert.IsTrue(StreamSerializer.IsTypeAllowed(typeof(TestObject2[]))); Assert.IsFalse(StreamSerializer.IsTypeAllowed(typeof(Array))); diff --git a/src/Stream-Serializer-Extensions-Full/LICENSE b/src/Stream-Serializer-Extensions-Full/LICENSE new file mode 100644 index 0000000..62d5ca8 --- /dev/null +++ b/src/Stream-Serializer-Extensions-Full/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Andreas Zimmermann, wan24.de + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/Stream-Serializer-Extensions-Full/README.md b/src/Stream-Serializer-Extensions-Full/README.md new file mode 100644 index 0000000..312ff0e --- /dev/null +++ b/src/Stream-Serializer-Extensions-Full/README.md @@ -0,0 +1,610 @@ +# Stream-Serializer-Extensions + +This .NET library extends any `Stream` object with serializing methods for +writing almost any object binary serialized to a stream, and deserializing any +binary stream sequence. + +The built in serializer supports binary serialization of + +- booleans +- numbers ((U)Int8-64, Single, Double, Decimal, little endian) +- enumerations +- strings (UTF-8/16/32, little endian) +- arrays +- lists +- dictionaries +- byte arrays +- structures +- possibly any other types +- streams (embedded) +- CLR type informations + +and exports an asynchronous fluent API for writing operations, too. + +It's possible to override the build in serializers, and to add custom type +serializers, too. + +Using an attribute for your types and their properties you can make them +binary serializable with backward compatibility, easily. + +The serializer is designed to produce only a minimum of absolutely required +overhead, which sometimes can result in even less data, too (compared to +usually used serialization methods). The produced binary sequences are + +- processor architecture independent +- platform independent +- runtime independent +- language independent +- type and type version safe +- compatible with newer serializer versions +- as small as possible (trade off between complexity <-> performance <-> size) +- using aggressive caching + +In theory it'd by possible to deserialize a binary sequence using a language +such as JavaScript or C++. However, at present there's only a .NET +implementation of the (de)serializer available. + +**NOTE**: The deserialized type must be present at the processing computer. +The deserializer won't create anonymous types. Only for deserializing CLR type +informations there's a type implemented which can be used to browse the +seqenced CLR type informations before trying to get a `Type` instance, finally. + +The API is fully synchronous and asynchronous - you choose depending on the +used stream type. + +**TIP**: Because often very tiny sequences will be written/red, you may want +to use a buffering stream to gain more performance! Streams will be accessed +non-seeking and sequential only. + +Cold storage of serialized sequences can be challenging. Using the build in +sequencer versioning you can ensure that a sequence can be deserialized at any +time after a component was updated. + +## How to get it + +This library is available as +[NuGet package "Stream-Serializer-Extensions"](https://www.nuget.org/packages/Stream-Serializer-Extensions/). + +There's also another +[NuGet package "Stream-Serializer-Extensions-Full"](https://www.nuget.org/packages/Stream-Serializer-Extensions-Full/), +which contains advanced serialization tools. + +## Methods + +| Type | Serialization | Deserialization | +| --- | --- | --- | +| `bool` | `Write` | `ReadBool` | +| `sbyte` | `Write` | `ReadOneSByte` | +| `byte` | `Write` | `ReadOneByte` | +| `short` | `Write` | `ReadShort` | +| `ushort` | `Write` | `ReadUShort` | +| `int` | `Write` | `ReadInt` | +| `uint` | `Write` | `ReadUInt` | +| `long` | `Write` | `ReadLong` | +| `ulong` | `Write` | `ReadULong` | +| `float` | `Write` | `ReadFloat` | +| `double` | `Write` | `ReadDouble` | +| `decimal` | `Write` | `ReadDecimal` | +| (U)Int 8-64, `float`, `double`, `decimal` | `WriteNumber` | `ReadNumber` | +| `Enum` | `WriteEnum` | `ReadEnum` | +| `byte[]` | `WriteBytes` | `ReadBytes` | +| `string` (UTF-8) | `WriteString` | `ReadString` | +| `string` (UTF-16) | `WriteString16` | `ReadString16` | +| `string` (UTF-32) | `WriteString32` | `ReadString32` | +| `IStreamSerializer` (class) | `WriteSerialized` | `ReadSerialized` | +| `IStreamSerializer` (structure) | `WriteSerializedStruct` | `ReadSerializedStruct` | +| Structures | `WriteStruct` | `ReadStruct` | +| `Array` (variable length) | `WriteArray` | `ReadArray` | +| `Array` (fixed length) | `WriteFixedArray` | `ReadFixedArray` | +| `IList` | `WriteList` | `ReadList` | +| `IDictionary` | `WriteDict` | `ReadDict` | +| `Stream` | `WriteStream` | `ReadStream` | +| `Type` | `WriteType` | `ReadType` | + +**NOTE**: In general you should use the opposite method for reading a binary +sequence that you've used for writing it! For all methods there is an `*Async` +version also. Use the `*Nullable*` methods for writing/reading nullable +values. Some may have to add an extra byte for `null` detection. + +Using the `WriteObject*` and `ReadObject*` methods you can let the library +decide which method to use for the given object type. + +Using the `WriteAnyObject*` and `ReadAnyObject*` methods you can also +(de)serialize objects which have a constructor without parameters. The +serializer will process public properties which have a public getter and +setter. If in the future the object changes, it's not possible to deserialize +an older binary sequence, unless you work with the `StreamSerializerAttribute` +and set an object version to the type and its properties. + +Using the `WriteAny*` and `ReadAny*` methods, you can write and read an object +with a dynamic type. + +Most methods are designed specially for one type, while other methods work +more generic. This is when to choose which method: + +| Method | Condition | +| --- | --- | +| `*Serialized*` | The fixed type implements `IStreamSerializer` | +| `*Object*` | The fixed type has a specialized serializer | +| `*Struct*` | The fixed type is a marshalable structure | +| `*AnyObject*` | The type uses attributes (or no serializer contract information at all) and doesn't have a specialized serializer | +| `*Any*` | The dynamic type is unknown when (de)serializing | + +## Number serialization + +The `WriteNumber*` and `ReadNumber*` methods will find the best matching +serialization method for a given number. For example, if you give an Int32 +value which could be fit into an UInt16, the value will be converted for +serialization, and you can save one byte (because the methods will store the +used numeric type in an extra byte). There's also a chance to end up with only +a single byte when serializing a `decimal`, if the value was zero, for example. + +**NOTE**: All numbers will be serialized using little endian. + +## Embedded streams + +Using `WriteStream*` and `ReadStream*` you can embed a stream in serialized +data. Seekable streams will just be copied, having their length as header, +while non-seekable streams will be embedded chunked. + +When deserializing an embedded stream using generic read-methods (like +`ReadObject` or `ReadAny`), a temporary `FileStream` will be created, which +will delete the temporary file when disposing. You can define a stream factory +using `StreamSerializerAttribute.StreamFactoryType` and +`StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom +`StreamSerializerAttribute` and override the `GetStream` method. + +## Structure serialization + +The `WriteStruct*` methods use `Marshal` for structure serialization, which +produce little or big endian bits depending on the processors endianess. To +ensure that a serialized structure can be deserialized on any system, +endianess will be converted to little endian per default. For this it's +required to add a `StreamSerializerAttribute` to the strcture type and all +fields which require endianess conversion, which are + +- numeric types (which include enumeration values) +- sub-structures which host numeric type fields + +**NOTE**: The serializer uses reflection for this only once (for +initialization) only on system with a big endian processor, which shouldn't +have too much performance impact for a permanent running service. + +**CAUTION**: Only structure fields will be processed. Their value should be a +structure, too - object references will make problems and are not supported. +Also variable length value counters won't be converted, which limits the +endianess conversion support to structures which match to these limitations +only: + +- No object referencing fields +- Fixed length contents + +**CAUTION**: If the structure changes, it can't be deserialized using +`Marshal` anymre. For cold storage consider to implement +`IStreamSerializerVersion` and use `WriteSerializedStruct*` and +`ReadSerializedStruct*` instead. + +**TIP**: A structure may implement the `IStreamSerializer` inferface and be +written using the `WriteSerializedStruct*` methods. For reading you can use +the `ReadSerializedStruct*` methods. + +## CLR type information serialization + +CLR type informations support + +- normal types (also abstract and interface types) +- generic types (or type definitions) +- array types (with array rank) + +Internal the serializer uses a `SerializedTypeInfo` instance. + +```cs +stream.Write(typeof(Dictionary)); +stream.Position = 0; +Type type = stream.ReadType(); +Assert.AreEqual(typeof(Dictionary), type); +``` + +Use the `ReadSerializableType*` methods to ensure a serializer supported CLR +type. + +## Custom serializer + +### Using the `StreamSerializerAttribute` attribute + +The type needs to have a constructor without parameters. Properties with a +public getter and setter can be serialized: + +```cs +[StreamSerializer(StreamSerializerModes.OptOut)] +public class YourType +{ + public YourType() { } + + public string Serialized { get; set; } = null!; + + [StreamSerializer(1)] + public string? NotSerialized { get; set; } +} + +stream.WriteAnyObject(new YourType(){ Serialized = "Test1", NotSerialized = "Test2" }); +stream.Position = 0; +YourType deserialized = stream.ReadAnyObject(); +Assert.AreEqual(deserialized.Serialized, "Test1"); +Assert.IsNull(deserialized.NotSerialized); +``` + +Using the `StreamSerializerAttribute` attribute at a type, you can set the +serializer mode to `OptOut` (the default when not using the attribute) or +`OptIn`. `OptOut` includes all properties, except the ones with a +`StreamSerializerAttribute` (if the attribute doesn't `OptIn`). `OptIn` only +includes properties with a `StreamSerializerAttribute`, except the attribute +mode was set to `OptOut`. + +To skip property name checksums, which require one extra byte per serialized +property, you can set the `SkipPropertyNameChecksum` property value of the +attribute to `true`. + +You can use a property versioning, which supports skipping newer properties +when deserializing an older binary sequence. The type attribute defines the +object version, while the property attributes define the object version in +which they (dis)appear. + +By setting a property value position, you can modify the order of the value +within the binary sequence. This ordering will be applied: + +- `Position` +- `Name` + +To exclude a property depending on the object version: + +- `FromVersion`: First object version which **includes** the property +(optional) +- `Version`: Last object version which **includes** the property (optional) + +You can set some details for the deserializer methods using these properties: + +- `OptionsType`: Individual serializer options type to use +- `KeyOptionsType`: Individual key serializer options type to use +- `ValueOptionsType`: Individual value serializer options type to use +- `MinLen`: Minimum length +- `Maxlen`: Maximum length + +The attribute type can be extended, methods are virtual. + +#### Stream factory + +If you use the attribute on a `Stream` property, you can define a stream +factory using the `StreamFactoryType` and `StreamFactoryMethod`, or you set a +`StreamFactory_Delegate` to the `StreamFactory` property (using reflections). + +You can use the `StreamSerializerAttribute.MemoryStreamFactory` method as +memory stream factory. + +#### Serializer options factory + +For automatic object deserialization the deserializer will try to get an +`ISerializerOptions` object, which is being used to provide deserialization +details to the deserializer method. You may define a serializer options +factory using the `SerializerOptionsFactoryType` and +`SerializerOptionsFactoryMethod` properties, or you set the serializer options +to the `SerializerOptions` property (using reflections). + +The same applies to + +- `KeySerializerOptions`: Used by deserializer methods which deserialize a +dictionary, for example +- `ValueSerializerOptions`: Used by deserializer methods which deserialize a +dictionary, array or list, for example + +The `OptionsType`, `KeyOptionsType` and `ValueOptionsType` properties are used +when no factory method was defined. Those types need to implement a +constructor which takes a `PropertyInfo?` and a `StreamSerializerAttribute?` +parameter. + +### Automatic serializable objects + +You can extend from the `(Disposable)AutoStreamSerializerBase` type, if you +fully implement serialization using the `StreamSerializerAttribute` for the +final type and its properties, and match these pre-requirements: + +1. The `StreamSerializerAttribute` of the final type requires an object +version number in the `Version` property +2. The stream serializer mode must be `OptIn` + +The auto stream serializer fully relies on a correct use of the +`StreamSerializerAttribute` and object versioning for both, the type and its +serialized properties. + +If a serialized object property has an unchanged default value, the serializer +will only write a flag which is telling the deserializer not to deserialize a +value. If you don't want that, you can disable defult value flags for the +whole type by setting the `StreamSerializerAttribute.UseDefaultValues` value +to `false` (this property is also evaluated per property). To make a decision +for each property based on the object version, you can create your own +`StreamSerializerAttribute` and override the `GetUseDefaultValue` method, +which per default simply returns the `UseDefaultValues` flag. + +### Extending the `StreamSerializer` + +```cs +StreamSerializer.SyncSerializer.AddOrUpdate( + typeof(YourType), + (stream, value) => + { + // Serialize value to stream + } +); +StreamSerializer.AsyncSerializer.AddOrUpdate( + typeof(YourType), + async (stream, value, cancellationToken) => + { + // Serialize value to stream + } +); +StreamSerializer.SyncDeserializer.AddOrUpdate( + typeof(YourType), + (stream, type, version) => + { + // Deserialize value from stream + return value; + } +); +StreamSerializer.AsyncDeserializer.AddOrUpdate( + typeof(YourType), + YourType.DeserializeAsync +); + +public class YourType +{ + ... + + public static async Task DeserializeAsync(Stream stream, Type type, int version, CancellationToken cancellationToken) + { + // Deserialize value + return value; + } +} + +// Then you can (de)serialize like this: +stream.WriteObject(new YourType()); +stream.Position = 0; +YourType instance = stream.ReadObject(); +``` + +**NOTE**: The asynchronous deserializer delegate uses a `Task` return type, +while internal the task will be converted to `Task`, to get the +result. Because there's a lack of support for generic delegates, this seems to +be the only way to go :( + +**NOTE**: You can attach to the `StreamSerializer.OnInit` event to add your +custom type serializers on start. During initialization, the +`StreamSerializer.SyncObject` object will be thread locked, and you shouldn't +use the `Find*` methods. + +**NOTE**: You can use the `SerializerHelper` class methods for boiler plate +tasks like ensuring a non-null value, or validating a deserialized length +value, for example. + +**NOTE**: You should throw a `SerializerException` on any (de)serializing +issue! + +### Using the `IStreamSerializer` interface + +Your object can implement the `IStreamSerializer` interface or use the +`StreamSerializerBase` base class, which implements the `IStreamSerializer` +interface. Then you can use the `WriteSerialized*`, `WriteObject*`, +`ReadSerialized*` and `ReadObject*` methods for (de)serialization. + +```cs +public class YourType : StreamSerializerBase +{ + public YourType() : base() { } + + public YourType(Stream stream, int version) : base(stream, version) { } + + protected override void Serialize(Stream stream) + { + ... + } + + protected override void Deserialize(Stream stream, int version) + { + ... + } +} +``` + +When using the `StreamSerializerBase` base class, you can also give a value +for the parameter `objectVersion` to the base constructor to enable object +versioning. This makes it possible that newer object versions are able to +deserialize from older binary sequences, and it ensures that old object +versions can't deserialize from a newer binary sequence. During +deserialization you can get the serialized object version like this: + +```cs + ... + public const int OBJECT_VERSION = 1; + + public YourType() : base(objectVersion: OBJECT_VERSION) { } + + public YourType(Stream stream, int version) : base(stream, version, objectVersion: OBJECT_VERSION) { } + + ... + + protected override void Deserialize(Stream stream, int version) + { + int serializedVersion = ((IStreamSerializer)this).SerializedObjectVersion!; + if(serializedVersion < 1) throw new SerializerExeption($"Unsupported {GetType()} binary sequence version #{serializedVersion}"); + ... + } + + ... +``` + +The `SerializedObjectVersion` property will have a non-null value, if the +object was deserialized, and the `StreamSerializerBase` base constructor got a +object version as `objectVersion` parameter. Based on the serialized object +version you can switch and handle the binary sequence in the required way. To +access the versioning information of an object, you can use the optional +`IStreamSerializerVersion` interface, which is implemented by +`StreamSerializerBase`, too. + +### Type instance factory + +When deserializing an object which implements the `IStreamSerializer` +interface, but needs a special construction, you can register an instance +factory: + +```cs +StreamSerializer.InstanceFactories[typeof(YourType)] = (type, stream, version, options) => +{ + // Return the deserialized instance here +}; +``` + +## Deserializer limitations + +When deserializing variable length objects (like arrays or strings), you can +limit the allowed number of items/bytes (or request a minimum count) using the +specific (de)serializer methods, by giving `minLen` and `maxLen` parameter +values. + +## Serializer version + +The `StreamSerializer.Version` property holds the serializer version +information, which you may write at the beginning of a serialized stream. The +first byte (values 0-255) is used by the stream serializer internal. If you'd +like custom versioning, please use bytes 2 to 4 (values 256+) for your own +version number (which you can make more readable by bit shifting the value). +The stream serializer extensions will only use the first 8 bits to identify a +serializer version number, which can be given to all deserializer methods, +while the `StreamSerializer.Version` value is the default serializer version +number to use in case no version parameter was given to a deserializer method. + +**NOTE**: The serializing methods will always use the latest binary sequence +format version when writing, no matter which value was set to +`StreamSerializer.Version`! + +## Binary sequence size + +Since the serializer may be used without any configuration and contract +information, it tries to create the smallest binary sequence size which still +offers enough information for an also unconfigured deserialization without +contracts. The currently resulting sequence size is a trade off between size +and usability. By defining customized type serializers you can optimize the +resulting sequence size for any type. Keep in mind, that using the most +specific (de)serializing methods will result in smaller binary sequences. + +## Stream object enumeration + +You can enumerate serialized objects from any stream like this: + +```cs +foreach(AnyType obj in stream.EnumerateSerialized()) +{ + ... +} + +await foreach(AnyType obj in stream.EnumerateSerializedAsync()) +{ + ... +} +``` + +In this example it's assumed that `AnyType` implements `IStreamSerializer`. + +For enumerating any other type, you can implement an enumerator using the +`StreamEnumeratorBase` and `StreamAsyncEnumeratorBase` base classes. The only +thing that you'll have to do is to override the `ReadObject(Async)` method, +which finally reads the next object to yield from the `Stream`. Then you can +enumerate easily using the static `Enumerate(Async)` methods of the base types. + +This is a sample `bool` enumerator implementation, which uses the `ReadBool` +method: + +```cs +public class StreamBoolEnumerator : StreamEnumeratorBase +{ + public StreamBoolEnumerator(Stream stream, int? version = null) + :base(stream, version) + { } + + protected override int ReadObject() => Stream.ReadBool(SerializerVersion); +} +``` + +To provide the enumerator as a stream extension method: + +```cs +public static IEnumerable EnumerateBool(this Stream stream, int? version = null) + => StreamBoolEnumerator.Enumerate(stream, version); +``` + +These enumerators are implemented at present: + +| Type | Enumerator | Serializer method | Stream extension | +| --- | --- | --- | --- | +| `IStreamSerializer` | `StreamSerializer(Async)Enumerator` | `ReadSerialized(Async)` | `EnumerateSerialized(Async)` | +| Numeric types | `StreamNumber(Async)Enumerator` | `ReadNumber(Async)` | `EnumerateNumber(Async)` | +| `string` | `StreamString(Async)Enumerator` | `ReadString(Async)` | `EnumerateString(Async)` | + +## Type cache + +By calling `StreamSerializer.EnableTypeCache()`, you can use a type cache, +which enables the serializer to write type information about types which +implement the `IStreamSerializer` interface using only 6 bytes. For this all +matching types will be stored in the `wan24.Core.TypeCache`. + +**CAUTION**: Calling this method will ensure that the `wan24-Core` +bootstrapper did run! A call during bootstrapping will cause an exception. + +Please ensure that the type cache has been enabled first, whenever you want to +write or read any byte sequence. A byte sequence which was created using the +type cache can't be deserialized, if the type cache isn't enabled! Anyway, the +opposite isn't a problem. + +**CAUTION**: Because the type cache uses the types hash code, you shouldn't +use this feature, if you want to cold store a sequence, or if if the +deserializing peer may know a different version if the type: If the type +changes, its hash code may change! + +## Stream-Serializer-Extensions-Full + +This library is an add-on which contains advanced serialization tools: + +- `SerializerStream` which manages a `SerializerContext` and/or +`DeserializerContext` and has its own extension methods without the context +argument +- `Write/ReadAll` extensions for writing/reading a type sequence +- `ReadUntil` extension for reading until any byte sequence (requires a +seekable stream!) + +## Security + +The base serializer supports basic types and lists. Especially when +deserializing lists, you should define a minimum and a maximum length. + +Per default all objects that you want to deserialize using a `ReadAnyObject*` +method, the type is required to use the `StreamSerializerAttribute` for +security reasons. If you need to allow all types, you can set the +`StreamExtensions.AnyObjectRequireAttribute` property value to `false`. + +**CAUTION**: If you allow deserialization of any type, deserializing a +manipulated input stream could harm your computer! + +**CAUTION**: During serialization it's possible to end up in an endless +recursion, if any nested property serves an object which is in the current +stack already. + +**CAUTION**: If you don't use versioning, you may end up in broken binary +sequences which can't be deserialized anymore. Also a deserialization attempt +could harm your computer! + +The job of the serializer is to write and read objects to/from a binary +sequence. There's no compression, encryption or hashing built in. If you want +to compress/protect a created binary sequence, you can apply compression, +encryption and hashing on the result as you need. + +Object validation will be applied to deserialized objects to ensure their +validity (using `ObjectValidation`). diff --git a/src/Stream-Serializer-Extensions-Full/Stream-Serializer-Extensions-Full.csproj b/src/Stream-Serializer-Extensions-Full/Stream-Serializer-Extensions-Full.csproj new file mode 100644 index 0000000..d0237b8 --- /dev/null +++ b/src/Stream-Serializer-Extensions-Full/Stream-Serializer-Extensions-Full.csproj @@ -0,0 +1,58 @@ + + + + net6.0 + wan24.StreamSerializerExtensions + enable + enable + StreamSerializerExtensionsFull + Debug;Release;Trunk + True + Stream-Serializer-Extensions-Full + Stream-Serializer-Extensions-Full + 1.0.0 + nd1012 + Andreas Zimmermann, wan24.de + Stream-Serializer-Extensions + The full Stream-Serializer-Extensions library, which contains advanced serialization tools. + (c)2023 Andreas Zimmermann, wan24.de + https://github.com/nd1012/Stream-Serializer-Extensions + README.md + https://github.com/nd1012/Stream-Serializer-Extensions + git + serialization;extension;stream;serializer;extensions;binary-serialization;binary-serializers + LICENSE + True + embedded + true + + + + $(DefineConstants);DEBUG + + + + + + + + + + + + + Always + True + \ + + + True + \ + + + + + + + + diff --git a/src/Stream-Serializer-Extensions.sln b/src/Stream-Serializer-Extensions.sln index e6dda9a..331163c 100644 --- a/src/Stream-Serializer-Extensions.sln +++ b/src/Stream-Serializer-Extensions.sln @@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ObjectValidation", "..\..\O EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wan24-Core", "..\..\wan24-Core\src\Wan24-Core\Wan24-Core.csproj", "{7D2B294F-AF0D-48AB-834B-9AF91529BC64}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stream-Serializer-Extensions-Full", "Stream-Serializer-Extensions-Full\Stream-Serializer-Extensions-Full.csproj", "{ACC8457C-5867-43EB-8DBB-BC091DFF44C6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -44,6 +46,12 @@ Global {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Release|Any CPU.ActiveCfg = Release|Any CPU {7D2B294F-AF0D-48AB-834B-9AF91529BC64}.Trunk|Any CPU.ActiveCfg = Debug|Any CPU + {ACC8457C-5867-43EB-8DBB-BC091DFF44C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ACC8457C-5867-43EB-8DBB-BC091DFF44C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ACC8457C-5867-43EB-8DBB-BC091DFF44C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ACC8457C-5867-43EB-8DBB-BC091DFF44C6}.Release|Any CPU.Build.0 = Release|Any CPU + {ACC8457C-5867-43EB-8DBB-BC091DFF44C6}.Trunk|Any CPU.ActiveCfg = Trunk|Any CPU + {ACC8457C-5867-43EB-8DBB-BC091DFF44C6}.Trunk|Any CPU.Build.0 = Trunk|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs index bca58bb..ce01cbe 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerBase.cs @@ -36,17 +36,15 @@ protected AutoStreamSerializerBase() : base(AutoStreamSerializerConfig.Attribute IAutoStreamSerializerConfig IAutoStreamSerializer.AutoStreamSerializerConfig => AutoStreamSerializerConfig; /// - protected override void Serialize(Stream stream) => AutoStreamSerializerConfig.Serialize((T)this, stream); + protected override void Serialize(ISerializationContext context) => AutoStreamSerializerConfig.Serialize((T)this, context); /// - protected override Task SerializeAsync(Stream stream, CancellationToken cancellationToken) - => AutoStreamSerializerConfig.SerializeAsync((T)this, stream, cancellationToken); + protected override Task SerializeAsync(ISerializationContext context) => AutoStreamSerializerConfig.SerializeAsync((T)this, context); /// - protected override void Deserialize(Stream stream, int version) => AutoStreamSerializerConfig.Deserialize((T)this, stream, version); + protected override void Deserialize(IDeserializationContext context) => AutoStreamSerializerConfig.Deserialize((T)this, context); /// - protected override Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) - => AutoStreamSerializerConfig.DeserializeAsync((T)this, stream, version, cancellationToken); + protected override Task DeserializeAsync(IDeserializationContext context) => AutoStreamSerializerConfig.DeserializeAsync((T)this, context); } } diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs index c134a04..1b15bde 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerConfig.cs @@ -56,14 +56,15 @@ public AutoStreamSerializerConfig(bool initDefaultValues = true) /// Serialize ///
    /// Object - /// Stream - public void Serialize(T obj, Stream stream) + /// Context + public void Serialize(T obj, ISerializationContext context) { + using ContextRecursion cr = new(context); (PropertyInfoExt[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); if (defaultValueBits != null) try { - stream.Write(defaultValueBits.AsSpan()[..defaultValueBitsLength!.Value]); + context.Stream.Write(defaultValueBits.AsSpan()[..defaultValueBitsLength!.Value]); } finally { @@ -74,7 +75,7 @@ public void Serialize(T obj, Stream stream) if (usedDefaultValue?.Contains(pi.Property.Name) ?? false) continue; if (!Infos.TryGetValue(pi.Property.Name, out AutoStreamSerializerInfo? info)) throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Property.Name}", new InvalidProgramException()); - info.Serialize(this, obj, stream); + info.Serialize(this, obj, context); } } @@ -82,15 +83,15 @@ public void Serialize(T obj, Stream stream) /// Serialize /// /// Object - /// Stream - /// Cancellation token - public async Task SerializeAsync(T obj, Stream stream, CancellationToken cancellationToken) + /// Context + public async Task SerializeAsync(T obj, ISerializationContext context) { + using ContextRecursion cr = new(context); (PropertyInfoExt[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); if (defaultValueBits != null) try { - await stream.WriteAsync(defaultValueBits.AsMemory()[..defaultValueBitsLength!.Value], cancellationToken).DynamicContext(); + await context.Stream.WriteAsync(defaultValueBits.AsMemory()[..defaultValueBitsLength!.Value], context.Cancellation).DynamicContext(); } finally { @@ -101,7 +102,7 @@ public async Task SerializeAsync(T obj, Stream stream, CancellationToken cancell if (usedDefaultValue?.Contains(pi.Property.Name) ?? false) continue; if (!Infos.TryGetValue(pi.Property.Name, out AutoStreamSerializerInfo? info)) throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Property.Name}", new InvalidProgramException()); - await info.SerializeAsync(this, obj, stream, cancellationToken).DynamicContext(); + await info.SerializeAsync(this, obj, context).DynamicContext(); } } @@ -109,11 +110,11 @@ public async Task SerializeAsync(T obj, Stream stream, CancellationToken cancell /// Deserialize /// /// Object - /// Stream - /// Serializer version - public void Deserialize(T obj, Stream stream, int version) + /// Context + public void Deserialize(T obj, IDeserializationContext context) { - PropertyInfoExt[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), version).ToArray(); + using ContextRecursion cr = new(context); + PropertyInfoExt[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), context.Version).ToArray(); List? usedDefaultValue = null; if (DefaultValues != null) { @@ -121,9 +122,9 @@ public void Deserialize(T obj, Stream stream, int version) .Where(p => DefaultValues.ContainsKey(p.Property.Name) && Infos[p.Property.Name].Attribute.GetUseDefaultValue(Attribute.Version!.Value)) .ToArray(); usedDefaultValue = PrepareDeserialization( - obj, - props, - StreamExtensions.ReadSerializedData(stream, (int)Math.Ceiling((decimal)props.Length / 8), StreamSerializer.BufferPool) + obj, + props, + StreamExtensions.ReadSerializedData(context.Stream, (int)Math.Ceiling((decimal)props.Length / 8), context) ); } foreach (PropertyInfoExt pi in properties) @@ -131,7 +132,7 @@ public void Deserialize(T obj, Stream stream, int version) if (usedDefaultValue?.Contains(pi.Property.Name) ?? false) continue; if (!Infos.TryGetValue(pi.Property.Name, out AutoStreamSerializerInfo? info)) throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Property.Name}", new InvalidProgramException()); - info.Deserialize(this, obj, stream, version); + info.Deserialize(this, obj, context); } } @@ -139,12 +140,11 @@ public void Deserialize(T obj, Stream stream, int version) /// Deserialize /// /// Object - /// Stream - /// Serializer version - /// Cancellation token - public async Task DeserializeAsync(T obj, Stream stream, int version, CancellationToken cancellationToken) + /// Context + public async Task DeserializeAsync(T obj, IDeserializationContext context) { - PropertyInfoExt[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), version).ToArray(); + using ContextRecursion cr = new(context); + PropertyInfoExt[] properties = StreamSerializerAttribute.GetReadProperties(obj.GetType(), context.Version).ToArray(); List? usedDefaultValue = null; if (DefaultValues != null) { @@ -154,7 +154,7 @@ public async Task DeserializeAsync(T obj, Stream stream, int version, Cancellati usedDefaultValue = PrepareDeserialization( obj, props, - await StreamExtensions.ReadSerializedDataAsync(stream, (int)Math.Ceiling((decimal)props.Length / 8), StreamSerializer.BufferPool, cancellationToken) + await StreamExtensions.ReadSerializedDataAsync(context.Stream, (int)Math.Ceiling((decimal)props.Length / 8), context) .DynamicContext() ); } @@ -163,7 +163,7 @@ await StreamExtensions.ReadSerializedDataAsync(stream, (int)Math.Ceiling((decima if (usedDefaultValue?.Contains(pi.Name) ?? false) continue; if (!Infos.TryGetValue(pi.Name, out AutoStreamSerializerInfo? info)) throw new SerializerException($"Missing auto stream serializer information for {obj.GetType()}.{pi.Name}", new InvalidProgramException()); - await info.DeserializeAsync(this, obj, stream, version, cancellationToken).DynamicContext(); + await info.DeserializeAsync(this, obj, context).DynamicContext(); } } diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs index fd45c6a..fbc2bbe 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs @@ -60,26 +60,27 @@ public AutoStreamSerializerInfo(PropertyInfoExt property) /// Object type /// Configuration /// Object - /// Stream - public void Serialize(IAutoStreamSerializerConfig config, T obj, Stream stream) where T : IAutoStreamSerializer + /// Context + public void Serialize(IAutoStreamSerializerConfig config, T obj, ISerializationContext context) where T : IAutoStreamSerializer { if (Serializer == null) { if (IsNullable) { - stream.WriteObjectNullable(Property.Getter!(obj)); + context.Stream.WriteObjectNullable(Property.Getter!(obj), context); } else { - stream.WriteObject( + context.Stream.WriteObject( Property.Getter!(obj) - ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()) + ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()), + context ); } } else { - Serializer(config, this, obj, Property.Getter!(obj), stream); + Serializer(config, this, obj, Property.Getter!(obj), context); } } @@ -89,29 +90,27 @@ public void Serialize(IAutoStreamSerializerConfig config, T obj, Stream strea /// Object type /// Configuration /// Object - /// Stream - /// Cancellation token - public async Task SerializeAsync(IAutoStreamSerializerConfig config, T obj, Stream stream, CancellationToken cancellationToken) - where T : IAutoStreamSerializer + /// Context + public async Task SerializeAsync(IAutoStreamSerializerConfig config, T obj, ISerializationContext context) where T : IAutoStreamSerializer { if (AsyncSerializer == null) { if (IsNullable) { - await stream.WriteObjectNullableAsync(Property.Getter!(obj), cancellationToken).DynamicContext(); + await context.Stream.WriteObjectNullableAsync(Property.Getter!(obj), context).DynamicContext(); } else { - await stream.WriteObjectAsync( - Property.Getter!(obj) + await context.Stream.WriteObjectAsync( + Property.Getter!(obj) ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()), - cancellationToken + context ).DynamicContext(); } } else { - await AsyncSerializer(config, this, obj, Property.Getter!(obj), stream, cancellationToken).DynamicContext(); + await AsyncSerializer(config, this, obj, Property.Getter!(obj), context).DynamicContext(); } } @@ -121,20 +120,27 @@ await stream.WriteObjectAsync( /// Object type /// Configuration /// Object - /// Stream - /// Serializer version - public void Deserialize(IAutoStreamSerializerConfig config, T obj, Stream stream, int version) where T : IAutoStreamSerializer + /// Context + public void Deserialize(IAutoStreamSerializerConfig config, T obj, IDeserializationContext context) where T : IAutoStreamSerializer { if (Deserializer == null) { - ISerializerOptions? options = Property.GetSerializerOptions(stream, version, default); - Property.Setter!(obj, IsNullable - ? stream.ReadObjectNullable(Property.Property.PropertyType, version, options) - : stream.ReadObject(Property.Property.PropertyType, version, options)); + ISerializerOptions? options = Property.GetSerializerOptions(context); + context.WithOptions(options); + try + { + Property.Setter!(obj, IsNullable + ? context.Stream.ReadObjectNullable(Property.Property.PropertyType, context) + : context.Stream.ReadObject(Property.Property.PropertyType, context)); + } + finally + { + context.WithoutOptions(); + } } else { - Property.Setter!(obj, Deserializer(config, this, obj, stream, version)); + Property.Setter!(obj, Deserializer(config, this, obj, context)); } } @@ -144,22 +150,28 @@ public void Deserialize(IAutoStreamSerializerConfig config, T obj, Stream str /// Object type /// Configuration /// Object - /// Stream - /// Serializer version - /// Cancellation token - public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, Stream stream, int version, CancellationToken cancellationToken) + /// Context + public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, IDeserializationContext context) where T : IAutoStreamSerializer { if (AsyncDeserializer == null) { - ISerializerOptions? options = Property.GetSerializerOptions(stream, version, cancellationToken); - Property.Setter!(obj, IsNullable - ? await stream.ReadObjectNullableAsync(Property.Property.PropertyType, version, options, cancellationToken).DynamicContext() - : await stream.ReadObjectAsync(Property.Property.PropertyType, version, options, cancellationToken).DynamicContext()); + ISerializerOptions? options = Property.GetSerializerOptions(context); + context.WithOptions(options); + try + { + Property.Setter!(obj, IsNullable + ? await context.Stream.ReadObjectNullableAsync(Property.Property.PropertyType, context).DynamicContext() + : await context.Stream.ReadObjectAsync(Property.Property.PropertyType, context).DynamicContext()); + } + finally + { + context.WithoutOptions(); + } } else { - Property.Setter!(obj, await AsyncDeserializer(config, this, obj, stream, version, cancellationToken).DynamicContext()); + Property.Setter!(obj, await AsyncDeserializer(config, this, obj, context).DynamicContext()); } } @@ -169,14 +181,14 @@ public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, /// Configuration /// Info /// Object - /// Value to serialize - /// Stream + /// Value + /// Context public delegate void Serializer_Delegate( IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object? value, - Stream stream + ISerializationContext context ); /// @@ -185,16 +197,14 @@ Stream stream /// Configuration /// Info /// Object - /// Value to serialize - /// Stream - /// Cancellation token + /// Value + /// Context public delegate Task AsyncSerializer_Delegate( IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object? value, - Stream stream, - CancellationToken cancellationToken + ISerializationContext context ); /// @@ -203,10 +213,9 @@ CancellationToken cancellationToken /// Configuration /// Info /// Object - /// Stream - /// Serializer version + /// Context /// Deserialized value - public delegate object? Deserializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, Stream stream, int version); + public delegate object? Deserializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, IDeserializationContext context); /// /// Delegate for a deserializer @@ -214,17 +223,13 @@ CancellationToken cancellationToken /// Configuration /// Info /// Object - /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Deserialized value public delegate Task AsyncDeserializer_Delegate( IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, - Stream stream, - int version, - CancellationToken cancellationToken + IDeserializationContext context ); } } diff --git a/src/Stream-Serializer-Extensions/ContextRecursion.cs b/src/Stream-Serializer-Extensions/ContextRecursion.cs new file mode 100644 index 0000000..ee0a211 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ContextRecursion.cs @@ -0,0 +1,26 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Context recursion (should only be disposed once!) + /// + public readonly record struct ContextRecursion : IDisposable + { + /// + /// Dispose action + /// + private readonly ISerializerContext Context; + + /// + /// Constructor + /// + /// Context + public ContextRecursion(ISerializerContext context) + { + context.RecursionLevel++; + Context = context; + } + + /// + public void Dispose() => Context.RecursionLevel--; + } +} diff --git a/src/Stream-Serializer-Extensions/DeserializerContext.cs b/src/Stream-Serializer-Extensions/DeserializerContext.cs new file mode 100644 index 0000000..e4e37ad --- /dev/null +++ b/src/Stream-Serializer-Extensions/DeserializerContext.cs @@ -0,0 +1,384 @@ +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Stream deserializer context + /// + public class DeserializerContext : SerializerContextBase, IDeserializationContext + { + /// + /// Cache + /// + protected object[] _Cache; + + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Serializer version + /// Cache size + /// Cancellation token + public DeserializerContext(Stream stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = default) + : base(stream, version, cacheSize, cancellationToken) + { + _Cache = _CacheSize > 0 ? StreamSerializer.ObjectCachePool.RentClean(_CacheSize) : Array.Empty(); + CacheIndexSize = _CacheSize > byte.MaxValue ? 2 : 1; + } + + /// + /// Cache + /// + public Memory Cache + { + get + { + EnsureUndisposed(); + return _Cache.AsMemory(0, RealCacheSize); + } + } + + /// + public ISerializerOptions? Options { get; set; } + + /// + public override int CacheSize + { + get => _CacheSize; + set + { + EnsureUndisposed(); + if (value == _CacheSize) return; + if (value < 1) + { + _CacheSize = value; + if (RealCacheSize != 0 && CacheOffset == 0) + { + StreamSerializer.ObjectCachePool.Return(_Cache); + _Cache = Array.Empty(); + } + return; + } + SerializerException.Wrap(() => this.EnsureValidArgument(nameof(value), CacheOffset, ushort.MaxValue + 1, value)); + if (CacheOffset != 0 && RealCacheSize > 0 && (value > byte.MaxValue ? 2 : 1) != CacheIndexSize) + throw new SerializerException("Can't change the cache index size", new InvalidOperationException()); + if (value > RealCacheSize) + { + object[] newCache = StreamSerializer.ObjectCachePool.RentClean(value); + if (CacheOffset > 0) _Cache.AsSpan(0, CacheOffset - 1).CopyTo(newCache); + if (_Cache.Length != 0) StreamSerializer.ObjectCachePool.Return(_Cache); + _Cache = newCache; + } + _CacheSize = value; + RealCacheSize = value; + CacheIndexSize = _CacheSize > byte.MaxValue ? 2 : 1; + } + } + + /// + public T AddToCache(T obj) + { + int index = CacheOffset; + if (index >= _CacheSize) return obj; + _Cache[index] = obj!; + CacheOffset = index + 1; + return obj; + } + + /// + public bool TryReadCached(out T? obj) + { + EnsureUndisposed(); + obj = default; + if (!IsCacheEnabled) return false; + SequenceTypes st = (SequenceTypes)Stream.ReadOneByte(this); + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: return true; + case SequenceTypes.NotCached: return false; + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + obj = SerializerException.Wrap(() => (T)_Cache[index]); + return true; + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public async Task<(bool Succeed, T? Object)> TryReadCachedAsync() + { + EnsureUndisposed(); + if (!IsCacheEnabled) return (false, default); + SequenceTypes st = (SequenceTypes)await Stream.ReadOneByteAsync(this).DynamicContext(); + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: return (true, default); + case SequenceTypes.NotCached: return (false, default); + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) + ? await Stream.ReadOneByteAsync(this).DynamicContext() + : await Stream.ReadUShortAsync(this).DynamicContext(); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + return (true, SerializerException.Wrap(() => (T)_Cache[index])); + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public bool TryReadCachedObject(out T? obj, bool readType = false) + { + EnsureUndisposed(); + obj = default; + if (!IsCacheEnabled) return false; + SequenceTypes st = (SequenceTypes)Stream.ReadOneByte(this); + ObjectTypes objType; + if (readType) + { + objType = st switch + { + SequenceTypes.Cached => ObjectTypes.Null, + SequenceTypes.NotCached => (ObjectTypes)Stream.ReadOneByte(this), + _ => (ObjectTypes)(st & ~SequenceTypes.ALL_FLAGS) + }; + if (objType != ObjectTypes.Null) + { + LastObjectType = (ObjectTypes)(st & ~SequenceTypes.ALL_VALUES); + st &= SequenceTypes.ALL_FLAGS; + } + else + { + LastObjectType = null; + } + } + else + { + objType = ObjectTypes.Null; + LastObjectType = null; + } + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: return true; + case SequenceTypes.NotCached: return false; + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + obj = SerializerException.Wrap(() => (T)_Cache[index]); + if (readType) LastObjectType = obj!.GetObjectSerializerInfo().ObjectType; + return true; + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public async Task<(bool Succeed, T? Object)> TryReadCachedObjectAsync(bool readType = false) + { + EnsureUndisposed(); + if (!IsCacheEnabled) return (false, default); + SequenceTypes st = (SequenceTypes)await Stream.ReadOneByteAsync(this).DynamicContext(); + ObjectTypes objType; + if (readType) + { + objType = st switch + { + SequenceTypes.Cached => ObjectTypes.Null, + SequenceTypes.NotCached => (ObjectTypes)await Stream.ReadOneByteAsync(this).DynamicContext(), + _ => (ObjectTypes)(st & ~SequenceTypes.ALL_FLAGS) + }; + if (objType != ObjectTypes.Null) + { + LastObjectType = (ObjectTypes)(st & ~SequenceTypes.ALL_VALUES); + st &= SequenceTypes.ALL_FLAGS; + } + else + { + LastObjectType = null; + } + } + else + { + objType = ObjectTypes.Null; + LastObjectType = null; + } + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: + LastObjectType = ObjectTypes.Null; + return (true, default); + case SequenceTypes.NotCached: return (false, default); + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) + ? await Stream.ReadOneByteAsync(this).DynamicContext() + : await Stream.ReadUShortAsync(this).DynamicContext(); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + T obj = SerializerException.Wrap(() => (T)_Cache[index])!; + if (readType) LastObjectType = obj.GetObjectSerializerInfo().ObjectType; + return (true, obj); + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public bool TryReadCachedObjectCountable(out T? obj, out long len, bool readType = false) + { + EnsureUndisposed(); + obj = default; + len = 0; + if (!IsCacheEnabled) return false; + SequenceTypes st = (SequenceTypes)Stream.ReadOneByte(this); + LastNumberType = (st & ~SequenceTypes.SmallIndex) switch + { + SequenceTypes.Cached => null, + SequenceTypes.NotCached => (NumberTypes)Stream.ReadOneByte(this), + _ => (NumberTypes)(st & ~SequenceTypes.ALL_VALUES) + }; + st &= SequenceTypes.ALL_FLAGS; + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: + LastObjectType = ObjectTypes.Null; + return true; + case SequenceTypes.NotCached: + len = (long)StreamExtensions.ReadNumberInt(this, typeof(long), LastNumberType); + LastObjectType = readType ? (ObjectTypes)Stream.ReadOneByte(this) : null; + return false; + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + obj = SerializerException.Wrap(() => (T)_Cache[index]); + LastObjectType = obj!.GetObjectSerializerInfo().ObjectType; + return true; + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public async Task<(bool Succeed, T? Object, long Length)> TryReadCachedObjectCountableAsync(bool readType = false) + { + EnsureUndisposed(); + if (!IsCacheEnabled) return (false, default, 0); + SequenceTypes st = (SequenceTypes)await Stream.ReadOneByteAsync(this).DynamicContext(); + LastNumberType = (st & ~SequenceTypes.SmallIndex) switch + { + SequenceTypes.Cached => null, + SequenceTypes.NotCached => (NumberTypes)await Stream.ReadOneByteAsync(this).DynamicContext(), + _ => (NumberTypes)(st & ~SequenceTypes.ALL_VALUES) + }; + st &= SequenceTypes.ALL_FLAGS; + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: + LastObjectType = ObjectTypes.Null; + return (true, default, 0); + case SequenceTypes.NotCached: + long len = (long)await StreamExtensions.ReadNumberIntAsync(this, typeof(long), LastNumberType).DynamicContext(); + LastObjectType = readType ? (ObjectTypes)await Stream.ReadOneByteAsync(this).DynamicContext() : null; + return (false, default, len); + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) + ? await Stream.ReadOneByteAsync(this).DynamicContext() + : await Stream.ReadUShortAsync(this).DynamicContext(); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + return (true, SerializerException.Wrap(() => (T)_Cache[index]), 0); + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public bool TryReadCachedNumber(out T? obj, bool readType = false) where T : struct, IConvertible + { + EnsureUndisposed(); + obj = default; + if (!IsCacheEnabled) return false; + SequenceTypes st = (SequenceTypes)Stream.ReadOneByte(this); + NumberTypes numberType; + if (readType) + { + numberType = st switch + { + SequenceTypes.Cached => NumberTypes.None, + SequenceTypes.NotCached => (NumberTypes)Stream.ReadOneByte(this), + _ => (NumberTypes)(st & ~SequenceTypes.ALL_FLAGS) + }; + if (numberType != NumberTypes.None) + { + LastNumberType = (NumberTypes)(st & ~SequenceTypes.ALL_VALUES); + st &= SequenceTypes.ALL_FLAGS; + } + else + { + LastNumberType = null; + } + } + else + { + numberType = NumberTypes.None; + LastNumberType = null; + } + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: return true; + case SequenceTypes.NotCached: return false; + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + obj = SerializerException.Wrap(() => (T)_Cache[index]); + LastNumberType = obj.GetNumberType(); + return true; + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public async Task<(bool Succeed, T? Object)> TryReadCachedNumberAsync(bool readType = false) where T : struct, IConvertible + { + EnsureUndisposed(); + if (!IsCacheEnabled) return (false, default); + SequenceTypes st = (SequenceTypes)await Stream.ReadOneByteAsync(this).DynamicContext(); + NumberTypes numberType; + if (readType) + { + numberType = st switch + { + SequenceTypes.Cached => NumberTypes.None, + SequenceTypes.NotCached => (NumberTypes)Stream.ReadOneByte(this), + _ => (NumberTypes)(st & ~SequenceTypes.ALL_FLAGS) + }; + if (numberType != NumberTypes.None) + { + LastNumberType = (NumberTypes)(st & ~SequenceTypes.ALL_VALUES); + st &= SequenceTypes.ALL_FLAGS; + } + else + { + LastNumberType = null; + } + } + else + { + numberType = NumberTypes.None; + LastNumberType = null; + } + switch (st & ~SequenceTypes.SmallIndex) + { + case SequenceTypes.Null: return (true, default); + case SequenceTypes.NotCached: return (false, default); + case SequenceTypes.Cached: + int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) + ? await Stream.ReadOneByteAsync(this).DynamicContext() + : await Stream.ReadUShortAsync(this).DynamicContext(); + if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); + T num = SerializerException.Wrap(() => (T)_Cache[index]); + LastNumberType = num.GetNumberType(); + return (true, num); + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + protected override void Dispose(bool disposing) + { + if (_Cache.Length != 0) StreamSerializer.ObjectCachePool.Return(_Cache); + } + } +} diff --git a/src/Stream-Serializer-Extensions/DeserializerContextFluentExtensions.cs b/src/Stream-Serializer-Extensions/DeserializerContextFluentExtensions.cs new file mode 100644 index 0000000..1353872 --- /dev/null +++ b/src/Stream-Serializer-Extensions/DeserializerContextFluentExtensions.cs @@ -0,0 +1,43 @@ +using System.Runtime; +using System.Runtime.CompilerServices; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// fluent extensions + /// + public static class DeserializerContextFluentExtensions + { + /// + /// Configure serializer options + /// + /// Context type + /// Options type + /// Context + /// Options + /// Context + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static tContext WithOptions(this tContext context, tOptions? options) + where tContext : IDeserializationContext + where tOptions : ISerializerOptions + { + context.Options = options; + return context; + } + + /// + /// Remove serializer options + /// + /// Context type + /// Context + /// Context + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T WithoutOptions(this T context) where T : IDeserializationContext + { + context.Options = null; + return context; + } + } +} diff --git a/src/Stream-Serializer-Extensions/DisposableAutoStreamSerializerBase.cs b/src/Stream-Serializer-Extensions/DisposableAutoStreamSerializerBase.cs index b360179..be3ad48 100644 --- a/src/Stream-Serializer-Extensions/DisposableAutoStreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/DisposableAutoStreamSerializerBase.cs @@ -32,17 +32,15 @@ protected DisposableAutoStreamSerializerBase() : base(AutoStreamSerializerConfig IAutoStreamSerializerConfig IAutoStreamSerializer.AutoStreamSerializerConfig => AutoStreamSerializerConfig; /// - protected override void Serialize(Stream stream) => AutoStreamSerializerConfig.Serialize((T)this, stream); + protected override void Serialize(ISerializationContext context) => AutoStreamSerializerConfig.Serialize((T)this, context); /// - protected override Task SerializeAsync(Stream stream, CancellationToken cancellationToken) - => AutoStreamSerializerConfig.SerializeAsync((T)this, stream, cancellationToken); + protected override Task SerializeAsync(ISerializationContext context) => AutoStreamSerializerConfig.SerializeAsync((T)this, context); /// - protected override void Deserialize(Stream stream, int version) => AutoStreamSerializerConfig.Deserialize((T)this, stream, version); + protected override void Deserialize(IDeserializationContext context) => AutoStreamSerializerConfig.Deserialize((T)this, context); /// - protected override Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) - => AutoStreamSerializerConfig.DeserializeAsync((T)this, stream, version, cancellationToken); + protected override Task DeserializeAsync(IDeserializationContext context) => AutoStreamSerializerConfig.DeserializeAsync((T)this, context); } } diff --git a/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs b/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs index 0036703..8b9ec04 100644 --- a/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs @@ -5,7 +5,7 @@ namespace wan24.StreamSerializerExtensions { /// - /// Base class for a disposable stream serializing type + /// Base class for a stream serializing type /// public abstract class DisposableStreamSerializerBase : DisposableBase, IStreamSerializerVersion, IObjectValidatable { @@ -37,134 +37,122 @@ protected DisposableStreamSerializerBase(int? objectVersion = null) : base() /// /// Constructor /// - /// Stream - /// Serializer version + /// Context /// Object version - protected DisposableStreamSerializerBase(Stream stream, int version, int? objectVersion = null) : base() + protected DisposableStreamSerializerBase(IDeserializationContext context, int? objectVersion = null) : base() { _ObjectVersion = objectVersion; - DeserializeInt(stream, version); + DeserializeInt(context); } /// - int? IStreamSerializerVersion.ObjectVersion => IfUndisposed(_ObjectVersion); + int? IStreamSerializerVersion.ObjectVersion => _ObjectVersion; /// - int? IStreamSerializerVersion.SerializedObjectVersion => IfUndisposed(_SerializedObjectVersion); + int? IStreamSerializerVersion.SerializedObjectVersion => _SerializedObjectVersion; /// - int? IStreamSerializerVersion.SerializerVersion => IfUndisposed(_SerializerVersion); + int? IStreamSerializerVersion.SerializerVersion => _SerializerVersion; /// /// Serialize /// - /// Stream - protected abstract void Serialize(Stream stream); + /// Context + protected abstract void Serialize(ISerializationContext context); /// /// Serialize /// - /// Stream - /// Cancellation token - protected virtual async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) + /// Context + protected virtual async Task SerializeAsync(ISerializationContext context) { await Task.Yield(); - Serialize(stream); + Serialize(context); } /// /// Serialize /// - /// Stream - private void SerializeInt(Stream stream) + /// Context + private void SerializeInt(ISerializationContext context) { - stream.WriteSerializerVersion() - .WriteNumber(BASE_VERSION); - if (_ObjectVersion != null) stream.WriteNumber(_ObjectVersion.Value); - Serialize(stream); + context.Stream.WriteSerializerVersion(context) + .WriteNumber(BASE_VERSION, context); + if (_ObjectVersion != null) context.Stream.WriteNumber(_ObjectVersion.Value, context); + Serialize(context); } /// /// Serialize /// - /// Stream - /// Cancellation token - private async Task SerializeIntAsync(Stream stream, CancellationToken cancellationToken) + /// Context + private async Task SerializeIntAsync(ISerializationContext context) { - await stream.WriteSerializerVersionAsync(cancellationToken).DynamicContext(); - await stream.WriteNumberAsync(BASE_VERSION, cancellationToken).DynamicContext(); - if (_ObjectVersion != null) await stream.WriteNumberAsync(_ObjectVersion.Value, cancellationToken).DynamicContext(); - await SerializeAsync(stream, cancellationToken).DynamicContext(); + await context.Stream.WriteSerializerVersionAsync(context).DynamicContext(); + await context.Stream.WriteNumberAsync(BASE_VERSION, context).DynamicContext(); + if (_ObjectVersion != null) + await context.Stream.WriteNumberAsync(_ObjectVersion.Value, context).DynamicContext(); + await SerializeAsync(context).DynamicContext(); } /// /// Deserialize /// - /// Stream - /// Serializer version - protected abstract void Deserialize(Stream stream, int version); + /// Context + protected abstract void Deserialize(IDeserializationContext context); /// /// Deserialize /// - /// Stream - /// Serializer version - /// Cancellation token - protected virtual async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) + /// Context + protected virtual async Task DeserializeAsync(IDeserializationContext context) { await Task.Yield(); - Deserialize(stream, version); + Deserialize(context); } /// /// Deserialize /// - /// Stream - /// Serializer version -#pragma warning disable IDE0060 // Remove unused parameter (may be used later) - private void DeserializeInt(Stream stream, int version) -#pragma warning restore IDE0060 // Remove unused parameter (may be used later) + /// Context + private void DeserializeInt(IDeserializationContext context) { - _SerializerVersion = stream.ReadSerializerVersion(); - int bv = stream.ReadNumber(_SerializerVersion.Value); + _SerializerVersion = context.Stream.ReadSerializerVersion(context); + using DeserializerContext objContext = new(context.Stream, _SerializedObjectVersion, context.CacheSize, context.Cancellation); + int bv = context.Stream.ReadNumber(objContext); if (bv < 1 || bv > BASE_VERSION) throw new SerializerException($"Invalid base object version {bv}", new InvalidDataException()); - if (_ObjectVersion != null) _SerializedObjectVersion = StreamSerializerAdapter.ReadSerializedObjectVersion(stream, _SerializerVersion.Value, _ObjectVersion.Value); - Deserialize(stream, _SerializerVersion.Value); + if (_ObjectVersion != null) _SerializedObjectVersion = StreamSerializerAdapter.ReadSerializedObjectVersion(objContext, _ObjectVersion.Value); + Deserialize(objContext); } /// /// Deserialize /// - /// Stream - /// Serializer version - /// Cancellation token -#pragma warning disable IDE0060 // Remove unused parameter (may be used later) - private async Task DeserializeIntAsync(Stream stream, int version, CancellationToken cancellationToken) -#pragma warning restore IDE0060 // Remove unused parameter (may be used later) + /// Context + private async Task DeserializeIntAsync(IDeserializationContext context) { - _SerializerVersion = await stream.ReadSerializerVersionAsync(cancellationToken).DynamicContext(); - int bv = await stream.ReadNumberAsync(_SerializerVersion.Value, cancellationToken: cancellationToken).DynamicContext(); + _SerializerVersion = await context.Stream.ReadSerializerVersionAsync(context).DynamicContext(); + using DeserializerContext objContext = new(context.Stream, _SerializedObjectVersion, context.CacheSize, context.Cancellation); + int bv = await context.Stream.ReadNumberAsync(objContext).DynamicContext(); if (bv < 1 || bv > BASE_VERSION) throw new SerializerException($"Invalid base object version {bv}", new InvalidDataException()); if (_ObjectVersion != null) - _SerializedObjectVersion = await StreamSerializerAdapter.ReadSerializedObjectVersionAsync(stream, _SerializerVersion.Value, _ObjectVersion.Value, cancellationToken) + _SerializedObjectVersion = await StreamSerializerAdapter.ReadSerializedObjectVersionAsync(objContext, _ObjectVersion.Value) .DynamicContext(); - await DeserializeAsync(stream, _SerializerVersion.Value, cancellationToken).DynamicContext(); + await DeserializeAsync(objContext).DynamicContext(); } - /// - void IStreamSerializer.Serialize(Stream stream) => IfUndisposed(() => SerializeInt(stream)); + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) => ValidatableObjectBase.ObjectValidatable(this); /// - Task IStreamSerializer.SerializeAsync(Stream stream, CancellationToken cancellationToken) => IfUndisposed(() => SerializeIntAsync(stream, cancellationToken)); + void IStreamSerializer.Serialize(ISerializationContext context) => SerializeInt(context); /// - void IStreamSerializer.Deserialize(Stream stream, int version) => IfUndisposed(() => DeserializeInt(stream, version)); + Task IStreamSerializer.SerializeAsync(ISerializationContext context) => SerializeIntAsync(context); /// - Task IStreamSerializer.DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) - => IfUndisposed(() => DeserializeIntAsync(stream, version, cancellationToken)); + void IStreamSerializer.Deserialize(IDeserializationContext context) => DeserializeInt(context); /// - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) => IfUndisposed(() => ValidatableObjectBase.ObjectValidatable(this)); + Task IStreamSerializer.DeserializeAsync(IDeserializationContext context) => DeserializeIntAsync(context); } } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs index 2fedbfb..86e6499 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamAsyncEnumeratorBase.cs @@ -1,5 +1,4 @@ -using System.Runtime.CompilerServices; -using wan24.Core; +using wan24.Core; namespace wan24.StreamSerializerExtensions.Enumerator { @@ -12,15 +11,7 @@ public abstract class StreamAsyncEnumeratorBase : DisposableBase, IAsyncEnume /// /// Stream /// - protected readonly Stream Stream; - /// - /// Serializer version - /// - protected readonly int SerializerVersion; - /// - /// Cancellation token - /// - protected readonly CancellationToken Cancellation; + protected readonly IDeserializationContext Context; /// /// Current object /// @@ -29,15 +20,8 @@ public abstract class StreamAsyncEnumeratorBase : DisposableBase, IAsyncEnume /// /// Constructor /// - /// Stream - /// Serializer version - /// Cancellation token - protected StreamAsyncEnumeratorBase(Stream stream, int? version = null, CancellationToken cancellationToken = default) : base() - { - SerializerVersion = version ?? StreamSerializer.Version; - Cancellation = cancellationToken; - Stream = stream; - } + /// Context + protected StreamAsyncEnumeratorBase(IDeserializationContext context) : base() => Context = context; /// public T Current => IfUndisposed(_Current!); @@ -46,19 +30,19 @@ protected StreamAsyncEnumeratorBase(Stream stream, int? version = null, Cancella public async ValueTask MoveNextAsync() { EnsureUndisposed(); - if (Stream.CanSeek && Stream.Position == Stream.Length) return false; + if (Context.Stream.CanSeek && Context.Stream.Position == Context.Stream.Length) return false; try { _Current = await ReadObjectAsync().DynamicContext(); } catch (IOException) { - if (!Stream.CanSeek) return false; + if (!Context.Stream.CanSeek) return false; throw; } catch (SerializerException ex) { - if (!Stream.CanSeek && ex.InnerException is IOException) return false; + if (!Context.Stream.CanSeek && ex.InnerException is IOException) return false; throw; } return true; @@ -77,19 +61,17 @@ protected override void Dispose(bool disposing) { } /// Enumerate /// /// Final enumerator type - /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Enumerable - public static async IAsyncEnumerable EnumerateAsync(Stream stream, int? version = null, [EnumeratorCancellation] CancellationToken cancellationToken = default) + public static async IAsyncEnumerable EnumerateAsync(IDeserializationContext context) where tEnumerator : StreamAsyncEnumeratorBase { Type type = typeof(tEnumerator); ArgumentValidationHelper.EnsureValidArgument(nameof(type), !type.IsAbstract, () => "Non-abstract type required"); - StreamAsyncEnumeratorBase enumerator = Activator.CreateInstance(type, stream, version, cancellationToken) as StreamAsyncEnumeratorBase + StreamAsyncEnumeratorBase enumerator = Activator.CreateInstance(type, context) as StreamAsyncEnumeratorBase ?? throw new InvalidProgramException($"Failed to instance {type}"); await using (enumerator.DynamicContext()) - while (!cancellationToken.IsCancellationRequested && await enumerator.MoveNextAsync().DynamicContext()) + while (!context.Cancellation.IsCancellationRequested && await enumerator.MoveNextAsync().DynamicContext()) yield return enumerator.Current; } } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs index 00e1eff..88f3e52 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamEnumeratorBase.cs @@ -12,11 +12,7 @@ public abstract class StreamEnumeratorBase : DisposableBase, IEnumerator /// /// Stream /// - protected readonly Stream Stream; - /// - /// Serializer version - /// - protected readonly int SerializerVersion; + protected readonly IDeserializationContext Context; /// /// Stream start position /// @@ -29,13 +25,11 @@ public abstract class StreamEnumeratorBase : DisposableBase, IEnumerator /// /// Constructor /// - /// Stream - /// Serializer version - protected StreamEnumeratorBase(Stream stream, int? version = null) : base() + /// Context + protected StreamEnumeratorBase(IDeserializationContext context) : base() { - SerializerVersion = version ?? StreamSerializer.Version; - StartPosition = stream.CanSeek ? stream.Position : 0; - Stream = stream; + Context = context; + StartPosition = context.Stream.CanSeek ? context.Stream.Position : 0; } /// @@ -48,19 +42,19 @@ protected StreamEnumeratorBase(Stream stream, int? version = null) : base() public virtual bool MoveNext() { EnsureUndisposed(); - if (Stream.CanSeek && Stream.Position == Stream.Length) return false; + if (Context.Stream.CanSeek && Context.Stream.Position == Context.Stream.Length) return false; try { _Current = ReadObject(); } catch (IOException) { - if (!Stream.CanSeek) return false; + if (!Context.Stream.CanSeek) return false; throw; } catch (SerializerException ex) { - if (!Stream.CanSeek && ex.InnerException is IOException) return false; + if (!Context.Stream.CanSeek && ex.InnerException is IOException) return false; throw; } return true; @@ -70,8 +64,8 @@ public virtual bool MoveNext() public virtual void Reset() { EnsureUndisposed(); - if (!Stream.CanSeek) throw new NotSupportedException(); - Stream.Position = StartPosition; + if (!Context.Stream.CanSeek) throw new NotSupportedException(); + Context.Stream.Position = StartPosition; _Current = default; } @@ -88,14 +82,13 @@ protected override void Dispose(bool disposing) { } /// Enumerate /// /// Final enumerator type - /// Stream - /// Serializer version + /// Context /// Enumerable - public static IEnumerable Enumerate(Stream stream, int? version = null) where tEnumerator : StreamEnumeratorBase + public static IEnumerable Enumerate(IDeserializationContext context) where tEnumerator : StreamEnumeratorBase { Type type = typeof(tEnumerator); ArgumentValidationHelper.EnsureValidArgument(nameof(tEnumerator), !type.IsAbstract, () => "Non-abstract type required"); - using StreamEnumeratorBase enumerator = Activator.CreateInstance(type, stream, version) as StreamEnumeratorBase + using StreamEnumeratorBase enumerator = Activator.CreateInstance(type, context) as StreamEnumeratorBase ?? throw new InvalidProgramException($"Failed to instance {type}"); while (enumerator.MoveNext()) yield return enumerator.Current; } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamNumberAsyncEnumerator.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamNumberAsyncEnumerator.cs index c3c4134..6376d5b 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamNumberAsyncEnumerator.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamNumberAsyncEnumerator.cs @@ -1,6 +1,4 @@ -using System.Buffers; - -namespace wan24.StreamSerializerExtensions.Enumerator +namespace wan24.StreamSerializerExtensions.Enumerator { /// /// Stream number enumerator @@ -8,32 +6,13 @@ namespace wan24.StreamSerializerExtensions.Enumerator /// Numeric type public class StreamNumberAsyncEnumerator : StreamAsyncEnumeratorBase where T : struct, IConvertible { - /// - /// Array pool - /// - protected readonly ArrayPool Pool; - - /// - /// Constructor - /// - /// Stream - /// Serializer version - /// Cancellation token - public StreamNumberAsyncEnumerator(Stream stream, int? version = null, CancellationToken cancellationToken = default) : base(stream, version, cancellationToken) - => Pool = StreamSerializer.BufferPool; - /// /// Constructor /// - /// Stream - /// Serializer version - /// Array pool - /// Cancellation token - public StreamNumberAsyncEnumerator(Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - : base(stream, version, cancellationToken) - => Pool = pool ?? StreamSerializer.BufferPool; + /// Context + public StreamNumberAsyncEnumerator(IDeserializationContext context) : base(context) { } /// - protected override Task ReadObjectAsync() => Stream.ReadNumberAsync(SerializerVersion, Pool, Cancellation); + protected override Task ReadObjectAsync() => Context.Stream.ReadNumberAsync(Context); } } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamNumberEnumerator.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamNumberEnumerator.cs index 2863668..56b795b 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamNumberEnumerator.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamNumberEnumerator.cs @@ -1,6 +1,4 @@ -using System.Buffers; - -namespace wan24.StreamSerializerExtensions.Enumerator +namespace wan24.StreamSerializerExtensions.Enumerator { /// /// Stream number enumerator @@ -8,27 +6,13 @@ namespace wan24.StreamSerializerExtensions.Enumerator /// Numeric type public class StreamNumberEnumerator : StreamEnumeratorBase where T : struct, IConvertible { - /// - /// Array pool - /// - protected readonly ArrayPool Pool; - - /// - /// Constructor - /// - /// Stream - /// Serializer version - public StreamNumberEnumerator(Stream stream, int? version = null) : base(stream, version) => Pool = StreamSerializer.BufferPool; - /// /// Constructor /// - /// Stream - /// Serializer version - /// Array pool - public StreamNumberEnumerator(Stream stream, int? version = null, ArrayPool? pool = null) : base(stream, version) => Pool = pool ?? StreamSerializer.BufferPool; + /// Context + public StreamNumberEnumerator(IDeserializationContext context) : base(context) { } /// - protected override T ReadObject() => Stream.ReadNumber(SerializerVersion, Pool); + protected override T ReadObject() => Context.Stream.ReadNumber(Context); } } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerAsyncEnumerator.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerAsyncEnumerator.cs index 30e1cf9..644bee9 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerAsyncEnumerator.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerAsyncEnumerator.cs @@ -9,15 +9,13 @@ public class StreamSerializerAsyncEnumerator : StreamAsyncEnumeratorBase w /// /// Constructor /// - /// Stream - /// Serializer version - /// Cancellation token - public StreamSerializerAsyncEnumerator(Stream stream, int? version = null, CancellationToken cancellationToken = default) : base(stream, version, cancellationToken) { } + /// Context + public StreamSerializerAsyncEnumerator(IDeserializationContext context) : base(context) { } /// /// Read object method /// /// Object - protected override Task ReadObjectAsync() => Stream.ReadSerializedAsync(SerializerVersion, Cancellation); + protected override Task ReadObjectAsync() => Context.Stream.ReadSerializedAsync(Context); } } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerEnumerator.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerEnumerator.cs index bc4f3b1..b5f07ab 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerEnumerator.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamSerializerEnumerator.cs @@ -9,15 +9,14 @@ public class StreamSerializerEnumerator : StreamEnumeratorBase where T : c /// /// Constructor /// - /// Stream - /// Serializer version - public StreamSerializerEnumerator(Stream stream, int? version = null) : base(stream, version) { } + /// Context + public StreamSerializerEnumerator(IDeserializationContext context) : base(context) { } /// /// Read object method /// /// Object - protected override T ReadObject() => Stream.ReadSerialized(SerializerVersion); + protected override T ReadObject() => Context.Stream.ReadSerialized(Context); /// protected override void Dispose(bool disposing) { } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamStringAsyncEnumerator.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamStringAsyncEnumerator.cs index ae878be..03d10ab 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamStringAsyncEnumerator.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamStringAsyncEnumerator.cs @@ -1,16 +1,10 @@ -using System.Buffers; - -namespace wan24.StreamSerializerExtensions.Enumerator +namespace wan24.StreamSerializerExtensions.Enumerator { /// /// Stream string enumerator /// public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase { - /// - /// Array pool - /// - protected readonly ArrayPool Pool; /// /// Minimum UTF-8 string bytes length /// @@ -23,37 +17,22 @@ public class StreamStringAsyncEnumerator : StreamAsyncEnumeratorBase /// /// Constructor /// - /// Stream - /// Serializer version - /// Cancellation token - public StreamStringAsyncEnumerator(Stream stream, int? version = null, CancellationToken cancellationToken = default) : base(stream, version, cancellationToken) - => Pool = StreamSerializer.BufferPool; + /// Context + public StreamStringAsyncEnumerator(IDeserializationContext context) : base(context) { } /// /// Constructor /// - /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum UTF-8 string bytes length /// Maximum UTF-8 string bytes length - /// Cancellation token - public StreamStringAsyncEnumerator( - Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - : base(stream, version, cancellationToken) + public StreamStringAsyncEnumerator(IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) : base(context) { - Pool = pool ?? StreamSerializer.BufferPool; MinLen = minLen; MaxLen = maxLen; } /// - protected override Task ReadObjectAsync() => Stream.ReadStringAsync(SerializerVersion, Pool, MinLen, MaxLen, Cancellation); + protected override Task ReadObjectAsync() => Context.Stream.ReadStringAsync(Context, MinLen, MaxLen); } } diff --git a/src/Stream-Serializer-Extensions/Enumerator/StreamStringEnumerator.cs b/src/Stream-Serializer-Extensions/Enumerator/StreamStringEnumerator.cs index 5f70920..db96209 100644 --- a/src/Stream-Serializer-Extensions/Enumerator/StreamStringEnumerator.cs +++ b/src/Stream-Serializer-Extensions/Enumerator/StreamStringEnumerator.cs @@ -1,16 +1,10 @@ -using System.Buffers; - -namespace wan24.StreamSerializerExtensions.Enumerator +namespace wan24.StreamSerializerExtensions.Enumerator { /// /// Stream string enumerator /// public class StreamStringEnumerator : StreamEnumeratorBase { - /// - /// Array pool - /// - protected readonly ArrayPool Pool; /// /// Minimum UTF-8 string bytes length /// @@ -23,26 +17,22 @@ public class StreamStringEnumerator : StreamEnumeratorBase /// /// Constructor /// - /// Stream - /// Serializer version - public StreamStringEnumerator(Stream stream, int? version = null) : base(stream, version) => Pool = StreamSerializer.BufferPool; + /// Context + public StreamStringEnumerator(IDeserializationContext context) : base(context) { } /// /// Constructor /// - /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum UTF-8 string bytes length /// Maximum UTF-8 string bytes length - public StreamStringEnumerator(Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) : base(stream, version) + public StreamStringEnumerator(IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) : base(context) { - Pool = pool ?? StreamSerializer.BufferPool; MinLen = minLen; MaxLen = maxLen; } /// - protected override string ReadObject() => Stream.ReadString(SerializerVersion, Pool, MinLen, MaxLen); + protected override string ReadObject() => Context.Stream.ReadString(Context, MinLen, MaxLen); } } diff --git a/src/Stream-Serializer-Extensions/IDeserializationContext.cs b/src/Stream-Serializer-Extensions/IDeserializationContext.cs new file mode 100644 index 0000000..8d447ae --- /dev/null +++ b/src/Stream-Serializer-Extensions/IDeserializationContext.cs @@ -0,0 +1,79 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Interface for a stream deserialization context + /// + public interface IDeserializationContext : ISerializerContext + { + /// + /// Options + /// + ISerializerOptions? Options { get; set; } + /// + /// Add an object to the cache + /// + /// Object type + /// Object + /// Object + T AddToCache(T obj); + /// + /// Try to read an object cached + /// + /// Object type + /// Object + /// Succeed? + bool TryReadCached(out T? obj); + /// + /// Try to read an object cached + /// + /// Object type + /// If succeed and the object + Task<(bool Succeed, T? Object)> TryReadCachedAsync(); + /// + /// Try to read an object cached + /// + /// Object type + /// Object + /// Read the type flags? + /// Succeed? + bool TryReadCachedObject(out T? obj, bool readType = false); + /// + /// Try to read an object cached + /// + /// Object type + /// Read the type flags? + /// If succeed and the object + Task<(bool Succeed, T? Object)> TryReadCachedObjectAsync(bool readType = false); + /// + /// Try to read a countable object cached + /// + /// Object type + /// Object + /// Length + /// Read the type flags? + /// Succeed? + bool TryReadCachedObjectCountable(out T? obj, out long len, bool readType = false); + /// + /// Try to read a countable object cached + /// + /// Object type + /// Read the type flags? + /// If succeed, the object (if cached) and the length (if not cached) + Task<(bool Succeed, T? Object, long Length)> TryReadCachedObjectCountableAsync(bool readType = false); + /// + /// Try to read a number cached + /// + /// Number type + /// Number + /// Read the type flags? + /// Succeed? + bool TryReadCachedNumber(out T? obj, bool readType = false) where T : struct, IConvertible; + /// + /// Try to read a number cached + /// + /// Number type + /// Read the type flags? + /// If succeed and the number + Task<(bool Succeed, T? Object)> TryReadCachedNumberAsync(bool readType = false) where T : struct, IConvertible; + } +} diff --git a/src/Stream-Serializer-Extensions/ISerializationContext.cs b/src/Stream-Serializer-Extensions/ISerializationContext.cs new file mode 100644 index 0000000..ff23a35 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ISerializationContext.cs @@ -0,0 +1,77 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Interface for a stream serializer writing context + /// + public interface ISerializationContext : ISerializerContext + { + /// + /// Try to write the object cached + /// + /// Object type + /// Object + /// Cached? + bool TryWriteCached(T? obj); + /// + /// Try to write the object cached + /// + /// Object type + /// Object + /// Cached? + Task TryWriteCachedAsync(T? obj); + /// + /// Try to write the object cached + /// + /// Object type + /// Object + /// Object type + /// Write the type flags? + /// Cached? + bool TryWriteCached(T? obj, ObjectTypes? objType, bool writeType = false); + /// + /// Try to write the object cached + /// + /// Object type + /// Object + /// Object type + /// Write the type flags? + /// Cached? + Task TryWriteCachedAsync(T? obj, ObjectTypes? objType, bool writeType = false); + /// + /// Try to write a countable object cached + /// + /// Object type + /// Object + /// Length + /// Write the type flags? + /// Cached? + bool TryWriteCachedCountable(T? obj, long? len, bool writeType = false); + /// + /// Try to write a countable object cached + /// + /// Object type + /// Object + /// Length + /// Write the type flags? + /// Cached? + Task TryWriteCachedCountableAsync(T? obj, long? len, bool writeType = false); + /// + /// Try to write the number cached + /// + /// Number type + /// Number + /// Number type + /// Write the type flags? + /// Cached? + bool TryWriteCached(T? num, NumberTypes? numberType, bool writeType = false) where T : struct, IConvertible; + /// + /// Try to write the number cached + /// + /// Number type + /// Number + /// Number type + /// Write the type flags? + /// Cached? + Task TryWriteCachedAsync(T? num, NumberTypes? numberType, bool writeType = false) where T : struct, IConvertible; + } +} diff --git a/src/Stream-Serializer-Extensions/ISerializerContext.cs b/src/Stream-Serializer-Extensions/ISerializerContext.cs new file mode 100644 index 0000000..2a87a42 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ISerializerContext.cs @@ -0,0 +1,90 @@ +using System.Buffers; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Interface for a serializer context + /// + public interface ISerializerContext : IDisposableObject + { + /// + /// Stream + /// + Stream Stream { get; } + /// + /// Serializer version + /// + int Version { get; } + /// + /// Normalized serializer version (excluding customizable bits) + /// + int SerializerVersion { get; } + /// + /// Normalized custom version (right-shifted) + /// + int CustomVersion { get; } + /// + /// Current recursion level + /// + int RecursionLevel { get; set; } + /// + /// Cancellation + /// + CancellationToken Cancellation { get; set; } + /// + /// Cache size (zero to (temporary?) disable caching) + /// + int CacheSize { get; set; } + /// + /// Real cache size + /// + int RealCacheSize { get; } + /// + /// Cache index size in bytes + /// + int CacheIndexSize { get; } + /// + /// Determine if the cache is enabled + /// + bool IsCacheEnabled { get; } + /// + /// Current cache offset + /// + int CacheOffset { get; } + /// + /// Last object type + /// + ObjectTypes? LastObjectType { get; } + /// + /// Last number type + /// + NumberTypes? LastNumberType { get; } + /// + /// Buffer pool + /// + ArrayPool BufferPool { get; set; } + /// + /// Nullable? + /// + bool Nullable { get; set; } + /// + /// Enable the cache + /// + /// If the cache was disabled before, and is enabled now + bool EnableCache(); + /// + /// Disable the cache + /// + /// Was the cache enabled and is disabled now? + bool DisableCache(); + /// + /// Dispose including the stream + /// + void DisposeStream(); + /// + /// Dispose including the stream + /// + ValueTask DisposeStreamAsync(); + } +} diff --git a/src/Stream-Serializer-Extensions/IStreamSerializer.cs b/src/Stream-Serializer-Extensions/IStreamSerializer.cs index 1bd0a82..88aab74 100644 --- a/src/Stream-Serializer-Extensions/IStreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/IStreamSerializer.cs @@ -8,26 +8,22 @@ public interface IStreamSerializer /// /// Serialize /// - /// Stream - void Serialize(Stream stream); + /// Context + void Serialize(ISerializationContext context); /// /// Serialize /// - /// Stream - /// Cancellation token - Task SerializeAsync(Stream stream, CancellationToken cancellationToken); + /// Context + Task SerializeAsync(ISerializationContext context); /// /// Deserialize /// - /// Stream - /// Serializer version - void Deserialize(Stream stream, int version); + /// Context + void Deserialize(IDeserializationContext context); /// /// Deserialize /// - /// Stream - /// Serializer version - /// Cancellation token - Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken); + /// Context + Task DeserializeAsync(IDeserializationContext context); } } diff --git a/src/Stream-Serializer-Extensions/ItemDeserializerContext.cs b/src/Stream-Serializer-Extensions/ItemDeserializerContext.cs new file mode 100644 index 0000000..62696bf --- /dev/null +++ b/src/Stream-Serializer-Extensions/ItemDeserializerContext.cs @@ -0,0 +1,154 @@ +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Item deserializer context + /// + public sealed class ItemDeserializerContext : DisposableBase + { + /// + /// Type cache + /// + private readonly Type[] TypeCache; + /// + /// Object cache + /// + private readonly object[] ObjectCache; + /// + /// Use the object cache? + /// + private readonly bool UseObjectCache; + /// + /// Type cache offset? + /// + private int TypeCacheOffset = 0; + /// + /// Object cache offset? + /// + private int ObjectCacheOffset = 0; + + /// + /// Constructor + /// + /// Deserializer context + /// Create an object cache? + public ItemDeserializerContext(IDeserializationContext context, bool objectCache = true) : base() + { + Context = context; + TypeCache = StreamSerializer.TypeCachePool.RentClean(byte.MaxValue); + ObjectCache = objectCache ? StreamSerializer.ObjectCachePool.RentClean(byte.MaxValue) : Array.Empty(); + UseObjectCache = objectCache; + } + + /// + /// Deserializer context + /// + public IDeserializationContext Context { get; } + + /// + /// Object type + /// + public ObjectTypes ObjectType { get; set; } + + /// + /// Last object type + /// + public ObjectTypes LastObjectType { get; set; } + + /// + /// Item type + /// + public Type? ItemType { get; set; } + + /// + /// Item serializer + /// + public SerializerTypes ItemSerializer { get; set; } + + /// + /// Synchronous item deserializer + /// + public StreamSerializer.Deserializer_Delegate? ItemSyncDeserializer { get; set; } + + /// + /// Asynchronous item deserializer + /// + public StreamSerializer.AsyncDeserializer_Delegate? ItemAsyncDeserializer { get; set; } + + /// + /// Nullable? + /// + public bool Nullable { get; set; } + + /// + /// Add a type + /// + /// Type + public void AddType(Type type) + { + if (TypeCacheOffset >= byte.MaxValue) return; + TypeCache[TypeCacheOffset] = type; + TypeCacheOffset++; + } + + /// + /// Get a cached type + /// + /// Cache index + /// Type + public Type GetCachedType(int index) + { + if (index >= TypeCacheOffset) throw new SerializerException($"Invalid type cache index #{index}", new InvalidDataException()); + return TypeCache[index]; + } + + /// + /// Add a type + /// + /// Object + public void AddObject(T obj) + { + if (!UseObjectCache || ObjectCacheOffset >= byte.MaxValue) return; + ObjectCache[ObjectCacheOffset] = obj!; + ObjectCacheOffset++; + } + + /// + /// Get a cached object + /// + /// Cache index + /// Object + public object GetCachedObject(int index) + { + if (!UseObjectCache) throw new SerializerException(message: null, new InvalidOperationException()); + if (index >= ObjectCacheOffset) throw new SerializerException($"Invalid object cache index #{index}", new InvalidDataException()); + return ObjectCache[index]; + } + + /// + protected override void Dispose(bool disposing) + { + StreamSerializer.TypeCachePool.Return(TypeCache); + if (UseObjectCache) StreamSerializer.ObjectCachePool.Return(ObjectCache); + } + + /// + /// Cast as object type + /// + /// + public static implicit operator ObjectTypes(ItemDeserializerContext context) => context.ObjectType; + + /// + /// Cast as serializer type + /// + /// + public static implicit operator SerializerTypes(ItemDeserializerContext context) => context.ItemSerializer; + + /// + /// Cast as item type + /// + /// + public static implicit operator Type?(ItemDeserializerContext context) => context.ItemType; + } +} diff --git a/src/Stream-Serializer-Extensions/ItemSerializerContext.cs b/src/Stream-Serializer-Extensions/ItemSerializerContext.cs new file mode 100644 index 0000000..922f1b8 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ItemSerializerContext.cs @@ -0,0 +1,165 @@ +using wan24.Core; +using wan24.ObjectValidation; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Item serializer context + /// + public sealed class ItemSerializerContext : DisposableBase + { + /// + /// Cache + /// + private readonly int[] Cache; + /// + /// Using object cache? + /// + private readonly bool UseObjectCache; + /// + /// Type cache offset + /// + private int TypeCacheOffset = 0; + /// + /// Object cache offset + /// + private int ObjectCacheOffset = 0; + + /// + /// Constructor + /// + /// Serialization context + /// Create an object cache, too? + public ItemSerializerContext(ISerializationContext context, bool objectCache = true) : base() + { + Context = context; + Cache = objectCache + ? StreamSerializer.HashCodeCachePool.RentClean(byte.MaxValue << 1) + : StreamSerializer.HashCodeCachePool.RentClean(byte.MaxValue); + UseObjectCache = objectCache; + } + + /// + /// Serialization context + /// + public ISerializationContext Context { get; } + + /// + /// Last item type + /// + public Type? LastItemType { get; set; } + + /// + /// Item serializer + /// + public SerializerTypes ItemSerializer { get; set; } + + /// + /// Synchronous item serializer + /// + public StreamSerializer.Serializer_Delegate? ItemSyncSerializer { get; set; } + + /// + /// Asynchronous item serializer + /// + public StreamSerializer.AsyncSerializer_Delegate? ItemAsyncSerializer { get; set; } + + /// + /// Object type + /// + public ObjectTypes ObjectType { get; set; } + + /// + /// Write the object? + /// + public bool WriteObject { get; set; } + + /// + /// Nullable? + /// + public bool Nullable { get; set; } + + /// + /// Get the cache index of a type + /// + /// Type + /// Cache index or -1, if not cached + public int GetTypeCacheIndex(Type type) => Cache.IndexOf(type.GetHashCode()); + + /// + /// Get the cache index of an object + /// + /// Object type + /// Object + /// Cache index or -1, if not cached + public int GetObjectCacheIndex(T obj) => Cache.AsSpan(byte.MaxValue).IndexOf((obj, obj!.GetType()).GetHashCode()); + + /// + /// Add a type to the cache + /// + /// Type + /// Cache index or -1, if not cached + public int AddType(Type type) + { + if (TypeCacheOffset > byte.MaxValue) return -1; + int res = TypeCacheOffset; + Cache[res] = type.GetHashCode(); + TypeCacheOffset++; + return res; + } + + /// + /// Add an object to the cache + /// + /// Object type + /// Object + /// Cache index or -1, if not cached + public int AddObject(T obj) + { + if (!UseObjectCache || ObjectCacheOffset > byte.MaxValue) return -1; + int res = ObjectCacheOffset + byte.MaxValue; + Cache[res] = (obj!.GetType(), obj).GetHashCode(); + ObjectCacheOffset++; + return res; + } + + /// + protected override void Dispose(bool disposing) => StreamSerializer.HashCodeCachePool.Return(Cache); + + /// + /// Cast as last item type + /// + /// + public static implicit operator Type?(ItemSerializerContext context) => context.LastItemType; + + /// + /// Cast as last item serializer type + /// + /// + public static implicit operator SerializerTypes(ItemSerializerContext context) => context.ItemSerializer; + + /// + /// Cast as object type + /// + /// + public static implicit operator ObjectTypes(ItemSerializerContext context) => context.ObjectType; + + /// + /// Cast as write object flag + /// + /// + public static implicit operator bool(ItemSerializerContext context) => context.WriteObject; + + /// + /// Cast as stream + /// + /// + public static implicit operator Stream(ItemSerializerContext context) => context.Context.Stream; + + /// + /// Cast as cancellation token + /// + /// + public static implicit operator CancellationToken(ItemSerializerContext context) => context.Context.Cancellation; + } +} diff --git a/src/Stream-Serializer-Extensions/NumberTypes.cs b/src/Stream-Serializer-Extensions/NumberTypes.cs index 00af7c5..aa87ef1 100644 --- a/src/Stream-Serializer-Extensions/NumberTypes.cs +++ b/src/Stream-Serializer-Extensions/NumberTypes.cs @@ -45,7 +45,7 @@ public enum NumberTypes : byte /// /// (for nullable writing/reading) /// - Null = 31, + IsNull = 31, /// /// Min. value /// @@ -58,10 +58,10 @@ public enum NumberTypes : byte /// Unsigned? /// Unsigned = 128, +#pragma warning disable CA1069 // Double constant value /// /// Is zero? /// -#pragma warning disable CA1069 // Double constant value Zero = 128, #pragma warning restore CA1069 // Double constant value /// diff --git a/src/Stream-Serializer-Extensions/ObjectTypes.cs b/src/Stream-Serializer-Extensions/ObjectTypes.cs index 1a7f4de..475440e 100644 --- a/src/Stream-Serializer-Extensions/ObjectTypes.cs +++ b/src/Stream-Serializer-Extensions/ObjectTypes.cs @@ -11,7 +11,7 @@ public enum ObjectTypes : byte /// Null = 0, /// - /// Boolean (boolean ) + /// Boolean /// Bool = 1, #pragma warning disable CA1069 // Double value @@ -97,7 +97,7 @@ public enum ObjectTypes : byte /// ClrType = 20, /// - /// Using the object type from the cache, or the object from the object cache (if this flag is being used alone) + /// Using the object type from the type cache, or the object from the object cache (if this flag is being used alone) /// Cached = 32, /// @@ -119,10 +119,14 @@ public enum ObjectTypes : byte BasicTypeInfo = 64, #pragma warning restore CA1069 // Double value /// - /// Empty (or zero or boolean ; or enumeration termination or last item type, if this flag is being used alone) + /// Empty (array, list, etc.) /// Empty = 128, #pragma warning disable CA1069 // Double value + /// + /// Zero numeric value + /// + Zero = 128, /// /// /// diff --git a/src/Stream-Serializer-Extensions/README.md b/src/Stream-Serializer-Extensions/README.md index 3d165e8..c85de16 100644 --- a/src/Stream-Serializer-Extensions/README.md +++ b/src/Stream-Serializer-Extensions/README.md @@ -15,8 +15,8 @@ The built in serializer supports binary serialization of - dictionaries - byte arrays - structures -- possibly any other objects with a parameterless public constructor -- streams +- possibly any other types +- streams (embedded) - CLR type informations and exports an asynchronous fluent API for writing operations, too. @@ -29,39 +29,93 @@ binary serializable with backward compatibility, easily. The serializer is designed to produce only a minimum of absolutely required overhead, which sometimes can result in even less data, too (compared to -usually used serialization methods). +usually used serialization methods). The produced binary sequences are + +- processor architecture independent +- platform independent +- runtime independent +- language independent +- type and type version safe +- compatible with newer serializer versions +- as small as possible (trade off between complexity <-> performance <-> size) +- using aggressive caching + +In theory it'd by possible to deserialize a binary sequence using a language +such as JavaScript or C++. However, at present there's only a .NET +implementation of the (de)serializer available. + +**NOTE**: The deserialized type must be present at the processing computer. +The deserializer won't create anonymous types. Only for deserializing CLR type +informations there's a type implemented which can be used to browse the +seqenced CLR type informations before trying to get a `Type` instance, finally. + +Most people think of object serialization, but this library can be used to +deserialize any binary sequence, and also a text format (which is an encoded +binary sequence at a higher level) may be parsed as well. And since a stream +is a quiet abstract type, the output/input must not be a file all the time. +Using some creativity just everything can be serialized or deserialized and +target any stream consuming interface. The API is fully synchronous and asynchronous - you choose depending on the used stream type. +**TIP**: Because often very tiny sequences will be written/red, you may want +to use a buffering stream to gain more performance! Streams will be accessed +non-seeking and sequential only. + Cold storage of serialized sequences can be challenging. Using the build in sequencer versioning you can ensure that a sequence can be deserialized at any time after a component was updated. -## Methods +## How to get it + +This library is available as +[NuGet package "Stream-Serializer-Extensions"](https://www.nuget.org/packages/Stream-Serializer-Extensions/). + +There's also another +[NuGet package "Stream-Serializer-Extensions-Full"](https://www.nuget.org/packages/Stream-Serializer-Extensions-Full/), +which contains advanced serialization tools. -The `Write` and `WriteAsync` methods will be extended with supported types, -while serializing some types is being done with specialized methods: +## Methods -| Type | Serialization method | Deserialization method | +| Type | Serialization | Deserialization | | --- | --- | --- | -| `string` | `WriteString*` | `ReadString*` | -| `Enum` | `WriteEnum*` | `ReadEnum*` | -| `Array` | `Write*Array*` | `Read*Array*` | -| `List` | `WriteList*` | `ReadList*` | -| `Dictionary` | `WriteDict*` | `ReadDict*` | -| `IStreamSerializer` | `WriteSerialized*` | `ReadSerialized*` | -| `byte[]` | `WriteBytes*` | `ReadBytes*` | -| `Stream` | `WriteStream*` | `ReadStream*` | -| Structure | `WriteStruct*` | `ReadStruct*` | -| (any other) | `WriteAnyObject*` | `ReadAnyObject*` | +| `bool` | `Write` | `ReadBool` | +| `sbyte` | `Write` | `ReadOneSByte` | +| `byte` | `Write` | `ReadOneByte` | +| `short` | `Write` | `ReadShort` | +| `ushort` | `Write` | `ReadUShort` | +| `int` | `Write` | `ReadInt` | +| `uint` | `Write` | `ReadUInt` | +| `long` | `Write` | `ReadLong` | +| `ulong` | `Write` | `ReadULong` | +| `float` | `Write` | `ReadFloat` | +| `double` | `Write` | `ReadDouble` | +| `decimal` | `Write` | `ReadDecimal` | +| (U)Int 8-64, `float`, `double`, `decimal` | `WriteNumber` | `ReadNumber` | +| `Enum` | `WriteEnum` | `ReadEnum` | +| `byte[]` | `WriteBytes` | `ReadBytes` | +| `string` (UTF-8) | `WriteString` | `ReadString` | +| `string` (UTF-16) | `WriteString16` | `ReadString16` | +| `string` (UTF-32) | `WriteString32` | `ReadString32` | +| `IStreamSerializer` (class) | `WriteSerialized` | `ReadSerialized` | +| `IStreamSerializer` (structure) | `WriteSerializedStruct` | `ReadSerializedStruct` | +| Structures | `WriteStruct` | `ReadStruct` | +| `Array` (variable length) | `WriteArray` | `ReadArray` | +| `Array` (fixed length) | `WriteFixedArray` | `ReadFixedArray` | +| `IList` | `WriteList` | `ReadList` | +| `IDictionary` | `WriteDict` | `ReadDict` | +| `Stream` | `WriteStream` | `ReadStream` | +| `Type` | `WriteType` | `ReadType` | + +**NOTE**: In general you should use the opposite method for reading a binary +sequence that you've used for writing it! For all methods there is an `*Async` +version also. Use the `*Nullable*` methods for writing/reading nullable +values. Some may have to add an extra byte for `null` detection. Using the `WriteObject*` and `ReadObject*` methods you can let the library decide which method to use for the given object type. -Using the `WriteAny*` and `ReadAny*` methods, you can write and read an object -with a dynamic type. - Using the `WriteAnyObject*` and `ReadAnyObject*` methods you can also (de)serialize objects which have a constructor without parameters. The serializer will process public properties which have a public getter and @@ -69,18 +123,15 @@ setter. If in the future the object changes, it's not possible to deserialize an older binary sequence, unless you work with the `StreamSerializerAttribute` and set an object version to the type and its properties. -**NOTE**: Please use the `*Nullable*` methods for working with nullables. -They'll add an extra byte for `null` value detection. - -**NOTE**: In general you should use the opposite method for reading a binary -sequence that you've used for writing it! +Using the `WriteAny*` and `ReadAny*` methods, you can write and read an object +with a dynamic type. Most methods are designed specially for one type, while other methods work more generic. This is when to choose which method: | Method | Condition | | --- | --- | -| `*Serialized*` | The fixed type is a stream serializer base object | +| `*Serialized*` | The fixed type implements `IStreamSerializer` | | `*Object*` | The fixed type has a specialized serializer | | `*Struct*` | The fixed type is a marshalable structure | | `*AnyObject*` | The type uses attributes (or no serializer contract information at all) and doesn't have a specialized serializer | @@ -104,7 +155,7 @@ data. Seekable streams will just be copied, having their length as header, while non-seekable streams will be embedded chunked. When deserializing an embedded stream using generic read-methods (like -`ReadObject` or `ReadAny`), a temporary `FileStream` will be created, which +`ReadObject` or `ReadAny`), a temporary `TempStream` will be created, which will delete the temporary file when disposing. You can define a stream factory using `StreamSerializerAttribute.StreamFactoryType` and `StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom @@ -508,8 +559,8 @@ These enumerators are implemented at present: ## Type cache By calling `StreamSerializer.EnableTypeCache()`, you can use a type cache, -which enables the serializer to write type information about types with -implement the `IStreamSerializer` interface using only 4 bytes. For this all +which enables the serializer to write type information about types which +implement the `IStreamSerializer` interface using only 6 bytes. For this all matching types will be stored in the `wan24.Core.TypeCache`. **CAUTION**: Calling this method will ensure that the `wan24-Core` @@ -522,11 +573,19 @@ opposite isn't a problem. **CAUTION**: Because the type cache uses the types hash code, you shouldn't use this feature, if you want to cold store a sequence, or if if the -deserializing peer may know a different version if the type. +deserializing peer may know a different version if the type: If the type +changes, its hash code may change! + +## Stream-Serializer-Extensions-Full + +This library is an add-on which contains advanced serialization tools: -When using the type cache, every `IStreamSerializer` type information can be -written using only about 7 bytes. Without the type cache, the information will -contain much more bytes, depending on the type properties. +- `SerializerStream` which manages a `SerializerContext` and/or +`DeserializerContext` and has its own extension methods without the context +argument +- `Write/ReadAll` extensions for writing/reading a type sequence +- `ReadUntil` extension for reading until any byte sequence (requires a +seekable stream!) ## Security @@ -552,7 +611,7 @@ could harm your computer! The job of the serializer is to write and read objects to/from a binary sequence. There's no compression, encryption or hashing built in. If you want to compress/protect a created binary sequence, you can apply compression, -encryption and hashing on the result as you want. +encryption and hashing on the result as you need. Object validation will be applied to deserialized objects to ensure their -validity. +validity (using `ObjectValidation`). diff --git a/src/Stream-Serializer-Extensions/SequenceTypes.cs b/src/Stream-Serializer-Extensions/SequenceTypes.cs new file mode 100644 index 0000000..ba5f2e8 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SequenceTypes.cs @@ -0,0 +1,33 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Binary sequence types + /// + public enum SequenceTypes : byte + { + /// + /// The object will be + /// + Null = 0, + /// + /// The object was cached + /// + Cached = 32, + /// + /// Using a small index (lower or equal to ) + /// + SmallIndex = 64, + /// + /// The object wasn't cached + /// + NotCached = 128, + /// + /// All sequence type values (for removing them from a or value) + /// + ALL_VALUES = Cached | NotCached, + /// + /// All sequence type flags (including ) + /// + ALL_FLAGS = ALL_VALUES | SmallIndex + } +} diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs index 9136a76..b42df92 100644 --- a/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs @@ -33,83 +33,85 @@ public sealed partial class SerializedTypeInfo : IStreamSerializerVersion int? IStreamSerializerVersion.SerializerVersion => SerializerVersion; /// - public void Serialize(Stream stream) + public void Serialize(ISerializationContext context) { - stream.WriteNumberNullable(VERSION) - .Write((byte)(ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled ? ObjectType | ObjectTypes.Cached : ObjectType)); + context.Stream.Write((byte)VERSION, context) + .Write((byte)(ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled ? ObjectType | ObjectTypes.Cached : ObjectType), context); if (ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled) { - stream.Write(ToClrType().GetHashCode()); + context.Stream.Write(ToClrType().GetHashCode(), context); return; } else if (Name != null) { - stream.WriteString(Name); + context.Stream.WriteString(Name, context); } if (ObjectType.IsGeneric()) { int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Count; - stream.Write((sbyte)(IsGenericTypeDefinition ? -len : len)); - if (!IsGenericTypeDefinition) for (int i = 0; i < len; stream.WriteSerialized(GenericParameters[i]), i++) ; + context.Stream.Write((sbyte)(IsGenericTypeDefinition ? -len : len), context); + if (!IsGenericTypeDefinition) for (int i = 0; i < len; context.Stream.WriteSerialized(GenericParameters[i], context), i++) ; } else if (ObjectType.IsArray()) { - stream.WriteSerialized(ElementType!); - if (!ObjectType.IsNotRanked()) stream.Write((byte)(ArrayRank - 1)); + context.Stream.WriteSerialized(ElementType!, context); + if (!ObjectType.IsNotRanked()) context.Stream.Write((byte)(ArrayRank - 1), context); } } /// - public async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) + public async Task SerializeAsync(ISerializationContext context) { - await stream.WriteNumberNullableAsync(VERSION, cancellationToken).DynamicContext(); - await stream.WriteAsync( + await context.Stream.WriteAsync((byte)VERSION, context).DynamicContext(); + await context.Stream.WriteAsync( (byte)(ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled ? ObjectType | ObjectTypes.Cached : ObjectType), - cancellationToken + context ) .DynamicContext(); if (ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled) { - await stream.WriteAsync(ToClrType().GetHashCode(), cancellationToken).DynamicContext(); + await context.Stream.WriteAsync(ToClrType().GetHashCode(), context).DynamicContext(); return; } else if (Name != null) { - await stream.WriteStringAsync(Name, cancellationToken).DynamicContext(); + await context.Stream.WriteStringAsync(Name, context).DynamicContext(); } if (ObjectType.IsGeneric()) { int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Count; - await stream.WriteAsync((sbyte)(IsGenericTypeDefinition ? -len : len), cancellationToken).DynamicContext(); + await context.Stream.WriteAsync((sbyte)(IsGenericTypeDefinition ? -len : len), context).DynamicContext(); if (!IsGenericTypeDefinition) for (int i = 0; i < len; i++) - await stream.WriteSerializedAsync(GenericParameters[i], cancellationToken).DynamicContext(); + await context.Stream.WriteSerializedAsync(GenericParameters[i], context).DynamicContext(); } else if (ObjectType.IsArray()) { - await stream.WriteSerializedAsync(ElementType!, cancellationToken).DynamicContext(); - if (!ObjectType.IsNotRanked()) await stream.WriteAsync((byte)(ArrayRank - 1), cancellationToken).DynamicContext(); + await context.Stream.WriteSerializedAsync(ElementType!, context).DynamicContext(); + if (!ObjectType.IsNotRanked()) await context.Stream.WriteAsync((byte)(ArrayRank - 1), context).DynamicContext(); } } /// - public void Deserialize(Stream stream, int version) + public void Deserialize(IDeserializationContext context) { + if (context.SerializerVersion < 3) throw new SerializerException($"CLR type reading isn't available in version {context.SerializerVersion}", new InvalidDataException()); if (SerializerVersion != null || ClrType != null) throw new SerializerException("Not a fresh instance", new InvalidOperationException()); - SerializerVersion = version; + SerializerVersion = context.Version; if (ObjectType == ObjectTypes.Null) { - SerializedObjectVersion = stream.ReadNumberNullable(version) ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); + SerializedObjectVersion = context.Stream.ReadOneByte(context); + if (SerializedObjectVersion == 0) throw new SerializerException($"Trying to deserialize NULL type information", new InvalidDataException()); if (SerializedObjectVersion > VERSION) throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); - ObjectType = (ObjectTypes)stream.ReadOneByte(version); + ObjectType = (ObjectTypes)context.Stream.ReadOneByte(context); } switch (ObjectType.RemoveFlags()) { case ObjectTypes.Serializable: if (StreamSerializer.TypeCacheEnabled && ObjectType.ContainsAllFlags(ObjectTypes.Cached)) { - int thc = stream.ReadInt(version); + int thc = context.Stream.ReadInt(context); if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); if (!typeof(IStreamSerializer).IsAssignableFrom(type)) throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); @@ -123,19 +125,20 @@ public void Deserialize(Stream stream, int version) $"The type cache needs to be enabled in order to be able to deserialize this type information", new InvalidOperationException() ); - Name = stream.ReadString(version, minLen: 1, maxLen: short.MaxValue); + Name = context.Stream.ReadString(context, minLen: 1, maxLen: short.MaxValue); } break; case ObjectTypes.Stream: case ObjectTypes.Struct: case ObjectTypes.Object: - Name = stream.ReadString(version, minLen: 1, maxLen: short.MaxValue); + Name = context.Stream.ReadString(context, minLen: 1, maxLen: short.MaxValue); break; } if (ObjectType.IsGeneric()) { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); - int len = stream.ReadOneSByte(version); + if (Recursion >= SerializerContextBase.MaxRecursion) + throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + int len = context.Stream.ReadOneSByte(context); IsGenericTypeDefinition = len < 0; if (len < 0) len = -len; SerializerHelper.EnsureValidLength(len, 1); @@ -153,7 +156,7 @@ public void Deserialize(Stream stream, int version) { Recursion = Recursion + 1 }; - info.Deserialize(stream, version); + info.Deserialize(context); list.Add(info); } GenericParameters = list.AsReadOnly(); @@ -161,15 +164,16 @@ public void Deserialize(Stream stream, int version) } else if (ObjectType.IsArray()) { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + if (Recursion >= SerializerContextBase.MaxRecursion) + throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); ElementType = new() { Recursion = Recursion + 1 }; - ElementType.Deserialize(stream, version); + ElementType.Deserialize(context); if (!ObjectType.IsNotRanked()) { - ArrayRank = stream.ReadOneByte() + 1; + ArrayRank = context.Stream.ReadOneByte(context) + 1; if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); } else @@ -180,24 +184,25 @@ public void Deserialize(Stream stream, int version) } /// - public async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) + public async Task DeserializeAsync(IDeserializationContext context) { + if (context.SerializerVersion < 3) throw new SerializerException($"CLR type reading isn't available in version {context.SerializerVersion}", new InvalidDataException()); if (SerializerVersion != null || ClrType != null) throw new SerializerException("Not a fresh instance", new InvalidOperationException()); - SerializerVersion = version; + SerializerVersion = context.Version; if (ObjectType == ObjectTypes.Null) { - SerializedObjectVersion = await stream.ReadNumberNullableAsync(version, cancellationToken: cancellationToken).DynamicContext() - ?? throw new SerializerException($"Invalid object version", new InvalidDataException()); + SerializedObjectVersion = await context.Stream.ReadOneByteAsync(context).DynamicContext(); + if (SerializedObjectVersion == 0) throw new SerializerException($"Trying to deserialize NULL type information", new InvalidDataException()); if (SerializedObjectVersion > VERSION) throw new SerializerException($"Unsupported object version {SerializedObjectVersion} (max. supported version is {VERSION})", new InvalidDataException()); - ObjectType = (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext(); + ObjectType = (ObjectTypes)await context.Stream.ReadOneByteAsync(context).DynamicContext(); } switch (ObjectType.RemoveFlags()) { case ObjectTypes.Serializable: if (StreamSerializer.TypeCacheEnabled && ObjectType.ContainsAllFlags(ObjectTypes.Cached)) { - int thc = await stream.ReadIntAsync(version, cancellationToken: cancellationToken).DynamicContext(); + int thc = await context.Stream.ReadIntAsync(context).DynamicContext(); if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); if (!typeof(IStreamSerializer).IsAssignableFrom(type)) throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); @@ -211,19 +216,20 @@ public async Task DeserializeAsync(Stream stream, int version, CancellationToken $"The type cache needs to be enabled in order to be able to deserialize this type information", new InvalidOperationException() ); - Name = await stream.ReadStringAsync(version, minLen: 1, maxLen: short.MaxValue, cancellationToken: cancellationToken).DynamicContext(); + Name = await context.Stream.ReadStringAsync(context, minLen: 1, maxLen: short.MaxValue).DynamicContext(); } break; case ObjectTypes.Stream: case ObjectTypes.Struct: case ObjectTypes.Object: - Name = await stream.ReadStringAsync(version, minLen: 1, maxLen: short.MaxValue, cancellationToken: cancellationToken).DynamicContext(); + Name = await context.Stream.ReadStringAsync(context, minLen: 1, maxLen: short.MaxValue).DynamicContext(); break; } if (ObjectType.IsGeneric()) { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); - int len = await stream.ReadOneSByteAsync(version, cancellationToken).DynamicContext(); + if (Recursion >= SerializerContextBase.MaxRecursion) + throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + int len = await context.Stream.ReadOneSByteAsync(context).DynamicContext(); IsGenericTypeDefinition = len < 0; if (len < 0) len = -len; SerializerHelper.EnsureValidLength(len, 1); @@ -241,7 +247,7 @@ public async Task DeserializeAsync(Stream stream, int version, CancellationToken { Recursion = Recursion + 1 }; - await info.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + await info.DeserializeAsync(context).DynamicContext(); list.Add(info); } GenericParameters = list.AsReadOnly(); @@ -249,15 +255,16 @@ public async Task DeserializeAsync(Stream stream, int version, CancellationToken } else if (ObjectType.IsArray()) { - if (Recursion >= 32) throw new SerializerException($"Avoided endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + if (Recursion >= SerializerContextBase.MaxRecursion) + throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); ElementType = new() { Recursion = Recursion + 1 }; - await ElementType.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + await ElementType.DeserializeAsync(context).DynamicContext(); if (!ObjectType.IsNotRanked()) { - ArrayRank = await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() + 1; + ArrayRank = await context.Stream.ReadOneByteAsync(context).DynamicContext() + 1; if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); } else @@ -282,45 +289,36 @@ public async Task DeserializeAsync(Stream stream, int version, CancellationToken /// /// Deserialize with a pre-red object version (and type) /// - /// Stream - /// Serializer version + /// Context /// Object version /// Object type /// Instance - public static SerializedTypeInfo From(Stream stream, int version, int objVersion, ObjectTypes objType = ObjectTypes.Null) + public static SerializedTypeInfo From(IDeserializationContext context, int objVersion, ObjectTypes objType = ObjectTypes.Null) { SerializedTypeInfo res = new() { SerializedObjectVersion = objVersion, - ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)stream.ReadOneByte(version) : objType + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)context.Stream.ReadOneByte(context) : objType }; - res.Deserialize(stream, version); + res.Deserialize(context); return res; } /// /// Deserialize with a pre-red object version (and type) /// - /// Stream - /// Serializer version + /// Context /// Object version /// Object type - /// Cancellation token /// Instance - public static async Task FromAsync( - Stream stream, - int version, - int objVersion, - ObjectTypes objType = ObjectTypes.Null, - CancellationToken cancellationToken = default - ) + public static async Task FromAsync(IDeserializationContext context, int objVersion, ObjectTypes objType = ObjectTypes.Null) { SerializedTypeInfo res = new() { SerializedObjectVersion = objVersion, - ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext() : objType + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)await context.Stream.ReadOneByteAsync(context).DynamicContext() : objType }; - await res.DeserializeAsync(stream, version, cancellationToken).DynamicContext(); + await res.DeserializeAsync(context).DynamicContext(); return res; } } diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs index 7064f37..0a0ea61 100644 --- a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs @@ -40,7 +40,7 @@ public SerializedTypeInfo() : base() { } /// /// Constructor /// - /// + /// Object type public SerializedTypeInfo(ObjectTypes type) : base() => ObjectType = type; /// @@ -145,7 +145,7 @@ public bool IsKnown { if (ClrType != null) return true; if ((ClrType = TypeHelper.Instance.GetType(ToString())) == null) return false; - Cache.TryAdd(ClrType!.GetHashCode(), this); + Cache.TryAdd(ClrType.GetHashCode(), this); return true; } catch @@ -159,13 +159,13 @@ public bool IsKnown /// Determine if the type is serializable /// [NoValidation] - public bool IsSerializable => IsKnown && StreamSerializer.IsTypeAllowed(ToClrType()); + public bool IsSerializable => IsKnown && StreamSerializer.IsTypeAllowed(ClrType!); /// /// Determine if the type information if for a basic type (will serialize to only one byte) /// [NoValidation] - public bool IsBasicType => Name == null && ElementType == null && GenericParameters.Count == 0 && !IsGenericTypeDefinition; + public bool IsBasicType => Name == null && ElementType == null && !IsGenericTypeDefinition && GenericParameters.Count == 0; /// /// Get as CLR type @@ -173,7 +173,7 @@ public bool IsKnown /// CLR type public Type ToClrType() { - ClrType ??= TypeHelper.Instance.GetType(ToString()) ?? throw new TypeLoadException($"{ToString()} is not available"); + ClrType ??= TypeHelper.Instance.GetType(ToString()) ?? throw new TypeLoadException($"{AsString} is not available"); Cache.TryAdd(ClrType.GetHashCode(), this); return ClrType; } @@ -188,7 +188,9 @@ public Type ToSerializableType() ? ClrType = StreamSerializer.LoadType(ToString()) : StreamSerializer.IsTypeAllowed(ClrType) ? ClrType - : throw new SerializerException($"Failed to load type \"{ToString()}\""); + : throw new InvalidOperationException( + $"\"{ToString()}\" is not an allowed deserializable type (see {nameof(StreamSerializer)}.{nameof(StreamSerializer.AllowedTypes)})" + ); Cache.TryAdd(res.GetHashCode(), this); return res; } @@ -259,7 +261,7 @@ private void SetTypeInfo(Type type) } if (type.IsGenericType) { - if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + if (Recursion >= SerializerContextBase.MaxRecursion) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); IsGenericTypeDefinition = type.IsGenericTypeDefinition; if (IsGenericTypeDefinition) { @@ -275,7 +277,7 @@ private void SetTypeInfo(Type type) } else if (type.IsArray) { - if (Recursion >= 32) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + if (Recursion >= SerializerContextBase.MaxRecursion) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); ElementType = new(type.GetElementType()!) { Recursion = Recursion + 1 }; ArrayRank = type.GetArrayRank(); } diff --git a/src/Stream-Serializer-Extensions/SerializerContext.cs b/src/Stream-Serializer-Extensions/SerializerContext.cs new file mode 100644 index 0000000..2fe673f --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerContext.cs @@ -0,0 +1,658 @@ +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Stream serializer writing context + /// + public class SerializerContext : SerializerContextBase, ISerializationContext + { + /// + /// Cache + /// + protected int[] _Cache; + + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Cache size + /// Cancellation token + public SerializerContext(Stream stream, int? cacheSize = null, CancellationToken cancellationToken = default) + : base(stream, StreamSerializer.Version, cacheSize, cancellationToken) + { + _Cache = _CacheSize > 0 ? StreamSerializer.HashCodeCachePool.RentClean(_CacheSize) : Array.Empty(); + CacheIndexSize = _CacheSize > byte.MaxValue ? 2 : 1; + } + + /// + /// Cache + /// + public Memory Cache + { + get + { + EnsureUndisposed(); + return _Cache.AsMemory(0, RealCacheSize); + } + } + + /// + public override int CacheSize + { + get => _CacheSize; + set + { + EnsureUndisposed(); + if (value == _CacheSize) return; + if (value < 1) + { + _CacheSize = value; + if (RealCacheSize != 0 && CacheOffset == 0) + { + StreamSerializer.HashCodeCachePool.Return(_Cache); + _Cache = Array.Empty(); + } + return; + } + SerializerException.Wrap(() => this.EnsureValidArgument(nameof(value), CacheOffset, ushort.MaxValue + 1, value)); + if (CacheOffset != 0 && RealCacheSize > 0 && (value > byte.MaxValue ? 2 : 1) != CacheIndexSize) + throw new SerializerException("Can't change the cache index size", new InvalidOperationException()); + if (value > RealCacheSize) + { + int[] newCache = StreamSerializer.HashCodeCachePool.RentClean(value); + if (CacheOffset > 0) _Cache.AsSpan(0, CacheOffset - 1).CopyTo(newCache); + if (_Cache.Length != 0) StreamSerializer.HashCodeCachePool.Return(_Cache); + _Cache = newCache; + } + _CacheSize = value; + RealCacheSize = value; + CacheIndexSize = _CacheSize > byte.MaxValue ? 2 : 1; + } + } + + /// + public bool TryWriteCached(T? obj) + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) return false; + // Handle a NULL value + if (obj == null) + { + Stream.Write((byte)SequenceTypes.Null, this); + return true; + } + // Handle caching + int ohc = (obj.GetType(), obj).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + Stream.Write((byte)SequenceTypes.NotCached, this); + return WriteNotCached(ohc); + } + // Use the cached object + return WriteCached(co); + } + + /// + public async Task TryWriteCachedAsync(T? obj) + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) return false; + // Handle a NULL value + if (obj == null) + { + await Stream.WriteAsync((byte)SequenceTypes.Null, this).DynamicContext(); + return true; + } + // Handle caching + int ohc = (obj.GetType(), obj).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + return WriteNotCached(ohc); + } + // Use the cached object + return await WriteCachedAsync(co).DynamicContext(); + } + + /// + public bool TryWriteCached(T? obj, ObjectTypes? objType, bool writeType = false) + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) + { + LastObjectType = null; + return false; + } + // Handle a NULL value + if (obj == null) + { + Stream.Write((byte)SequenceTypes.Null, this); + LastObjectType = null; + return true; + } + // Ensure having an object type + Type type; + bool writeObject; + if (objType == null) + { + (type, objType, _, writeObject) = obj.GetObjectSerializerInfo(); + } + else + { + type = obj.GetType(); + writeObject = objType.Value.RequiresObjectWriting(); + } + LastObjectType = objType; + // Handle non-caching environment + if (!writeObject) + { + if (writeType) + { + if (objType.Value.ContainsAnyFlag(ObjectTypes.Cached, ObjectTypes.Unsigned, ObjectTypes.Empty)) + { + Stream.Write((byte)SequenceTypes.NotCached, this); + Stream.Write((byte)objType, this); + } + else + { + Stream.Write((byte)(objType | ObjectTypes.Empty), this); + } + } + else + { + Stream.Write((byte)SequenceTypes.NotCached, this); + } + return writeType; + } + // Handle caching + int ohc = (type, obj).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + if (writeType) + { + if (objType.Value.ContainsAnyFlag(ObjectTypes.Cached, ObjectTypes.Unsigned, ObjectTypes.Empty)) + { + Stream.Write((byte)SequenceTypes.NotCached, this); + Stream.Write((byte)objType, this); + } + else + { + Stream.Write((byte)(objType | ObjectTypes.Empty), this); + } + } + else + { + Stream.Write((byte)SequenceTypes.NotCached, this); + } + return WriteNotCached(ohc); + } + // Use the cached object + return WriteCached(co); + } + + /// + public async Task TryWriteCachedAsync(T? obj, ObjectTypes? objType, bool writeType = false) + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) + { + LastObjectType = null; + return false; + } + // Handle a NULL value + if (obj == null) + { + await Stream.WriteAsync((byte)SequenceTypes.Null, this).DynamicContext(); + LastObjectType = null; + return true; + } + // Ensure having an object type + Type type; + bool writeObject; + if (objType == null) + { + (type, objType, _, writeObject) = obj.GetObjectSerializerInfo(); + } + else + { + type = obj.GetType(); + writeObject = objType.Value.RequiresObjectWriting(); + } + LastObjectType = objType; + // Handle non-caching environment + if (!writeObject) + { + if (writeType) + { + if (objType.Value.ContainsAnyFlag(ObjectTypes.Cached, ObjectTypes.Unsigned, ObjectTypes.Empty)) + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + await Stream.WriteAsync((byte)objType, this).DynamicContext(); + } + else + { + await Stream.WriteAsync((byte)(objType | ObjectTypes.Empty), this).DynamicContext(); + } + } + else + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + } + return writeType; + } + // Handle caching + int ohc = (type, obj).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + if (writeType) + { + if (objType.Value.ContainsAnyFlag(ObjectTypes.Cached, ObjectTypes.Unsigned, ObjectTypes.Empty)) + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + await Stream.WriteAsync((byte)objType, this).DynamicContext(); + } + else + { + await Stream.WriteAsync((byte)(objType | ObjectTypes.Empty), this).DynamicContext(); + } + } + else + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + } + return WriteNotCached(ohc); + } + // Use the cached object + return await WriteCachedAsync(co).DynamicContext(); + } + + /// + public bool TryWriteCachedCountable(T? obj, long? len, bool writeType = false) + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) + { + LastObjectType = null; + LastNumberType = null; + return false; + } + // Handle a NULL value + if (obj == null) + { + Stream.Write((byte)SequenceTypes.Null, this); + LastObjectType = null; + LastNumberType = null; + return true; + } + // Ensure valid arguments + SerializerException.Wrap(() => + { + this.EnsureValidArgument(nameof(len), len); + this.EnsureValidArgument(nameof(len), 0, long.MaxValue, len!.Value); + }); + // Ensure having an object and a number type + Type type, + nType; + ObjectTypes objType; + bool writeObject; + NumberTypes numberType; + object n; + (type, objType, _, writeObject) = obj.GetObjectSerializerInfo(); + LastObjectType = objType; + (n, numberType) = len!.Value.GetNumberAndType(); + nType = n.GetType(); + LastNumberType = numberType; + // Handle an empty object and non-caching environment + if (!writeObject || numberType.IsZero()) + { + if (numberType.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + Stream.Write((byte)SequenceTypes.NotCached, this); + Stream.Write((byte)numberType, this); + } + else + { + Stream.Write((byte)(numberType | NumberTypes.Unsigned), this); + } + if (writeType) Stream.Write((byte)objType, this); + return true; + } + // Handle caching + int ohc = (type, obj).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + if (numberType.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + Stream.Write((byte)SequenceTypes.NotCached, this); + Stream.Write((byte)numberType, this); + } + else + { + Stream.Write((byte)(numberType | NumberTypes.Unsigned), this); + } + StreamExtensions.WriteNumberInt(this, n, numberType, writeType: false); + if (writeType) Stream.Write((byte)objType, this); + return WriteNotCached(ohc); + } + // Use the cached object + return WriteCached(co); + } + + /// + public async Task TryWriteCachedCountableAsync(T? obj, long? len, bool writeType = false) + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) + { + LastObjectType = null; + LastNumberType = null; + return false; + } + // Handle a NULL value + if (obj == null) + { + await Stream.WriteAsync((byte)SequenceTypes.Null, this).DynamicContext(); + LastObjectType = null; + LastNumberType = null; + return true; + } + // Ensure valid arguments + SerializerException.Wrap(() => + { + this.EnsureValidArgument(nameof(len), len); + this.EnsureValidArgument(nameof(len), 0, long.MaxValue, len!.Value); + }); + // Ensure having an object and a number type + Type type, + nType; + ObjectTypes objType; + bool writeObject; + NumberTypes numberType; + object n; + (type, objType, _, writeObject) = obj.GetObjectSerializerInfo(); + LastObjectType = objType; + (n, numberType) = len!.Value.GetNumberAndType(); + nType = n.GetType(); + LastNumberType = numberType; + // Handle an empty object and non-caching environment + if (!writeObject || numberType.IsZero()) + { + if (numberType.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + await Stream.WriteAsync((byte)numberType, this).DynamicContext(); + } + else + { + await Stream.WriteAsync((byte)(numberType | NumberTypes.Unsigned), this).DynamicContext(); + } + if (writeType) await Stream.WriteAsync((byte)objType, this).DynamicContext(); + return true; + } + // Handle caching + int ohc = (type, obj).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + if (numberType.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + await Stream.WriteAsync((byte)numberType, this).DynamicContext(); + } + else + { + await Stream.WriteAsync((byte)(numberType | NumberTypes.Unsigned), this).DynamicContext(); + } + await StreamExtensions.WriteNumberIntAsync(this, n, numberType, writeType: false).DynamicContext(); + if (writeType) await Stream.WriteAsync((byte)objType, this).DynamicContext(); + return WriteNotCached(ohc); + } + // Use the cached object + return await WriteCachedAsync(co).DynamicContext(); + } + + /// + public bool TryWriteCached(T? num, NumberTypes? numberType, bool writeType = false) where T : struct, IConvertible + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) + { + LastNumberType = null; + return false; + } + // Handle a NULL value + if (num == null) + { + Stream.Write((byte)SequenceTypes.Null, this); + LastNumberType = null; + return true; + } + // Ensure having a number type + Type type; + object n; + if (numberType == null) + { + (n, numberType) = num.GetNumberAndType(); + type = n.GetType(); + } + else + { + n = num; + type = num.GetType(); + } + LastNumberType = numberType; + // Handle non-caching environment + if (!numberType.Value.RequiresObjectWriting()) + { + if (writeType) + { + if (numberType.Value.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + Stream.Write((byte)SequenceTypes.NotCached, this); + Stream.Write((byte)numberType, this); + } + else + { + Stream.Write((byte)(numberType | NumberTypes.Unsigned), this); + } + } + else + { + Stream.Write((byte)SequenceTypes.NotCached, this); + } + return writeType; + } + // Handle caching + int ohc = (type, n).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + if (writeType) + { + if (numberType.Value.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + Stream.Write((byte)SequenceTypes.NotCached, this); + Stream.Write((byte)numberType, this); + } + else + { + Stream.Write((byte)(numberType | NumberTypes.Unsigned), this); + } + } + else + { + Stream.Write((byte)SequenceTypes.NotCached, this); + } + return WriteNotCached(ohc); + } + // Use the cached number + return WriteCached(co); + } + + /// + public async Task TryWriteCachedAsync(T? num, NumberTypes? numberType, bool writeType = false) where T : struct, IConvertible + { + EnsureUndisposed(); + // Ensure using the cache + if (!IsCacheEnabled) + { + LastNumberType = null; + return false; + } + // Handle a NULL value + if (num == null) + { + await Stream.WriteAsync((byte)SequenceTypes.Null, this).DynamicContext(); + LastNumberType = null; + return true; + } + // Ensure having a number type + Type type; + object n; + if (numberType == null) + { + (n, numberType) = num.GetNumberAndType(); + type = n.GetType(); + } + else + { + n = num; + type = num.GetType(); + } + LastNumberType = numberType; + // Handle non-caching environment + if (!numberType.Value.RequiresObjectWriting()) + { + if (writeType) + { + if (numberType.Value.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + await Stream.WriteAsync((byte)numberType, this).DynamicContext(); + } + else + { + await Stream.WriteAsync((byte)(numberType | NumberTypes.Unsigned), this).DynamicContext(); + } + } + else + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + } + return writeType; + } + // Handle caching + int ohc = (type, n).GetHashCode(), + co = _Cache.IndexOf(ohc); + if (co == -1) + { + // Update the cache + if (writeType) + { + if (numberType.Value.ContainsAnyFlag(NumberTypes.MinValue, NumberTypes.MaxValue, NumberTypes.Unsigned)) + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + await Stream.WriteAsync((byte)numberType, this).DynamicContext(); + } + else + { + await Stream.WriteAsync((byte)(numberType | NumberTypes.Unsigned), this).DynamicContext(); + } + } + else + { + await Stream.WriteAsync((byte)SequenceTypes.NotCached, this).DynamicContext(); + } + return WriteNotCached(ohc); + } + // Use the cached number + return await WriteCachedAsync(co).DynamicContext(); + } + + /// + /// Write cached (will write to the stream!) + /// + /// Cache index + /// + protected bool WriteCached(int index) + { + EnsureUndisposed(); + SequenceTypes st = SequenceTypes.Cached; + if (CacheIndexSize != 1 && index <= byte.MaxValue) st |= SequenceTypes.SmallIndex; + Stream.Write((byte)st, this); + if (CacheIndexSize == 1 || index <= byte.MaxValue) + { + Stream.Write((byte)index, this); + } + else + { + Stream.Write((ushort)index, this); + } + return true; + } + + /// + /// Write cached (will write to the stream!) + /// + /// Cache index + /// + protected async Task WriteCachedAsync(int index) + { + EnsureUndisposed(); + SequenceTypes st = SequenceTypes.Cached; + if (CacheIndexSize != 1 && index <= byte.MaxValue) st |= SequenceTypes.SmallIndex; + await Stream.WriteAsync((byte)st, this).DynamicContext(); + if (CacheIndexSize == 1 || index <= byte.MaxValue) + { + await Stream.WriteAsync((byte)index, this).DynamicContext(); + } + else + { + await Stream.WriteAsync((ushort)index, this).DynamicContext(); + } + return true; + } + + /// + /// Write not cached (but may store the objects hash code in the cache; will NOT write to the stream) + /// + /// Type and object hash code + /// + protected bool WriteNotCached(int hashCode) + { + EnsureUndisposed(); + if (CacheOffset < _CacheSize) + { + _Cache[CacheOffset] = hashCode; + CacheOffset++; + } + return false; + } + + /// + protected override void Dispose(bool disposing) + { + if (_Cache.Length != 0) StreamSerializer.HashCodeCachePool.Return(_Cache); + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerContextBase.cs b/src/Stream-Serializer-Extensions/SerializerContextBase.cs new file mode 100644 index 0000000..d6b5dc3 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerContextBase.cs @@ -0,0 +1,133 @@ +using System.Buffers; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Base class for a stream serializer context + /// + public abstract class SerializerContextBase : DisposableBase, ISerializerContext + { + /// + /// Cache size + /// + protected int _CacheSize = DefaultCacheSize; + /// + /// Current recursion level + /// + protected int _RecursionLevel = 0; + + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Serializer version + /// Cache size + /// Cancellation token + protected SerializerContextBase(Stream stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = default) : base() + { + if (cacheSize != null) + { + this.EnsureValidArgument(nameof(cacheSize), 0, ushort.MaxValue + 1, cacheSize.Value); + _CacheSize = cacheSize.Value; + } + Stream = stream; + Version = version ?? StreamSerializer.Version; + Cancellation = cancellationToken; + } + + /// + /// Default context cache size (zero to disable caching at all) + /// + public static int DefaultCacheSize { get; set; } = byte.MaxValue; + + /// + /// Max. recursion level + /// + public static int MaxRecursion { get; set; } = 32; + + /// + public Stream Stream { get; } + + /// + public int Version { get; } + + /// + public int SerializerVersion => Version & byte.MaxValue; + + /// + public int CustomVersion => Version >> 8; + + /// + public int RecursionLevel + { + get => _RecursionLevel; + set + { + SerializerException.Wrap(() => this.EnsureValidArgument(nameof(value), value >= 0, $"Invalid recursion level {value}")); + if (value > MaxRecursion) throw new SerializerException($"Max. recursion of {MaxRecursion} exceeded ({value})", new StackOverflowException()); + _RecursionLevel = value; + } + } + + /// + public CancellationToken Cancellation { get; set; } + + /// + public abstract int CacheSize { get; set; } + + /// + public int RealCacheSize { get; protected set; } = DefaultCacheSize; + + /// + public int CacheIndexSize { get; protected set; } + + /// + public bool IsCacheEnabled => _CacheSize > 0; + + /// + public int CacheOffset { get; protected set; } + + /// + public ObjectTypes? LastObjectType { get; protected set; } + + /// + public NumberTypes? LastNumberType { get; protected set; } + + /// + public ArrayPool BufferPool { get; set; } = StreamSerializer.BufferPool; + + /// + public bool Nullable { get; set; } + + /// + public bool EnableCache() + { + if (IsCacheEnabled || RealCacheSize == 0) return false; + CacheSize = RealCacheSize; + return true; + } + + /// + public bool DisableCache() + { + if (!IsCacheEnabled) return false; + CacheSize = 0; + return true; + } + + /// + public virtual void DisposeStream() + { + Dispose(); + Stream.Dispose(); + } + + /// + public virtual async ValueTask DisposeStreamAsync() + { + await DisposeAsync().DynamicContext(); + await Stream.DisposeAsync().DynamicContext(); + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.NumberTypes.cs b/src/Stream-Serializer-Extensions/SerializerHelper.NumberTypes.cs new file mode 100644 index 0000000..d266336 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerHelper.NumberTypes.cs @@ -0,0 +1,361 @@ +using System.Diagnostics; +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // NumberTypes + public static partial class SerializerHelper + { + /// + /// Remove flags + /// + /// Type + /// Type without flags + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static NumberTypes RemoveFlags(this NumberTypes type) => type & ~NumberTypes.FLAGS; + + /// + /// Remove value flags + /// + /// Type + /// Type without value flags + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static NumberTypes RemoveValueFlags(this NumberTypes type) => type & ~NumberTypes.VALUE_FLAGS; + + /// + /// Is unsigned? + /// + /// Type + /// Unsigned? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsUnsigned(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.Unsigned); + + /// + /// Is min. value? + /// + /// Type + /// Min.value? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsMinValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MinValue); + + /// + /// Is max. value? + /// + /// Type + /// Max. value? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsMaxValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MaxValue); + + /// + /// Is zero? + /// + /// Type + /// Zero? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsZero(this NumberTypes type) => type == NumberTypes.Zero; + + /// + /// Does the type require to write the serialized object? + /// + /// Type + /// Is required? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool RequiresObjectWriting(this NumberTypes type) => !type.IsZero() && !type.IsMinValue() && !type.IsMaxValue(); + + /// + /// Determine if the number type has value flags + /// + /// Type + /// Has value flags? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool HasValueFlags(this NumberTypes type) => (type & NumberTypes.VALUE_FLAGS) != 0; + + /// + /// Get the type of a number + /// + /// Number type + /// Number + /// Use the flags? + /// Number type + public static NumberTypes GetNumberType(this T number, bool useFlags = true) + => number switch + { + sbyte sb => useFlags + ? sb switch + { + 0 => NumberTypes.Zero, + sbyte.MinValue => NumberTypes.Byte | NumberTypes.MinValue, + sbyte.MaxValue => NumberTypes.Byte | NumberTypes.MaxValue, + _ => NumberTypes.Byte + } + : NumberTypes.Byte, + byte b => useFlags + ? b switch + { + 0 => NumberTypes.Zero, + byte.MaxValue => NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned, + _ => NumberTypes.Byte | NumberTypes.Unsigned + } + : NumberTypes.Byte | NumberTypes.Unsigned, + short s => useFlags + ? s switch + { + 0 => NumberTypes.Zero, + short.MinValue => NumberTypes.Short | NumberTypes.MinValue, + short.MaxValue => NumberTypes.Short | NumberTypes.MaxValue, + _ => NumberTypes.Short + } + : NumberTypes.Short, + ushort us => useFlags + ? us switch + { + 0 => NumberTypes.Zero, + ushort.MaxValue => NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned, + _ => NumberTypes.Short | NumberTypes.Unsigned + } + : NumberTypes.Short | NumberTypes.Unsigned, + int i => useFlags + ? i switch + { + 0 => NumberTypes.Zero, + int.MinValue => NumberTypes.Int | NumberTypes.MinValue, + int.MaxValue => NumberTypes.Int | NumberTypes.MaxValue, + _ => NumberTypes.Int + } + : NumberTypes.Int, + uint ui => useFlags + ? ui switch + { + 0 => NumberTypes.Zero, + uint.MaxValue => NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned, + _ => NumberTypes.Int | NumberTypes.Unsigned + } + : NumberTypes.Int | NumberTypes.Unsigned, + long l => useFlags + ? l switch + { + 0 => NumberTypes.Zero, + long.MinValue => NumberTypes.Long | NumberTypes.MinValue, + long.MaxValue => NumberTypes.Long | NumberTypes.MaxValue, + _ => NumberTypes.Long + } + : NumberTypes.Long, + ulong ul => useFlags + ? ul switch + { + 0 => NumberTypes.Zero, + ulong.MaxValue => NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned, + _ => NumberTypes.Long | NumberTypes.Unsigned + } + : NumberTypes.Long | NumberTypes.Unsigned, + float f => useFlags + ? f switch + { + 0 => NumberTypes.Zero, + float.MinValue => NumberTypes.Float | NumberTypes.MinValue, + float.MaxValue => NumberTypes.Float | NumberTypes.MaxValue, + _ => NumberTypes.Float + } + : NumberTypes.Float, + double d => useFlags + ? d switch + { + 0 => NumberTypes.Zero, + double.MinValue => NumberTypes.Double | NumberTypes.MinValue, + double.MaxValue => NumberTypes.Double | NumberTypes.MaxValue, + _ => NumberTypes.Double + } + : NumberTypes.Double, + decimal m => useFlags + ? m switch + { + 0 => NumberTypes.Zero, + decimal.MinValue => NumberTypes.Decimal | NumberTypes.MinValue, + decimal.MaxValue => NumberTypes.Decimal | NumberTypes.MaxValue, + _ => NumberTypes.Decimal + } + : NumberTypes.Decimal, + _ => NumberTypes.None + }; + + /// + /// Get the best matching number type + /// + /// Number type + /// Number + /// Number and type + public static (object Number, NumberTypes Type) GetNumberAndType(this T number) + { + ArgumentValidationHelper.EnsureValidArgument(nameof(number), number); +#if DEBUG + Debug.Assert(number != null); +#endif + NumberTypes origin = GetNumberType(number), + type; + ArgumentValidationHelper.EnsureValidArgument(nameof(number), origin != NumberTypes.None, () => "Not a supported numeric type"); + if (origin.IsZero() || origin.IsMinValue() || origin.IsMaxValue()) return (0, origin); + object num; + switch (origin.RemoveFlags()) + { + case NumberTypes.Float: + num = number; + type = NumberTypes.Float; + break; + case NumberTypes.Double: + { + double value = number.ConvertType(); + if (double.IsNaN(value) || double.IsInfinity(value) || double.IsSubnormal(value) || value < float.MinValue || value > float.MaxValue) + { + num = value; + type = NumberTypes.Double; + } + else + { + num = (float)value; + type = NumberTypes.Float; + } + } + break; + case NumberTypes.Decimal: + num = number; + type = NumberTypes.Decimal; + break; + default: + if (origin.IsUnsigned()) + { + ulong value = number.ConvertType(); + if (value > long.MaxValue) + { + num = value; + type = NumberTypes.Long | NumberTypes.Unsigned; + } + else if (value > uint.MaxValue) + { + num = (long)value; + type = NumberTypes.Long; + } + else if (value > int.MaxValue) + { + num = (uint)value; + type = NumberTypes.Int | NumberTypes.Unsigned; + } + else if (value > ushort.MaxValue) + { + num = (int)value; + type = NumberTypes.Int; + } + else if ((int)value > short.MaxValue) + { + num = (ushort)value; + type = NumberTypes.Short | NumberTypes.Unsigned; + } + else if (value > byte.MaxValue) + { + num = (short)value; + type = NumberTypes.Short; + } + else + { + num = (byte)value; + type = NumberTypes.Byte | NumberTypes.Unsigned; + } + } + else + { + long value = number.ConvertType(); + if (value < 0) + { + if (value < int.MinValue) + { + num = value; + type = NumberTypes.Long; + } + else if (value < short.MinValue) + { + num = (int)value; + type = NumberTypes.Int; + } + else if (value < sbyte.MinValue) + { + num = (short)value; + type = NumberTypes.Short; + } + else + { + num = (sbyte)value; + type = NumberTypes.Byte; + } + } + else + { + if (value > uint.MaxValue) + { + num = value; + type = NumberTypes.Long; + } + else if (value > int.MaxValue) + { + num = (uint)value; + type = NumberTypes.Int | NumberTypes.Unsigned; + } + else if (value > ushort.MaxValue) + { + num = (int)value; + type = NumberTypes.Int; + } + else if ((int)value > short.MaxValue) + { + num = (ushort)value; + type = NumberTypes.Short | NumberTypes.Unsigned; + } + else if (value > byte.MaxValue) + { + num = (short)value; + type = NumberTypes.Short; + } + else + { + num = (byte)value; + type = NumberTypes.Byte | NumberTypes.Unsigned; + } + } + } + break; + } + return (num, type); + } + + /// + /// Get the CLR type of a number type + /// + /// Number type + /// CLR type + public static Type GetClrType(this NumberTypes type) => type.RemoveValueFlags() switch + { + NumberTypes.Byte => typeof(sbyte), + NumberTypes.Byte | NumberTypes.Unsigned => typeof(byte), + NumberTypes.Short => typeof(short), + NumberTypes.Short | NumberTypes.Unsigned => typeof(ushort), + NumberTypes.Int => typeof(int), + NumberTypes.Int | NumberTypes.Unsigned => typeof(uint), + NumberTypes.Long => typeof(long), + NumberTypes.Long | NumberTypes.Unsigned => typeof(ulong), + NumberTypes.Float => typeof(float), + NumberTypes.Double => typeof(double), + NumberTypes.Decimal => typeof(decimal), + _ => throw new ArgumentException($"Unknown number type {type}", nameof(type)) + }; + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.ObjectTypes.cs b/src/Stream-Serializer-Extensions/SerializerHelper.ObjectTypes.cs new file mode 100644 index 0000000..bd9a25a --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerHelper.ObjectTypes.cs @@ -0,0 +1,366 @@ +using System.Collections; +using System.Diagnostics; +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // ObjectTypes + public static partial class SerializerHelper + { + /// + /// Remove flags + /// + /// Type + /// Type without flags + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ObjectTypes RemoveFlags(this ObjectTypes type) => type & ~ObjectTypes.FLAGS; + + /// + /// Is empty? + /// + /// Type + /// Empty? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsEmpty(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Empty); + + /// + /// Is zero? + /// + /// Type + /// Zero? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsZero(this ObjectTypes type) => type.IsNumber() && type.ContainsAllFlags(ObjectTypes.Zero); + + /// + /// Is unsigned? + /// + /// Type + /// Unsigned? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsUnsigned(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Unsigned); + + /// + /// Is cached? + /// + /// Type + /// Cached? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsCached(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Cached); + + /// + /// Is generic? + /// + /// Type + /// Generic? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsGeneric(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Generic); + + /// + /// Is enumeration break? + /// + /// Type + /// Break? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsBreak(this ObjectTypes type) => type == ObjectTypes.Break; + + /// + /// Is an array? + /// + /// Type + /// An array? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsArray(this ObjectTypes type) => type.RemoveFlags() == ObjectTypes.Array; + + /// + /// Is not ranked? + /// + /// Type + /// Not ranked? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsNotRanked(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.NoRank); + + /// + /// Is a cached serializable type? + /// + /// Type + /// Is cached serializable? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsCachedSerializable(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.CachedSerializable); + + /// + /// Is a basic type info? + /// + /// Type + /// Is a basic type info? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsBasicTypeInfo(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.BasicTypeInfo); + + /// + /// Is a number? + /// + /// Type + /// A number? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool IsNumber(this ObjectTypes type) => type.RemoveFlags() switch + { + ObjectTypes.Byte => true, + ObjectTypes.Short => true, + ObjectTypes.Int => true, + ObjectTypes.Long => true, + ObjectTypes.Float => true, + ObjectTypes.Double => true, + ObjectTypes.Decimal => true, + _ => false + }; + + /// + /// Determine if a type is required + /// + /// Type + /// Is required? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool RequiresType(this ObjectTypes type) => type.RemoveFlags() switch + { + ObjectTypes.Array => true, + ObjectTypes.List => true, + ObjectTypes.Dict => true, + ObjectTypes.Object => true, + ObjectTypes.Struct => true, + ObjectTypes.Serializable => true, + _ => false + }; + + /// + /// Does the type require to write the serialized object? + /// + /// Type + /// Is required? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool RequiresObjectWriting(this ObjectTypes type) => type switch + { + ObjectTypes.Null => false, + ObjectTypes.Bool => false, + ObjectTypes.Cached => false, + _ => !type.ContainsAnyFlag(ObjectTypes.Empty) + }; + + /// + /// Get object serializer informations + /// + /// Object + /// Informations + public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObject) GetObjectSerializerInfo(this object obj) + { + ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj); +#if DEBUG + Debug.Assert(obj != null); +#endif + Type type = obj.GetType(); + ObjectTypes objType = obj switch + { + bool => ObjectTypes.Bool, + sbyte => ObjectTypes.Byte, + byte => ObjectTypes.Byte | ObjectTypes.Unsigned, + short => ObjectTypes.Short, + ushort => ObjectTypes.Short | ObjectTypes.Unsigned, + int => ObjectTypes.Int, + uint => ObjectTypes.Int | ObjectTypes.Unsigned, + long => ObjectTypes.Long, + ulong => ObjectTypes.Long | ObjectTypes.Unsigned, + float => ObjectTypes.Float, + double => ObjectTypes.Double, + decimal => ObjectTypes.Decimal, + string => ObjectTypes.String, + byte[] => ObjectTypes.Bytes, + Stream => ObjectTypes.Stream, + Type => ObjectTypes.ClrType, + IStreamSerializer => ObjectTypes.Serializable, + _ => ObjectTypes.Null + }; + if (objType == ObjectTypes.Null) + if (type.IsArray) + { + objType = ObjectTypes.Array; + } + else if (typeof(IList).IsAssignableFrom(type)) + { + objType = ObjectTypes.List; + } + else if (typeof(IDictionary).IsAssignableFrom(type)) + { + objType = ObjectTypes.Dict; + } + else if (type.IsValueType && !type.IsEnum) + { + objType = ObjectTypes.Struct; + } + else + { + objType = ObjectTypes.Object; + } + bool writeType = false, + writeObject = true; + switch (objType.RemoveFlags()) + { + case ObjectTypes.Bool: + if (!(bool)obj) objType |= ObjectTypes.False; + writeObject = false; + break; + case ObjectTypes.Byte: + case ObjectTypes.Short: + case ObjectTypes.Int: + case ObjectTypes.Long: + case ObjectTypes.Float: + case ObjectTypes.Double: + case ObjectTypes.Decimal: + if (Activator.CreateInstance(type)!.Equals(obj)) + { + objType |= ObjectTypes.Zero; + writeObject = false; + } + break; + case ObjectTypes.String: + if (((string)obj).Length == 0) + { + objType |= ObjectTypes.Empty; + writeObject = false; + } + break; + case ObjectTypes.Array: + if (((Array)obj).Length == 0) + { + objType |= ObjectTypes.Empty; + writeObject = false; + } + writeType = true; + break; + case ObjectTypes.List: + if (((IList)obj).Count == 0) + { + objType |= ObjectTypes.Empty; + writeObject = false; + } + writeType = true; + break; + case ObjectTypes.Dict: + if (((IDictionary)obj).Count == 0) + { + objType |= ObjectTypes.Empty; + writeObject = false; + } + writeType = true; + break; + case ObjectTypes.Object: + case ObjectTypes.Struct: + case ObjectTypes.Serializable: + writeType = true; + break; + case ObjectTypes.ClrType: + break; + case ObjectTypes.Bytes: + if (((byte[])obj).Length == 0) + { + objType |= ObjectTypes.Empty; + writeObject = false; + } + break; + case ObjectTypes.Stream: + Stream stream = (Stream)obj; + if (stream.CanSeek && stream.Length == 0) + { + objType |= ObjectTypes.Empty; + writeObject = false; + } + break; + default: + throw new InvalidProgramException(); + } + return (type, objType, writeType, writeObject); + } + + /// + /// Ensure a correct object type, based on additional serializer options for a property + /// + /// Object type + /// Property + /// Object type + public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, PropertyInfoExt pi) + => pi.GetCustomAttributeCached() is StreamSerializerAttribute attr + ? EnsureCorrectObjectType(objType, attr) + : objType; + + /// + /// Ensure a correct object type, based on additional serializer options + /// + /// Object type + /// Options + /// Object type + public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, ISerializerOptions options) + { + switch (objType) + { + case ObjectTypes.String: + if (options.Serializer != null) + switch (options.Serializer.Value) + { + case SerializerTypes.String16: + objType = ObjectTypes.String16; + break; + case SerializerTypes.String32: + objType = ObjectTypes.String32; + break; + } + break; + } + return objType; + } + + /// + /// Ensure a correct object type, based on additional serializer options + /// + /// Object type + /// Attribute + /// Object type + public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, StreamSerializerAttribute attr) + { + switch (objType) + { + case ObjectTypes.String: + if (attr.Serializer != null) + switch (attr.Serializer.Value) + { + case SerializerTypes.String16: + objType = ObjectTypes.String16; + break; + case SerializerTypes.String32: + objType = ObjectTypes.String32; + break; + } + break; + } + return objType; + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.Reflection.cs b/src/Stream-Serializer-Extensions/SerializerHelper.Reflection.cs new file mode 100644 index 0000000..1bd38df --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerHelper.Reflection.cs @@ -0,0 +1,61 @@ +using System.Reflection; +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Reflection + public static partial class SerializerHelper + { + /// + /// Get the serializer options + /// + /// Property + /// Context + /// Serializer options + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ISerializerOptions? GetSerializerOptions(this PropertyInfoExt pi, ISerializerContext context) + => pi.GetCustomAttributeCached()?.GetSerializerOptions(pi, context); + + /// + /// Get the key serializer options + /// + /// Property + /// Context + /// Serializer options + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ISerializerOptions? GetKeySerializerOptions(this PropertyInfoExt pi, ISerializerContext context) + => pi.GetCustomAttributeCached()?.GetKeySerializerOptions(pi, context); + + /// + /// Get the value serializer options + /// + /// Property + /// Context + /// Serializer options + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ISerializerOptions? GetValueSerializerOptions(this PropertyInfoExt pi, ISerializerContext context) + => pi.GetCustomAttributeCached()?.GetValueSerializerOptions(pi, context); + + /// + /// Determine if the constructor is the serializer constructor + /// + /// Constructor + /// Require the ? + /// Is the serializer constructor? + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsSerializerConstructor(this ConstructorInfo ci, bool requireAttribute = false) + { + ParameterInfo[] pis = ci.GetParametersCached(); + return pis.Select(p => p.ParameterType).ContainsAll(typeof(Stream), typeof(int)) && + pis[0].ParameterType == typeof(Stream) && + pis[1].ParameterType == typeof(int) && + (!requireAttribute || ci.GetCustomAttributeCached() is not null); + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.SerializerTypes.cs b/src/Stream-Serializer-Extensions/SerializerHelper.SerializerTypes.cs new file mode 100644 index 0000000..2b1b676 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerHelper.SerializerTypes.cs @@ -0,0 +1,79 @@ +using System.Collections; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // SerializerTypes + public static partial class SerializerHelper + { + /// + /// Get item serialization informations from a type + /// + /// Item type + /// Object type + /// Is an asynchronous context? + /// Serializer type, synchronous serializer and asynchronous serializer + public static (SerializerTypes Type, StreamSerializer.Serializer_Delegate? Serializer, StreamSerializer.AsyncSerializer_Delegate? AsyncSerializer) GetItemSerializerInfo( + this Type type, + ObjectTypes objType, + bool isAsync + ) + { + if (objType.IsEmpty()) return (SerializerTypes.Any, null, null); + int thc = type.GetHashCode(); + if (type.IsAbstract || type.IsInterface || thc == typeof(object).GetHashCode()) return (SerializerTypes.Any, null, null); + if (thc == typeof(bool).GetHashCode()) return (SerializerTypes.Bool, null, null); + if (type.IsNumeric()) return (SerializerTypes.Number, null, null); + if (type.IsEnum) return (SerializerTypes.Enum, null, null); + if (thc == typeof(string).GetHashCode()) return (SerializerTypes.String, null, null); + if (thc == typeof(byte[]).GetHashCode()) return (SerializerTypes.Bytes, null, null); + if (thc == typeof(Type).GetHashCode()) return (SerializerTypes.Type, null, null); + if (type.IsArray) return (SerializerTypes.Array, null, null); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + (StreamSerializer.Serializer_Delegate? syncSerializer, StreamSerializer.AsyncSerializer_Delegate? asyncSerializer) = FindSerializer(type); + if (syncSerializer != null || (isAsync && asyncSerializer != null)) return (SerializerTypes.Serializer, syncSerializer, asyncSerializer); + if (typeof(Stream).IsAssignableFrom(type)) return (SerializerTypes.Stream, null, null); + if (typeof(IDictionary).IsAssignableFrom(type)) return (SerializerTypes.Dictionary, null, null); + if (typeof(IList).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + if (type.IsValueType) return (SerializerTypes.Struct, null, null); + return (SerializerTypes.AnyObject, null, null); + } + + /// + /// Get item deserialization informations from a type + /// + /// Item type + /// Object type + /// Is an asynchronous context? + /// Serializer type, synchronous deserializer and asynchronous deserializer + public static ( + SerializerTypes Type, + StreamSerializer.Deserializer_Delegate? Deserializer, + StreamSerializer.AsyncDeserializer_Delegate? AsyncDeserializer + ) GetItemDeserializerInfo( + this Type type, + ObjectTypes objType, + bool isAsync + ) + { + if (objType.IsEmpty()) return (SerializerTypes.Any, null, null); + int thc = type.GetHashCode(); + if (type.IsAbstract || type.IsInterface || thc == typeof(object).GetHashCode()) return (SerializerTypes.Any, null, null); + if (thc == typeof(bool).GetHashCode()) return (SerializerTypes.Bool, null, null); + if (type.IsNumeric()) return (SerializerTypes.Number, null, null); + if (type.IsEnum) return (SerializerTypes.Enum, null, null); + if (thc == typeof(string).GetHashCode()) return (SerializerTypes.String, null, null); + if (thc == typeof(byte[]).GetHashCode()) return (SerializerTypes.Bytes, null, null); + if (thc == typeof(Type).GetHashCode()) return (SerializerTypes.Type, null, null); + if (type.IsArray) return (SerializerTypes.Array, null, null); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + (StreamSerializer.Deserializer_Delegate? syncDeserializer, StreamSerializer.AsyncDeserializer_Delegate? asyncDeserializer) = FindDeserializer(type); + if (syncDeserializer != null || (isAsync && asyncDeserializer != null)) return (SerializerTypes.Serializer, syncDeserializer, asyncDeserializer); + if (typeof(Stream).IsAssignableFrom(type)) return (SerializerTypes.Stream, null, null); + if (typeof(IDictionary).IsAssignableFrom(type)) return (SerializerTypes.Dictionary, null, null); + if (typeof(IList).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); + if (type.IsValueType) return (SerializerTypes.Struct, null, null); + return (SerializerTypes.AnyObject, null, null); + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.Type.cs b/src/Stream-Serializer-Extensions/SerializerHelper.Type.cs new file mode 100644 index 0000000..0c7b0b3 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerHelper.Type.cs @@ -0,0 +1,58 @@ +namespace wan24.StreamSerializerExtensions +{ + // Type + public static partial class SerializerHelper + { + /// + /// Find type serializers + /// + /// Type + /// Synchronous and asynchronous serializers + public static (StreamSerializer.Serializer_Delegate? Serializer, StreamSerializer.AsyncSerializer_Delegate? AsyncSerializer) FindSerializer(this Type type) + => (StreamSerializer.FindSerializer(type), StreamSerializer.FindAsyncSerializer(type)); + + /// + /// Find type deserializers + /// + /// Type + /// Synchronous and asynchronous deserializers + public static (StreamSerializer.Deserializer_Delegate? Deserializer, StreamSerializer.AsyncDeserializer_Delegate? AsyncDeserializer) FindDeserializer(this Type type) + => (StreamSerializer.FindDeserializer(type), StreamSerializer.FindAsyncDeserializer(type)); + + /// + /// Get the object type of a type + /// + /// Type + /// Object type + public static ObjectTypes GetObjectType(this Type type) + { + ObjectTypes objType; + int thc = type.GetHashCode(); + if (thc == typeof(bool).GetHashCode()) objType = ObjectTypes.Bool; + else if (thc == typeof(sbyte).GetHashCode()) objType = ObjectTypes.Byte; + else if (thc == typeof(byte).GetHashCode()) objType = ObjectTypes.Byte | ObjectTypes.Unsigned; + else if (thc == typeof(short).GetHashCode()) objType = ObjectTypes.Short; + else if (thc == typeof(ushort).GetHashCode()) objType = ObjectTypes.Short | ObjectTypes.Unsigned; + else if (thc == typeof(int).GetHashCode()) objType = ObjectTypes.Int; + else if (thc == typeof(uint).GetHashCode()) objType = ObjectTypes.Int | ObjectTypes.Unsigned; + else if (thc == typeof(long).GetHashCode()) objType = ObjectTypes.Long; + else if (thc == typeof(ulong).GetHashCode()) objType = ObjectTypes.Long | ObjectTypes.Unsigned; + else if (thc == typeof(float).GetHashCode()) objType = ObjectTypes.Float; + else if (thc == typeof(double).GetHashCode()) objType = ObjectTypes.Double; + else if (thc == typeof(decimal).GetHashCode()) objType = ObjectTypes.Decimal; + else if (thc == typeof(byte[]).GetHashCode()) objType = ObjectTypes.Bytes; + else if (thc == typeof(string).GetHashCode()) objType = ObjectTypes.String; + else if (typeof(IStreamSerializer).IsAssignableFrom(type)) + objType = StreamSerializer.TypeCacheEnabled ? ObjectTypes.Serializable | ObjectTypes.CachedSerializable : ObjectTypes.Serializable; + else if (thc == typeof(Stream).GetHashCode()) objType = ObjectTypes.Stream; + else if (thc == typeof(Type).GetHashCode()) objType = ObjectTypes.ClrType; + else if (type.IsArray) objType = type.GetArrayRank() == 1 ? ObjectTypes.Array | ObjectTypes.NoRank : ObjectTypes.Array; + else if (type.IsGenericType && typeof(Dictionary<,>).IsAssignableFrom(type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition())) objType = ObjectTypes.Dict; + else if (type.IsGenericType && typeof(List<>).IsAssignableFrom(type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition())) objType = ObjectTypes.List; + else if (type.IsValueType) objType = ObjectTypes.Struct; + else objType = ObjectTypes.Object; + if (type.IsGenericType) objType |= ObjectTypes.Generic; + return objType; + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index db0cc15..19fb305 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -1,10 +1,6 @@ -using System.Collections; -using System.ComponentModel.DataAnnotations; -using System.Diagnostics; -using System.Reflection; +using System.ComponentModel.DataAnnotations; using System.Runtime; using System.Runtime.CompilerServices; -using wan24.Core; using wan24.ObjectValidation; //TODO Write/read enumerables @@ -14,598 +10,8 @@ namespace wan24.StreamSerializerExtensions /// /// Helper /// - public static class SerializerHelper + public static partial class SerializerHelper { - /// - /// Remove flags - /// - /// Type - /// Type without flags - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static NumberTypes RemoveFlags(this NumberTypes type) => type & ~NumberTypes.FLAGS; - - /// - /// Remove value flags - /// - /// Type - /// Type without value flags - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static NumberTypes RemoveValueFlags(this NumberTypes type) => type & ~NumberTypes.VALUE_FLAGS; - - /// - /// Is unsigned? - /// - /// Type - /// Unsigned? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsUnsigned(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.Unsigned); - - /// - /// Is min. value? - /// - /// Type - /// Min.value? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsMinValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MinValue); - - /// - /// Is max. value? - /// - /// Type - /// Max. value? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsMaxValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MaxValue); - - /// - /// Is zero? - /// - /// Type - /// Zero? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsZero(this NumberTypes type) => type == NumberTypes.Zero; - - /// - /// Determine if the number type has value flags - /// - /// Type - /// Has value flags? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool HasValueFlags(this NumberTypes type) => (type & NumberTypes.VALUE_FLAGS) != 0; - - /// - /// Remove flags - /// - /// Type - /// Type without flags - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ObjectTypes RemoveFlags(this ObjectTypes type) => type & ~ObjectTypes.FLAGS; - - /// - /// Is empty? - /// - /// Type - /// Empty? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsEmpty(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Empty); - - /// - /// Is unsigned? - /// - /// Type - /// Unsigned? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsUnsigned(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Unsigned); - - /// - /// Is cached? - /// - /// Type - /// Cached? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsCached(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Cached); - - /// - /// Is generic? - /// - /// Type - /// Generic? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsGeneric(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Generic); - - /// - /// Is an array? - /// - /// Type - /// An array? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsArray(this ObjectTypes type) => type.RemoveFlags() == ObjectTypes.Array; - - /// - /// Is not ranked? - /// - /// Type - /// Not ranked? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsNotRanked(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.NoRank); - - /// - /// Is a cached serializable type? - /// - /// Type - /// Is cached serializable? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsCachedSerializable(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.CachedSerializable); - - /// - /// Is a basic type info? - /// - /// Type - /// Is a basic type info? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsBasicTypeInfo(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.BasicTypeInfo); - - /// - /// Is a number? - /// - /// Type - /// A number? - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static bool IsNumber(this ObjectTypes type) => type.RemoveFlags() switch - { - ObjectTypes.Byte => true, - ObjectTypes.Short => true, - ObjectTypes.Int => true, - ObjectTypes.Long => true, - ObjectTypes.Float => true, - ObjectTypes.Double => true, - ObjectTypes.Decimal => true, - _ => false - }; - - /// - /// Determine if a type name is required - /// - /// Type - /// Is required? - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static bool RequiresTypeName(this ObjectTypes type) => type.RemoveFlags() switch - { - ObjectTypes.Array => true, - ObjectTypes.List => true, - ObjectTypes.Dict => true, - ObjectTypes.Object => true, - ObjectTypes.Serializable => true, - _ => false - }; - - /// - /// Does the type require to write the serialized object? - /// - /// Type - /// Is required? - [TargetedPatchingOptOut("Tiny method")] -#if !NO_INLINE - [MethodImpl(MethodImplOptions.AggressiveInlining)] -#endif - public static bool RequiresObjectWriting(this ObjectTypes type) => type switch - { - ObjectTypes.Null => false, - ObjectTypes.Bool => false, - ObjectTypes.Cached => false, - _ => !type.ContainsAnyFlag(ObjectTypes.Bool, ObjectTypes.Empty) - }; - - /// - /// Get the type of a number - /// - /// Number type - /// Number - /// Use the flags? - /// Number type - public static NumberTypes GetNumberType(this T number, bool useFlags = true) - => number switch - { - sbyte sb => useFlags - ? sb switch - { - 0 => NumberTypes.Zero, - sbyte.MinValue => NumberTypes.Byte | NumberTypes.MinValue, - sbyte.MaxValue => NumberTypes.Byte | NumberTypes.MaxValue, - _ => NumberTypes.Byte - } - : NumberTypes.Byte, - byte b => useFlags - ? b switch - { - 0 => NumberTypes.Zero, - byte.MaxValue => NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned, - _ => NumberTypes.Byte | NumberTypes.Unsigned - } - : NumberTypes.Byte | NumberTypes.Unsigned, - short s => useFlags - ? s switch - { - 0 => NumberTypes.Zero, - short.MinValue => NumberTypes.Short | NumberTypes.MinValue, - short.MaxValue => NumberTypes.Short | NumberTypes.MaxValue, - _ => NumberTypes.Short - } - : NumberTypes.Short, - ushort us => useFlags - ? us switch - { - 0 => NumberTypes.Zero, - ushort.MaxValue => NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned, - _ => NumberTypes.Short | NumberTypes.Unsigned - } - : NumberTypes.Short | NumberTypes.Unsigned, - int i => useFlags - ? i switch - { - 0 => NumberTypes.Zero, - int.MinValue => NumberTypes.Int | NumberTypes.MinValue, - int.MaxValue => NumberTypes.Int | NumberTypes.MaxValue, - _ => NumberTypes.Int - } - : NumberTypes.Int, - uint ui => useFlags - ? ui switch - { - 0 => NumberTypes.Zero, - uint.MaxValue => NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned, - _ => NumberTypes.Int | NumberTypes.Unsigned - } - : NumberTypes.Int | NumberTypes.Unsigned, - long l => useFlags - ? l switch - { - 0 => NumberTypes.Zero, - long.MinValue => NumberTypes.Long | NumberTypes.MinValue, - long.MaxValue => NumberTypes.Long | NumberTypes.MaxValue, - _ => NumberTypes.Long - } - : NumberTypes.Long, - ulong ul => useFlags - ? ul switch - { - 0 => NumberTypes.Zero, - ulong.MaxValue => NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned, - _ => NumberTypes.Long | NumberTypes.Unsigned - } - : NumberTypes.Long | NumberTypes.Unsigned, - float f => useFlags - ? f switch - { - 0 => NumberTypes.Zero, - float.MinValue => NumberTypes.Float | NumberTypes.MinValue, - float.MaxValue => NumberTypes.Float | NumberTypes.MaxValue, - _ => NumberTypes.Float - } - : NumberTypes.Float, - double d => useFlags - ? d switch - { - 0 => NumberTypes.Zero, - double.MinValue => NumberTypes.Double | NumberTypes.MinValue, - double.MaxValue => NumberTypes.Double | NumberTypes.MaxValue, - _ => NumberTypes.Double - } - : NumberTypes.Double, - decimal m => useFlags - ? m switch - { - 0 => NumberTypes.Zero, - decimal.MinValue => NumberTypes.Decimal | NumberTypes.MinValue, - decimal.MaxValue => NumberTypes.Decimal | NumberTypes.MaxValue, - _ => NumberTypes.Decimal - } - : NumberTypes.Decimal, - _ => NumberTypes.None - }; - - /// - /// Get the best matching number type - /// - /// Number type - /// Number - /// Number and type - public static (object Number, NumberTypes Type) GetNumberAndType(this T number) - { - ArgumentValidationHelper.EnsureValidArgument(nameof(number), number); -#if DEBUG - Debug.Assert(number != null); -#endif - NumberTypes origin = GetNumberType(number), - type; - ArgumentValidationHelper.EnsureValidArgument(nameof(number), origin != NumberTypes.None, () => "Not a supported numeric type"); - if (origin.IsZero() || origin.IsMinValue() || origin.IsMaxValue()) return (0, origin); - object num; - switch (origin.RemoveFlags()) - { - case NumberTypes.Float: - num = number; - type = NumberTypes.Float; - break; - case NumberTypes.Double: - { - double value = number.ConvertType(); - if (double.IsNaN(value) || double.IsInfinity(value) || double.IsSubnormal(value) || value < float.MinValue || value > float.MaxValue) - { - num = value; - type = NumberTypes.Double; - } - else - { - num = (float)value; - type = NumberTypes.Float; - } - } - break; - case NumberTypes.Decimal: - num = number; - type = NumberTypes.Decimal; - break; - default: - if (origin.IsUnsigned()) - { - ulong value = number.ConvertType(); - if (value > long.MaxValue) - { - num = value; - type = NumberTypes.Long | NumberTypes.Unsigned; - } - else if (value > uint.MaxValue) - { - num = (long)value; - type = NumberTypes.Long; - } - else if (value > int.MaxValue) - { - num = (uint)value; - type = NumberTypes.Int | NumberTypes.Unsigned; - } - else if (value > ushort.MaxValue) - { - num = (int)value; - type = NumberTypes.Int; - } - else if ((int)value > short.MaxValue) - { - num = (ushort)value; - type = NumberTypes.Short | NumberTypes.Unsigned; - } - else if (value > byte.MaxValue) - { - num = (short)value; - type = NumberTypes.Short; - } - else - { - num = (byte)value; - type = NumberTypes.Byte | NumberTypes.Unsigned; - } - } - else - { - long value = number.ConvertType(); - if (value < 0) - { - if (value < int.MinValue) - { - num = value; - type = NumberTypes.Long; - } - else if (value < short.MinValue) - { - num = (int)value; - type = NumberTypes.Int; - } - else if (value < sbyte.MinValue) - { - num = (short)value; - type = NumberTypes.Short; - } - else - { - num = (sbyte)value; - type = NumberTypes.Byte; - } - } - else - { - if (value > uint.MaxValue) - { - num = value; - type = NumberTypes.Long; - } - else if (value > int.MaxValue) - { - num = (uint)value; - type = NumberTypes.Int | NumberTypes.Unsigned; - } - else if (value > ushort.MaxValue) - { - num = (int)value; - type = NumberTypes.Int; - } - else if ((int)value > short.MaxValue) - { - num = (ushort)value; - type = NumberTypes.Short | NumberTypes.Unsigned; - } - else if (value > byte.MaxValue) - { - num = (short)value; - type = NumberTypes.Short; - } - else - { - num = (byte)value; - type = NumberTypes.Byte | NumberTypes.Unsigned; - } - } - } - break; - } - return (num, type); - } - - /// - /// Get object serializer informations - /// - /// Object - /// Informations - public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObject) GetObjectSerializerInfo(this object obj) - { - ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj); -#if DEBUG - Debug.Assert(obj != null); -#endif - Type type = obj.GetType(); - ObjectTypes objType = obj switch - { - bool => ObjectTypes.Bool, - sbyte => ObjectTypes.Byte, - byte => ObjectTypes.Byte | ObjectTypes.Unsigned, - short => ObjectTypes.Short, - ushort => ObjectTypes.Short | ObjectTypes.Unsigned, - int => ObjectTypes.Int, - uint => ObjectTypes.Int | ObjectTypes.Unsigned, - long => ObjectTypes.Long, - ulong => ObjectTypes.Long | ObjectTypes.Unsigned, - float => ObjectTypes.Float, - double => ObjectTypes.Double, - decimal => ObjectTypes.Decimal, - string => ObjectTypes.String, - byte[] => ObjectTypes.Bytes, - Stream => ObjectTypes.Stream, - Type => ObjectTypes.ClrType, - IStreamSerializer => ObjectTypes.Serializable, - _ => ObjectTypes.Null - }; - if (objType == ObjectTypes.Null) - if (type.IsArray) - { - objType = ObjectTypes.Array; - } - else if (typeof(IList).IsAssignableFrom(type)) - { - objType = ObjectTypes.List; - } - else if (typeof(IDictionary).IsAssignableFrom(type)) - { - objType = ObjectTypes.Dict; - } - else if (type.IsValueType && !type.IsEnum) - { - objType = ObjectTypes.Struct; - } - else - { - objType = ObjectTypes.Object; - } - bool writeType = false, - writeObject = true; - switch (objType.RemoveFlags()) - { - case ObjectTypes.Bool: - if (!(bool)obj) objType |= ObjectTypes.Empty; - writeObject = false; - break; - case ObjectTypes.Byte: - case ObjectTypes.Short: - case ObjectTypes.Int: - case ObjectTypes.Long: - case ObjectTypes.Float: - case ObjectTypes.Double: - case ObjectTypes.Decimal: - if (Activator.CreateInstance(type)!.Equals(obj)) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - break; - case ObjectTypes.String: - if (((string)obj).Length == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - break; - case ObjectTypes.Array: - if (((Array)obj).Length == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - writeType = true; - break; - case ObjectTypes.List: - if (((IList)obj).Count == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - writeType = true; - break; - case ObjectTypes.Dict: - if (((IDictionary)obj).Count == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - writeType = true; - break; - case ObjectTypes.Object: - case ObjectTypes.Struct: - case ObjectTypes.Serializable: - writeType = true; - break; - case ObjectTypes.ClrType: - break; - case ObjectTypes.Bytes: - if (((byte[])obj).Length == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - break; - case ObjectTypes.Stream: - Stream stream = (Stream)obj; - if (stream.CanSeek && stream.Length == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - break; - default: - throw new InvalidProgramException(); - } - return (type, objType, writeType, writeObject); - } - /// /// Ensure a non-null value /// @@ -682,8 +88,9 @@ public static T ValidateDeserializedObject(this T value) where T : notnull public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerVersion = true) { using MemoryStream ms = new(); - if (includeSerializerVersion) ms.WriteSerializerVersion(); - ms.WriteSerialized(obj); + using SerializerContext context = new(ms); + if (includeSerializerVersion) ms.WriteSerializerVersion(context); + ms.WriteSerialized(obj, context); return ms.ToArray(); } @@ -701,247 +108,10 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV public static T ToObject(this byte[] bytes, bool includesSerializerVersion = true) where T : class, IStreamSerializer, new() { using MemoryStream ms = new(bytes); - return ms.ReadSerialized(includesSerializerVersion ? ms.ReadSerializerVersion() : StreamSerializer.Version); - } - - /// - /// Get the serializer options - /// - /// Property - /// Stream - /// Serializer version - /// Cancellation token - /// Serializer options - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ISerializerOptions? GetSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken) - => pi.GetCustomAttributeCached()?.GetSerializerOptions(pi, stream, version, cancellationToken); - - /// - /// Get the key serializer options - /// - /// Property - /// Stream - /// Serializer version - /// Cancellation token - /// Serializer options - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ISerializerOptions? GetKeySerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken) - => pi.GetCustomAttributeCached()?.GetKeySerializerOptions(pi, stream, version, cancellationToken); - - /// - /// Get the value serializer options - /// - /// Property - /// Stream - /// Serializer version - /// Cancellation token - /// Serializer options - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ISerializerOptions? GetValueSerializerOptions(this PropertyInfoExt pi, Stream stream, int version, CancellationToken cancellationToken) - => pi.GetCustomAttributeCached()?.GetValueSerializerOptions(pi, stream, version, cancellationToken); - - /// - /// Determine if the constructor is the serializer constructor - /// - /// Constructor - /// Require the ? - /// Is the serializer constructor? - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsSerializerConstructor(this ConstructorInfo ci, bool requireAttribute = false) - { - ParameterInfo[] pis = ci.GetParametersCached(); - return pis.Select(p => p.ParameterType).ContainsAll(typeof(Stream), typeof(int)) && - pis[0].ParameterType == typeof(Stream) && - pis[1].ParameterType == typeof(int) && - (!requireAttribute || ci.GetCustomAttributeCached() is not null); - } - - /// - /// Get item serialization informations from a type - /// - /// Item type - /// Is an asynchronous context? - /// Serializer type, synchronous serializer and asynchronous serializer - public static (SerializerTypes Type, StreamSerializer.Serialize_Delegate? Serializer, StreamSerializer.AsyncSerialize_Delegate? AsyncSerializer) GetItemSerializerInfo( - this Type type, - bool isAsync - ) - { - int thc = type.GetHashCode(); - if (type.IsAbstract || type.IsInterface || thc == typeof(object).GetHashCode()) return (SerializerTypes.Any, null, null); - if (thc == typeof(bool).GetHashCode()) return (SerializerTypes.Bool, null, null); - if (type.IsNumeric()) return (SerializerTypes.Number, null, null); - if (type.IsEnum) return (SerializerTypes.Enum, null, null); - if (thc == typeof(string).GetHashCode()) return (SerializerTypes.String, null, null); - if (thc == typeof(byte[]).GetHashCode()) return (SerializerTypes.Bytes, null, null); - if (type.IsArray) return (SerializerTypes.Array, null, null); - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); - (StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = FindSerializer(type); - if (syncSerializer != null || (isAsync && asyncSerializer != null)) return (SerializerTypes.Serializer, syncSerializer, asyncSerializer); - if (typeof(Stream).IsAssignableFrom(type)) return (SerializerTypes.Stream, null, null); - if (typeof(IDictionary).IsAssignableFrom(type)) return (SerializerTypes.Dictionary, null, null); - if (typeof(IList).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); - if (type.IsValueType) return (SerializerTypes.Struct, null, null); - return (SerializerTypes.AnyObject, null, null); - } - - /// - /// Get item deserialization informations from a type - /// - /// Item type - /// Is an asynchronous context? - /// Serializer type, synchronous deserializer and asynchronous deserializer - public static ( - SerializerTypes Type, - StreamSerializer.Deserialize_Delegate? Deserializer, - StreamSerializer.AsyncDeserialize_Delegate? AsyncDeserializer - ) GetItemDeserializerInfo( - this Type type, - bool isAsync - ) - { - int thc = type.GetHashCode(); - if (type.IsAbstract || type.IsInterface || thc == typeof(object).GetHashCode()) return (SerializerTypes.Any, null, null); - if (thc == typeof(bool).GetHashCode()) return (SerializerTypes.Bool, null, null); - if (type.IsNumeric()) return (SerializerTypes.Number, null, null); - if (type.IsEnum) return (SerializerTypes.Enum, null, null); - if (thc == typeof(string).GetHashCode()) return (SerializerTypes.String, null, null); - if (thc == typeof(byte[]).GetHashCode()) return (SerializerTypes.Bytes, null, null); - if (type.IsArray) return (SerializerTypes.Array, null, null); - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); - (StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = FindDeserializer(type); - if (syncDeserializer != null || (isAsync && asyncDeserializer != null)) return (SerializerTypes.Serializer, syncDeserializer, asyncDeserializer); - if (typeof(Stream).IsAssignableFrom(type)) return (SerializerTypes.Stream, null, null); - if (typeof(IDictionary).IsAssignableFrom(type)) return (SerializerTypes.Dictionary, null, null); - if (typeof(IList).IsAssignableFrom(type)) return (SerializerTypes.List, null, null); - if (type.IsValueType) return (SerializerTypes.Struct, null, null); - return (SerializerTypes.AnyObject, null, null); - } - - /// - /// Find type serializers - /// - /// Type - /// Synchronous and asynchronous serializers - public static (StreamSerializer.Serialize_Delegate? Serializer, StreamSerializer.AsyncSerialize_Delegate? AsyncSerializer) FindSerializer(this Type type) - => (StreamSerializer.FindSerializer(type), StreamSerializer.FindAsyncSerializer(type)); - - /// - /// Find type deserializers - /// - /// Type - /// Synchronous and asynchronous deserializers - public static (StreamSerializer.Deserialize_Delegate? Deserializer, StreamSerializer.AsyncDeserialize_Delegate? AsyncDeserializer) FindDeserializer(this Type type) - => (StreamSerializer.FindDeserializer(type), StreamSerializer.FindAsyncDeserializer(type)); - - /// - /// Ensure a correct object type, based on additional serializer options for a property - /// - /// Object type - /// Property - /// Object type - public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, PropertyInfoExt pi) - => pi.GetCustomAttributeCached() is StreamSerializerAttribute attr - ? EnsureCorrectObjectType(objType, attr) - : objType; - - /// - /// Ensure a correct object type, based on additional serializer options - /// - /// Object type - /// Options - /// Object type - public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, ISerializerOptions options) - { - switch (objType) - { - case ObjectTypes.String: - if(options.Serializer!=null) - switch (options.Serializer.Value) - { - case SerializerTypes.String16: - objType = ObjectTypes.String16; - break; - case SerializerTypes.String32: - objType = ObjectTypes.String32; - break; - } - break; - } - return objType; - } - - /// - /// Ensure a correct object type, based on additional serializer options - /// - /// Object type - /// Attribute - /// Object type - public static ObjectTypes EnsureCorrectObjectType(this ObjectTypes objType, StreamSerializerAttribute attr) - { - switch (objType) - { - case ObjectTypes.String: - if (attr.Serializer != null) - switch (attr.Serializer.Value) - { - case SerializerTypes.String16: - objType = ObjectTypes.String16; - break; - case SerializerTypes.String32: - objType = ObjectTypes.String32; - break; - } - break; - } - return objType; - } - - /// - /// Get the object type of a type - /// - /// Type - /// Object type - public static ObjectTypes GetObjectType(this Type type) - { - ObjectTypes objType; - int thc = type.GetHashCode(); - if (thc == typeof(bool).GetHashCode()) objType = ObjectTypes.Bool; - else if (thc == typeof(sbyte).GetHashCode()) objType = ObjectTypes.Byte; - else if (thc == typeof(byte).GetHashCode()) objType = ObjectTypes.Byte | ObjectTypes.Unsigned; - else if (thc == typeof(short).GetHashCode()) objType = ObjectTypes.Short; - else if (thc == typeof(ushort).GetHashCode()) objType = ObjectTypes.Short | ObjectTypes.Unsigned; - else if (thc == typeof(int).GetHashCode()) objType = ObjectTypes.Int; - else if (thc == typeof(uint).GetHashCode()) objType = ObjectTypes.Int | ObjectTypes.Unsigned; - else if (thc == typeof(long).GetHashCode()) objType = ObjectTypes.Long; - else if (thc == typeof(ulong).GetHashCode()) objType = ObjectTypes.Long | ObjectTypes.Unsigned; - else if (thc == typeof(float).GetHashCode()) objType = ObjectTypes.Float; - else if (thc == typeof(double).GetHashCode()) objType = ObjectTypes.Double; - else if (thc == typeof(decimal).GetHashCode()) objType = ObjectTypes.Decimal; - else if (thc == typeof(byte[]).GetHashCode()) objType = ObjectTypes.Bytes; - else if (thc == typeof(string).GetHashCode()) objType = ObjectTypes.String; - else if (typeof(IStreamSerializer).IsAssignableFrom(type)) - { - objType = ObjectTypes.Serializable; - if (StreamSerializer.TypeCacheEnabled) objType |= ObjectTypes.CachedSerializable; - } - else if (thc == typeof(Stream).GetHashCode()) objType = ObjectTypes.Stream; - else if (thc == typeof(Type).GetHashCode()) objType = ObjectTypes.ClrType; - else if (type.IsArray) - { - objType = ObjectTypes.Array; - if (type.GetArrayRank() == 1) objType |= ObjectTypes.NoRank; - } - else if (type.IsGenericType && typeof(Dictionary<,>).IsAssignableFrom(type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition())) objType = ObjectTypes.Dict; - else if (type.IsGenericType && typeof(List<>).IsAssignableFrom(type.IsGenericTypeDefinition ? type : type.GetGenericTypeDefinition())) objType = ObjectTypes.List; - else if (type.IsValueType) objType = ObjectTypes.Struct; - else objType = ObjectTypes.Object; - if (type.IsGenericType) objType |= ObjectTypes.Generic; - return objType; + using DeserializerContext context = new(ms); + int version = includesSerializerVersion ? ms.ReadSerializerVersion(context) : StreamSerializer.Version; + using DeserializerContext objContext = includesSerializerVersion && version != StreamSerializer.Version ? new(ms, version) : context; + return ms.ReadSerialized(context); } } } diff --git a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs index 9bbba91..28c0ca3 100644 --- a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs +++ b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs @@ -19,7 +19,9 @@ protected SerializerOptionsBase(PropertyInfoExt? property, StreamSerializerAttri Property = property; Attribute = attr ?? property?.Property.GetCustomAttributeCached() ?? - throw (property == null ? new ArgumentNullException(nameof(attr)) : new ArgumentException($"{typeof(StreamSerializerAttribute)} attribute required", nameof(property))); + throw (property == null + ? new ArgumentNullException(nameof(attr)) + : new ArgumentException($"{typeof(StreamSerializerAttribute)} attribute required", nameof(property))); } /// diff --git a/src/Stream-Serializer-Extensions/SerializerTypes.cs b/src/Stream-Serializer-Extensions/SerializerTypes.cs index b687038..a5160c1 100644 --- a/src/Stream-Serializer-Extensions/SerializerTypes.cs +++ b/src/Stream-Serializer-Extensions/SerializerTypes.cs @@ -68,6 +68,10 @@ public enum SerializerTypes /// /// Stream /// - Stream + Stream, + /// + /// CLR type + /// + Type } } diff --git a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj index 57fc492..58f000e 100644 --- a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj +++ b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj @@ -25,6 +25,7 @@ embedded true Debug;Release;Trunk + True diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs index 4e93b96..013695a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; using wan24.StreamSerializerExtensions.Enumerator; @@ -15,13 +14,16 @@ public static partial class StreamExtensions /// Object type /// Enumeratortype /// Stream - /// Serializer version + /// Context /// Enumerable [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static IEnumerable Enumerate(this Stream stream, int? version = null) +#pragma warning disable IDE0060 // Remove unused argument + public static IEnumerable Enumerate(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + where tEnumerator : StreamEnumeratorBase - => StreamEnumeratorBase.Enumerate(stream, version); + => StreamEnumeratorBase.Enumerate(context); /// /// Enumerate serialized objects @@ -29,21 +31,18 @@ public static IEnumerable Enumerate(this Stream s /// Object type /// Enumeratortype /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Enumerable #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async IAsyncEnumerable EnumerateAsync( - this Stream stream, - int? version = null, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) +#pragma warning disable IDE0060 // Remove unused argument + public static async IAsyncEnumerable EnumerateAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument where tEnumerator : StreamAsyncEnumeratorBase { - await foreach (tObject obj in StreamAsyncEnumeratorBase.EnumerateAsync(stream, version, cancellationToken) - .WithCancellation(cancellationToken) + await foreach (tObject obj in StreamAsyncEnumeratorBase.EnumerateAsync(context) + .WithCancellation(context.Cancellation) .ConfigureAwait(continueOnCapturedContext: false) ) yield return obj; @@ -54,30 +53,33 @@ public static async IAsyncEnumerable EnumerateAsync /// Object type /// Stream - /// Version + /// Context /// Enumerable [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static IEnumerable EnumerateSerialized(this Stream stream, int? version = null) +#pragma warning disable IDE0060 // Remove unused argument + public static IEnumerable EnumerateSerialized(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument where T : class, IStreamSerializer - => StreamEnumeratorBase.Enumerate>(stream, version); + => StreamEnumeratorBase.Enumerate>(context); /// /// Enumerate serialized objects /// /// Object type /// Stream - /// Version - /// Cancellation token + /// Context /// Enumerable #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async IAsyncEnumerable EnumerateSerializedAsync(this Stream stream, int? version = null, [EnumeratorCancellation] CancellationToken cancellationToken = default) +#pragma warning disable IDE0060 // Remove unused argument + public static async IAsyncEnumerable EnumerateSerializedAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument where T : class, IStreamSerializer { - await foreach (T obj in StreamAsyncEnumeratorBase.EnumerateAsync>(stream, version, cancellationToken) - .WithCancellation(cancellationToken) + await foreach (T obj in StreamAsyncEnumeratorBase.EnumerateAsync>(context) + .WithCancellation(context.Cancellation) .ConfigureAwait(continueOnCapturedContext: false) ) yield return obj; @@ -88,16 +90,17 @@ public static async IAsyncEnumerable EnumerateSerializedAsync(this Stream /// /// Object type /// Stream - /// Version - /// Array pool + /// Context /// Enumerable #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static IEnumerable EnumerateNumber(this Stream stream, int? version = null, ArrayPool? pool = null) +#pragma warning disable IDE0060 // Remove unused argument + public static IEnumerable EnumerateNumber(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument where T : struct, IConvertible { - using StreamNumberEnumerator enumerator = new(stream, version, pool); + using StreamNumberEnumerator enumerator = new(context); while (enumerator.MoveNext()) yield return enumerator.Current; } @@ -106,24 +109,19 @@ public static IEnumerable EnumerateNumber(this Stream stream, int? version /// /// Object type /// Stream - /// Version - /// Array pool - /// Cancellation token + /// Context /// Enumerable #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async IAsyncEnumerable EnumerateNumberAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) +#pragma warning disable IDE0060 // Remove unused argument + public static async IAsyncEnumerable EnumerateNumberAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument where T : struct, IConvertible { - StreamNumberAsyncEnumerator enumerator = new(stream, version, pool, cancellationToken); + StreamNumberAsyncEnumerator enumerator = new(context); await using (enumerator.DynamicContext()) - while (!cancellationToken.IsCancellationRequested && await enumerator.MoveNextAsync().DynamicContext()) + while (!context.Cancellation.IsCancellationRequested && await enumerator.MoveNextAsync().DynamicContext()) yield return enumerator.Current; } @@ -131,17 +129,18 @@ public static async IAsyncEnumerable EnumerateNumberAsync( /// Enumerate strings /// /// Stream - /// Version - /// Array pool + /// Context /// Minimum UTF-8 string bytes length /// Maximum UTF-8 string bytes length /// Enumerable #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static IEnumerable EnumerateString(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning disable IDE0060 // Remove unused argument + public static IEnumerable EnumerateString(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument { - using StreamStringEnumerator enumerator = new(stream, version, pool, minLen, maxLen); + using StreamStringEnumerator enumerator = new(context, minLen, maxLen); while (enumerator.MoveNext()) yield return enumerator.Current; } @@ -149,27 +148,20 @@ public static IEnumerable EnumerateString(this Stream stream, int? versi /// Enumerate strings /// /// Stream - /// Version - /// Array pool + /// Context /// Minimum UTF-8 string bytes length /// Maximum UTF-8 string bytes length - /// Cancellation token /// Enumerable #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async IAsyncEnumerable EnumerateStringAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) +#pragma warning disable IDE0060 // Remove unused argument + public static async IAsyncEnumerable EnumerateStringAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument { - StreamStringAsyncEnumerator enumerator = new(stream, version, pool, minLen, maxLen, cancellationToken); + StreamStringAsyncEnumerator enumerator = new(context, minLen, maxLen); await using (enumerator.DynamicContext()) - while (!cancellationToken.IsCancellationRequested && await enumerator.MoveNextAsync().DynamicContext()) + while (!context.Cancellation.IsCancellationRequested && await enumerator.MoveNextAsync().DynamicContext()) yield return enumerator.Current; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs index 7384272..9810147 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Any.cs @@ -11,40 +11,37 @@ public static partial class StreamExtensions /// Read any object /// /// Stream - /// Serializer version - /// Options + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions? options = null) - => ReadAnyInt(stream, version, (ObjectTypes)ReadOneByte(stream, version), type: null, options); + public static object ReadAny(this Stream stream, IDeserializationContext context) + => ReadAnyInt(context, (ObjectTypes)ReadOneByte(stream, context), type: null); /// /// Read any object /// - /// Stream - /// Serializer version + /// Context /// Object type /// CLR type - /// Options /// Object [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objType, Type? type, ISerializerOptions? options) + private static object ReadAnyInt(IDeserializationContext context, ObjectTypes objType, Type? type) => SerializerException.Wrap(() => { + using ContextRecursion cr = new(context); if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); - version ??= StreamSerializer.Version; bool isEmpty = objType.IsEmpty(), isUnsigned = objType.IsUnsigned(), - readType = objType.RequiresTypeName(); + readType = objType.RequiresType(); switch (objType.RemoveFlags()) { case ObjectTypes.Bool: return !isEmpty; case ObjectTypes.Byte: - switch (version & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: @@ -54,12 +51,12 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp return isEmpty ? Convert.ChangeType(0, isUnsigned ? typeof(byte) : typeof(sbyte)) : isUnsigned - ? ReadOneByte(stream, version) - : ReadOneSByte(stream, version); + ? ReadOneByte(context.Stream, context) + : ReadOneSByte(context.Stream, context); } break; case ObjectTypes.Short: - switch (version & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: @@ -69,8 +66,8 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp return isEmpty ? Convert.ChangeType(0, isUnsigned ? typeof(ushort) : typeof(short)) : isUnsigned - ? ReadUShort(stream, version) - : ReadShort(stream, version); + ? ReadUShort(context.Stream, context) + : ReadShort(context.Stream, context); } break; case ObjectTypes.Int: @@ -92,37 +89,37 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp return isEmpty ? string.Empty : ReadString( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ); case ObjectTypes.String16: return isEmpty ? string.Empty : ReadString16( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ); case ObjectTypes.String32: return isEmpty ? string.Empty : ReadString32( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ); case ObjectTypes.Bytes: return isEmpty ? Array.Empty() : ReadBytes( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).Value; case ObjectTypes.Stream: readType = false; @@ -130,80 +127,80 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp case ObjectTypes.ClrType: if (isUnsigned) { - if(!StreamSerializer.TypeCacheEnabled) + if (context.SerializerVersion < 3) + throw new SerializerException($"CLR type reading isn't available in version {context.SerializerVersion}", new InvalidDataException()); + if (!StreamSerializer.TypeCacheEnabled) throw new SerializerException( $"The type cache needs to be enabled in order to be able to deserialize this type information", new InvalidOperationException() ); - int thc = stream.ReadInt(version); + int thc = context.Stream.ReadInt(context); if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); if (!typeof(IStreamSerializer).IsAssignableFrom(type)) throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); return type; } - return ReadType(stream, version); + return ReadType(context.Stream, context); } - if (readType && type == null) type = StreamSerializer.LoadType(ReadString(stream, version, minLen: 1, maxLen: short.MaxValue)); + if (readType && type == null) +#pragma warning disable IDE0066 // Use switch expression + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + type = StreamSerializer.LoadType(ReadString(context.Stream, context, minLen: 1, maxLen: short.MaxValue)); + break; + default: + type = ReadType(context.Stream, context); + break; + } +#pragma warning restore IDE0066 // Use switch expression switch (objType.RemoveFlags()) { - case ObjectTypes.Byte: - case ObjectTypes.Short: + case ObjectTypes.Byte:// Compatibility with serializer version 2 + case ObjectTypes.Short:// Compatibility with serializer version 2 case ObjectTypes.Int: case ObjectTypes.Long: case ObjectTypes.Float: case ObjectTypes.Double: case ObjectTypes.Decimal: - return isEmpty ? Activator.CreateInstance(type!)! : ReadNumber(stream, type!, version)!; + return isEmpty ? Activator.CreateInstance(type!)! : ReadNumber(context.Stream, type!, context)!; case ObjectTypes.Array: return isEmpty ? ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)! : ReadArray( - stream, + context.Stream, type!, - version, - pool: null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default) + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ); case ObjectTypes.List: return isEmpty ? Activator.CreateInstance(type!)! : ReadList( - stream, + context.Stream, type!, - version, - pool: null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default) + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ); case ObjectTypes.Dict: return isEmpty ? Activator.CreateInstance(type!)! : ReadDict( - stream, + context.Stream, type!, - version, - pool: null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.Version), - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version) + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ); case ObjectTypes.Object: - return ReadObject(stream, type!, version, options); + return ReadObject(context.Stream, type!, context); case ObjectTypes.Struct: - return ReadStructMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version)!; + return ReadStructMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, context.Stream, context)!; case ObjectTypes.Serializable: - return ReadSerializedObject(stream, type!, version); + return ReadSerializedObject(context.Stream, type!, context); case ObjectTypes.Stream: - Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.Version, default) ?? new FileStream( - Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), - FileMode.CreateNew, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); + Stream res = context.Options?.Attribute.GetStream(obj: null, property: null, context) ?? new PooledTempStream(); if (objType.IsEmpty()) return res; try { - return ReadStream(stream, res, version, minLen: options?.GetMinLen(0L) ?? 0, maxLen: options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); + return ReadStream(context.Stream, res, context, minLen: context.Options?.GetMinLen(0L) ?? 0, maxLen: context.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); } catch { @@ -219,32 +216,27 @@ private static object ReadAnyInt(Stream stream, int? version, ObjectTypes objTyp /// Read any object /// /// Stream - /// Serializer version - /// Options - /// Cancellation token + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) - => await ReadAnyIntAsync(stream, version, (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(), type: null, options, cancellationToken) - .DynamicContext(); + public static async Task ReadAnyAsync(this Stream stream, IDeserializationContext context) + => await ReadAnyIntAsync(context, (ObjectTypes)await ReadOneByteAsync(stream, context).DynamicContext(), type: null).DynamicContext(); /// /// Read any object /// - /// Stream - /// Serializer version + /// Context /// Object type /// CLR type - /// Options - /// Cancellation token /// Object [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectTypes objType, Type? type, ISerializerOptions? options, CancellationToken cancellationToken) + private static Task ReadAnyIntAsync(IDeserializationContext context, ObjectTypes objType, Type? type) => SerializerException.WrapAsync(async () => { + using ContextRecursion cr = new(context); if (objType == ObjectTypes.Null) throw new SerializerException("NULL object type is not supported by this method"); bool isEmpty = objType.IsEmpty(), isUnsigned = objType.IsUnsigned(), @@ -255,7 +247,7 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT case ObjectTypes.Bool: return !isEmpty; case ObjectTypes.Byte: - switch (version & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: @@ -265,12 +257,12 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT return isEmpty ? Convert.ChangeType(0, isUnsigned ? typeof(byte) : typeof(sbyte)) : isUnsigned - ? await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() - : await ReadOneSByteAsync(stream, version, cancellationToken).DynamicContext(); + ? await ReadOneByteAsync(context.Stream, context).DynamicContext() + : await ReadOneSByteAsync(context.Stream, context).DynamicContext(); } break; case ObjectTypes.Short: - switch (version & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: @@ -280,8 +272,8 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT return isEmpty ? Convert.ChangeType(0, isUnsigned ? typeof(ushort) : typeof(short)) : isUnsigned - ? await ReadUShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - : await ReadShortAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + ? await ReadUShortAsync(context.Stream, context).DynamicContext() + : await ReadShortAsync(context.Stream, context).DynamicContext(); } break; case ObjectTypes.Int: @@ -303,41 +295,37 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT return isEmpty ? string.Empty : await ReadStringAsync( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - cancellationToken: cancellationToken + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext(); case ObjectTypes.String16: return isEmpty ? string.Empty : await ReadString16Async( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - cancellationToken: cancellationToken + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext(); case ObjectTypes.String32: return isEmpty ? string.Empty : await ReadString32Async( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - cancellationToken: cancellationToken + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext(); case ObjectTypes.Bytes: return isEmpty ? Array.Empty() : (await ReadBytesAsync( - stream, - version, - minLen: options?.GetMinLen(0) ?? 0, - maxLen: options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - cancellationToken: cancellationToken + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext()).Value; case ObjectTypes.Stream: readType = false; @@ -345,92 +333,87 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT case ObjectTypes.ClrType: if (isUnsigned) { + if (context.SerializerVersion < 3) + throw new SerializerException($"CLR type reading isn't available in version {context.SerializerVersion}", new InvalidDataException()); if (!StreamSerializer.TypeCacheEnabled) throw new SerializerException( $"The type cache needs to be enabled in order to be able to deserialize this type information", new InvalidOperationException() ); - int thc = await stream.ReadIntAsync(version, cancellationToken: cancellationToken).DynamicContext(); + int thc = await context.Stream.ReadIntAsync(context).DynamicContext(); if (!TypeCache.Types.TryGetValue(thc, out Type? type)) throw new SerializerException($"Unknown type #{thc}", new InvalidDataException()); if (!typeof(IStreamSerializer).IsAssignableFrom(type)) throw new SerializerException($"Invalid type {type} (possibly manipulated byte sequence)", new InvalidDataException()); return type; } - return await ReadTypeAsync(stream, version, cancellationToken).DynamicContext(); + return await ReadTypeAsync(context.Stream, context).DynamicContext(); } if (readType && type == null) - type = StreamSerializer.LoadType(await ReadStringAsync(stream, version, pool: null, minLen: 1, maxLen: short.MaxValue, cancellationToken).DynamicContext()); +#pragma warning disable IDE0066 // Use switch expression + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + type = StreamSerializer.LoadType(await ReadStringAsync(context.Stream, context, minLen: 1, maxLen: short.MaxValue).DynamicContext()); + break; + default: + type = await ReadTypeAsync(context.Stream, context).DynamicContext(); + break; + } +#pragma warning restore IDE0066 // Use switch expression switch (objType.RemoveFlags()) { - case ObjectTypes.Byte: - case ObjectTypes.Short: + case ObjectTypes.Byte:// Compatibility with serializer version 2 + case ObjectTypes.Short:// Compatibility with serializer version 2 case ObjectTypes.Int: case ObjectTypes.Long: case ObjectTypes.Float: case ObjectTypes.Double: case ObjectTypes.Decimal: if (isEmpty) return Activator.CreateInstance(type!)!; - return await ReadNumberAsync(stream, type!, version, cancellationToken: cancellationToken).DynamicContext(); + return await ReadNumberAsync(context.Stream, type!, context).DynamicContext(); case ObjectTypes.Array: return isEmpty ? ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)! : await ReadArrayAsync( - stream, + context.Stream, type!, - version, - pool: null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default), - cancellationToken: cancellationToken + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext(); case ObjectTypes.List: return isEmpty ? Activator.CreateInstance(type!)! : await ReadListAsync( - stream, + context.Stream, type!, - version, - pool: null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, default), - cancellationToken: cancellationToken + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext(); case ObjectTypes.Dict: return isEmpty ? Activator.CreateInstance(type!)! : await ReadDictAsync( - stream, + context.Stream, type!, - version, - pool: null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetKeySerializerOptions(property: null, stream, version ?? StreamSerializer.Version, cancellationToken), - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.Version, cancellationToken), - cancellationToken: cancellationToken + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext(); case ObjectTypes.Object: - return await ReadObjectAsync(stream, type!, version, options, cancellationToken).DynamicContext(); + return await ReadObjectAsync(context.Stream, type!, context).DynamicContext(); case ObjectTypes.Struct: - task = (Task)ReadStructAsyncMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, stream, version, cancellationToken)!; + task = (Task)ReadStructAsyncMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, context.Stream, context)!; break; case ObjectTypes.Serializable: - return await ReadSerializedObjectAsync(stream, type!, version, cancellationToken)!.DynamicContext(); + return await ReadSerializedObjectAsync(context.Stream, type!, context)!.DynamicContext(); case ObjectTypes.Stream: - Stream res = options?.Attribute.GetStream(obj: null, property: null, stream, version ?? StreamSerializer.Version, default) ?? new FileStream( - Path.Combine(Settings.TempFolder, Guid.NewGuid().ToString()), - FileMode.CreateNew, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); + Stream res = context.Options?.Attribute.GetStream(obj: null, property: null, context) ?? new PooledTempStream(); if (objType.IsEmpty()) return res; try { return await ReadStreamAsync( - stream, + context.Stream, res, - version, - minLen: options?.GetMinLen(0L) ?? 0, - maxLen: options?.GetMaxLen(long.MaxValue) ?? long.MaxValue, - cancellationToken: cancellationToken + context, + minLen: context.Options?.GetMinLen(0L) ?? 0, + maxLen: context.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue ).DynamicContext(); } catch @@ -449,40 +432,32 @@ private static Task ReadAnyIntAsync(Stream stream, int? version, ObjectT /// Read any object /// /// Stream - /// Serializer version - /// Options + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static object? ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) + public static object? ReadAnyNullable(this Stream stream, IDeserializationContext context) { - ObjectTypes objType = (ObjectTypes)ReadOneByte(stream, version); - return objType == ObjectTypes.Null ? null : ReadAnyInt(stream, version, objType, type: null, options); + ObjectTypes objType = (ObjectTypes)ReadOneByte(stream, context); + return objType == ObjectTypes.Null ? null : ReadAnyInt(context, objType, type: null); } /// /// Read any object /// /// Stream - /// Serializer version - /// Options - /// Cancellation token + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadAnyNullableAsync( - this Stream stream, - int? version = null, - ISerializerOptions? options = null, - CancellationToken cancellationToken = default - ) + public static async Task ReadAnyNullableAsync(this Stream stream, IDeserializationContext context) { - ObjectTypes objType = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return objType == ObjectTypes.Null ? null : await ReadAnyIntAsync(stream, version, objType, type: null, options, cancellationToken).DynamicContext(); + ObjectTypes objType = (ObjectTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return objType == ObjectTypes.Null ? null : await ReadAnyIntAsync(context, objType, type: null).DynamicContext(); } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs index 2628ea3..6436926 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -13,32 +12,21 @@ public static partial class StreamExtensions /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T[] ReadArray( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static T[] ReadArray(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - return ReadFixedArray(stream, res, version, valueOptions, valuesNullable); + return ReadFixedArray(stream, res, context); } /// @@ -46,34 +34,22 @@ public static T[] ReadArray( /// /// Stream /// Array type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Array ReadArray( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static Array ReadArray(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, () => "Not an array type")); - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type elementType = type.GetElementType()!; Array res = Array.CreateInstance(elementType, len); - return ReadFixedArray(stream, res, version, valueOptions, valuesNullable); + return ReadFixedArray(stream, res, context); } /// @@ -81,34 +57,21 @@ public static Array ReadArray( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadArrayAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadArrayAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(stream, context).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - return await ReadFixedArrayAsync(stream, res, version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); + return await ReadFixedArrayAsync(stream, res, context).DynamicContext(); } /// @@ -116,36 +79,22 @@ public static async Task ReadArrayAsync( /// /// Stream /// Array type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadArrayAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadArrayAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, () => "Not an array type")); - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(stream, context).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type elementType = type.GetElementType()!; Array res = Array.CreateInstance(elementType, len); - return await ReadFixedArrayAsync(stream, res, version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); + return await ReadFixedArrayAsync(stream, res, context).DynamicContext(); } /// @@ -153,41 +102,30 @@ public static async Task ReadArrayAsync( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T[]? ReadArrayNullable( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static T[]? ReadArrayNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return ReadBool(stream, version, pool) ? ReadArray(stream, version, pool, minLen, maxLen, valueOptions) : null; + return ReadBool(stream, context) ? ReadArray(stream, context, minLen, maxLen) : null; } default: { - if (ReadNumberNullable(stream, version, pool) is not int len) return null; + if (ReadNumberNullable(stream, context) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - ReadFixedArray(stream, res.AsSpan(), version, valueOptions, valuesNullable); + ReadFixedArray(stream, res.AsSpan(), context); return res; } } @@ -198,46 +136,32 @@ public static async Task ReadArrayAsync( /// /// Stream /// Array type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Array? ReadArrayNullable( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static Array? ReadArrayNullable(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return ReadBool(stream, version, pool) ? ReadArray(stream, type, version, pool, minLen, maxLen, valueOptions) : null; + return ReadBool(stream, context) ? ReadArray(stream, type, context, minLen, maxLen) : null; } default: { - if (ReadNumberNullable(stream, version, pool) is not int len) return null; + if (ReadNumberNullable(stream, context) is not int len) return null; return len < 1 ? Array.CreateInstance(type.GetElementType()!, length: 0) : ReadFixedArray( stream, Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len, minLen, maxLen)), - version, - valueOptions, - valuesNullable + context ); } } @@ -248,45 +172,32 @@ public static async Task ReadArrayAsync( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadArrayNullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadArrayNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadArrayAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadArrayAsync(stream, context, minLen, maxLen).DynamicContext() : null; } default: { - if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return Array.Empty(); T[] res = new T[len]; - await ReadFixedArrayAsync(stream, res.AsMemory(), version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); + await ReadFixedArrayAsync(stream, res.AsMemory(), context).DynamicContext(); return res; } } @@ -297,52 +208,34 @@ public static async Task ReadArrayAsync( /// /// Stream /// Array type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value deserializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadArrayNullableAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadArrayNullableAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadArrayAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadArrayAsync(stream, type, context, minLen, maxLen).DynamicContext() : null; } default: { - if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; return len < 1 ? Array.CreateInstance(type.GetElementType()!, length: 0) : await ReadFixedArrayAsync( stream, Array.CreateInstance(type.GetElementType()!, SerializerHelper.EnsureValidLength(len, minLen, maxLen)), - version, - valueOptions, - valuesNullable, - pool, - cancellationToken + context ).DynamicContext(); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs index b92efbf..97a9576 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -12,46 +11,46 @@ public static partial class StreamExtensions /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static bool ReadBool(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(bool), version, pool, (data) => data[0] == 1); +#pragma warning disable IDE0060 // Remove unused argument + public static bool ReadBool(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(bool), (data) => data[0] == 1); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadBoolAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(bool), version, pool, (data) => data[0] == 1, cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadBoolAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(bool), (data) => data[0] == 1); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool? pool = null) + public static bool? ReadBoolNullable(this Stream stream, IDeserializationContext context) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return ReadBool(stream, version, pool) ? ReadBool(stream, version, pool) : null; + return ReadBool(stream, context) ? ReadBool(stream, context) : null; } default: { - ObjectTypes type = (ObjectTypes)ReadOneByte(stream, version); + ObjectTypes type = (ObjectTypes)ReadOneByte(stream, context); return type switch { ObjectTypes.Null => null, @@ -67,28 +66,26 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadBoolNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + public static async Task ReadBoolNullableAsync(this Stream stream, IDeserializationContext context) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadBoolAsync(stream, context).DynamicContext() : null; } default: { - ObjectTypes type = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + ObjectTypes type = (ObjectTypes)await ReadOneByteAsync(stream, context).DynamicContext(); return type switch { ObjectTypes.Null => null, @@ -104,58 +101,56 @@ public static Task ReadBoolAsync(this Stream stream, int? version = null, /// Read /// /// Stream - /// Serializer version + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static sbyte ReadOneSByte(this Stream stream, int? version = null) => (sbyte)ReadOneByte(stream, version); + public static sbyte ReadOneSByte(this Stream stream, IDeserializationContext context) => (sbyte)ReadOneByte(stream, context); /// /// Read /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task ReadOneSByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - => Task.FromResult(ReadOneSByte(stream, version)); + public static Task ReadOneSByteAsync(this Stream stream, IDeserializationContext context) => Task.FromResult(ReadOneSByte(stream, context)); /// /// Read /// /// Stream - /// Serializer version + /// Context /// Value - public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null) - => ReadNullableNumeric(stream, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, version, pool: null, (data) => (sbyte)data[0]); +#pragma warning disable IDE0060 // Remove unused argument + public static sbyte? ReadOneSByteNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, (data) => (sbyte)data[0]); /// /// Read /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Value - public static Task ReadOneSByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, version, pool: null, (data) => (sbyte)data[0], cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadOneSByteNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue, (data) => (sbyte)data[0]); /// /// Read /// /// Stream - /// Serializer version + /// Context /// Value #pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static byte ReadOneByte(this Stream stream, int? version = null) -#pragma warning restore IDE0060 // Remove unused parameter + public static byte ReadOneByte(this Stream stream, IDeserializationContext context) => SerializerException.Wrap(() => { int res = stream.ReadByte(); @@ -167,496 +162,470 @@ public static byte ReadOneByte(this Stream stream, int? version = null) /// Read /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Value -#pragma warning disable IDE0060 // Remove unused parameter [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task ReadOneByteAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 // Remove unused parameter - => Task.FromResult(ReadOneByte(stream, version)); + public static Task ReadOneByteAsync(this Stream stream, IDeserializationContext context) => Task.FromResult(ReadOneByte(stream, context)); /// /// Read /// /// Stream - /// Serializer version + /// Context /// Value - public static ushort? ReadOneByteNullable(this Stream stream, int? version = null) - => ReadNullableNumeric(stream, sizeof(byte), byte.MinValue, byte.MaxValue, version, pool: null, (data) => data[0]); +#pragma warning disable IDE0060 // Remove unused argument + public static ushort? ReadOneByteNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(byte), byte.MinValue, byte.MaxValue, (data) => data[0]); /// /// Read /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Value - public static Task ReadOneByteNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(byte), byte.MinValue, byte.MaxValue, version, pool: null, (data) => data[0], cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadOneByteNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(byte), byte.MinValue, byte.MaxValue, (data) => data[0]); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static short ReadShort(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(short), version, pool, (data) => data.AsSpan().ToShort()); +#pragma warning disable IDE0060 // Remove unused argument + public static short ReadShort(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(short), (data) => data.ToShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(short), version, pool, (data) => data.AsSpan().ToShort(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadShortAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(short), (data) => data.ToShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static short? ReadShortNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(short), short.MinValue, short.MaxValue, version, pool, (data) => data.AsSpan().ToShort()); +#pragma warning disable IDE0060 // Remove unused argument + public static short? ReadShortNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(short), short.MinValue, short.MaxValue, (data) => data.ToShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(short), short.MinValue, short.MaxValue, version, pool, (data) => data.AsSpan().ToShort(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadShortNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(short), short.MinValue, short.MaxValue, (data) => data.ToShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static ushort ReadUShort(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(ushort), version, pool, (data) => data.AsSpan().ToUShort()); +#pragma warning disable IDE0060 // Remove unused argument + public static ushort ReadUShort(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(ushort), (data) => data.ToUShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadUShortAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(ushort), version, pool, (data) => data.AsSpan().ToUShort(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadUShortAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(ushort), (data) => data.ToUShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static ushort? ReadUShortNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(ushort), ushort.MinValue, ushort.MaxValue, version, pool, (data) => data.AsSpan().ToUShort()); +#pragma warning disable IDE0060 // Remove unused argument + public static ushort? ReadUShortNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(ushort), ushort.MinValue, ushort.MaxValue, (data) => data.ToUShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadUShortNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(ushort), ushort.MinValue, ushort.MaxValue, version, pool, (data) => data.AsSpan().ToUShort(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadUShortNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(ushort), ushort.MinValue, ushort.MaxValue, (data) => data.ToUShort()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static int ReadInt(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(int), version, pool, (data) => data.AsSpan().ToInt()); +#pragma warning disable IDE0060 // Remove unused argument + public static int ReadInt(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(int), (data) => data.ToInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(int), version, pool, (data) => data.AsSpan().ToInt(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadIntAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(int), (data) => data.ToInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static int? ReadIntNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(int), int.MinValue, int.MaxValue, version, pool, (data) => data.AsSpan().ToInt()); +#pragma warning disable IDE0060 // Remove unused argument + public static int? ReadIntNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(int), int.MinValue, int.MaxValue, (data) => data.ToInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(int), int.MinValue, int.MaxValue, version, pool, (data) => data.AsSpan().ToInt(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadIntNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(int), int.MinValue, int.MaxValue, (data) => data.ToInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static uint ReadUInt(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(uint), version, pool, (data) => data.AsSpan().ToUInt()); +#pragma warning disable IDE0060 // Remove unused argument + public static uint ReadUInt(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(uint), (data) => data.ToUInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadUIntAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(uint), version, pool, (data) => data.AsSpan().ToUInt(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadUIntAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(uint), (data) => data.ToUInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static uint? ReadUIntNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(uint), uint.MinValue, uint.MaxValue, version, pool, (data) => data.AsSpan().ToUInt()); +#pragma warning disable IDE0060 // Remove unused argument + public static uint? ReadUIntNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(uint), uint.MinValue, uint.MaxValue, (data) => data.ToUInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadUIntNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(uint), uint.MinValue, uint.MaxValue, version, pool, (data) => data.AsSpan().ToUInt(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadUIntNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(uint), uint.MinValue, uint.MaxValue, (data) => data.ToUInt()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static long ReadLong(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(long), version, pool, (data) => data.AsSpan().ToLong()); +#pragma warning disable IDE0060 // Remove unused argument + public static long ReadLong(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(long), (data) => data.ToLong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadLongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(long), version, pool, (data) => data.AsSpan().ToLong(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadLongAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(long), (data) => data.ToLong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static long? ReadLongNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(long), long.MinValue, long.MaxValue, version, pool, (data) => data.AsSpan().ToLong()); +#pragma warning disable IDE0060 // Remove unused argument + public static long? ReadLongNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(long), long.MinValue, long.MaxValue, (data) => data.ToLong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadLongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(long), long.MinValue, long.MaxValue, version, pool, (data) => data.AsSpan().ToLong(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadLongNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(long), long.MinValue, long.MaxValue, (data) => data.ToLong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static ulong ReadULong(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(ulong), version, pool, (data) => data.AsSpan().ToULong()); +#pragma warning disable IDE0060 // Remove unused argument + public static ulong ReadULong(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(ulong), (data) => data.ToULong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadULongAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(ulong), version, pool, (data) => data.AsSpan().ToULong(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadULongAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(ulong), (data) => data.ToULong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static ulong? ReadULongNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(ulong), ulong.MinValue, ulong.MaxValue, version, pool, (data) => data.AsSpan().ToULong()); +#pragma warning disable IDE0060 // Remove unused argument + public static ulong? ReadULongNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(ulong), ulong.MinValue, ulong.MaxValue, (data) => data.ToULong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadULongNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(ulong), ulong.MinValue, ulong.MaxValue, version, pool, (data) => data.AsSpan().ToULong(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadULongNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(ulong), ulong.MinValue, ulong.MaxValue, (data) => data.ToULong()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static float ReadFloat(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(float), version, pool, (data) => data.AsSpan().ToFloat()); +#pragma warning disable IDE0060 // Remove unused argument + public static float ReadFloat(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(float), (data) => data.ToFloat()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadFloatAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(float), version, pool, (data) => data.AsSpan().ToFloat(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadFloatAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(float), (data) => data.ToFloat()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static float? ReadFloatNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(float), float.MinValue, float.MaxValue, version, pool, (data) => data.AsSpan().ToFloat()); +#pragma warning disable IDE0060 // Remove unused argument + public static float? ReadFloatNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(float), float.MinValue, float.MaxValue, (data) => data.ToFloat()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadFloatNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(float), float.MinValue, float.MaxValue, version, pool, (data) => data.AsSpan().ToFloat(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadFloatNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(float), float.MinValue, float.MaxValue, (data) => data.ToFloat()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static double ReadDouble(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(double), version, pool, (data) => data.AsSpan().ToDouble()); +#pragma warning disable IDE0060 // Remove unused argument + public static double ReadDouble(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(double), (data) => data.ToDouble()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadDoubleAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumericAsync(stream, sizeof(double), version, pool, (data) => data.AsSpan().ToDouble(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadDoubleAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(double), (data) => data.ToDouble()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static double? ReadDoubleNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(double), double.MinValue, double.MaxValue, version, pool, (data) => data.AsSpan().ToDouble()); +#pragma warning disable IDE0060 // Remove unused argument + public static double? ReadDoubleNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(double), double.MinValue, double.MaxValue, (data) => data.ToDouble()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadDoubleNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNullableNumericAsync(stream, sizeof(double), double.MinValue, double.MaxValue, version, pool, (data) => data.AsSpan().ToDouble(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadDoubleNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(double), double.MinValue, double.MaxValue, (data) => data.ToDouble()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static decimal ReadDecimal(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNumeric(stream, sizeof(decimal), version, pool, (data) => data.AsSpan().ToDecimal()); +#pragma warning disable IDE0060 // Remove unused argument + public static decimal ReadDecimal(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumeric(context, sizeof(decimal), (data) => data.ToDecimal()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadDecimalAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) - => ReadNumericAsync(stream, sizeof(decimal), version, pool, (data) => data.AsSpan().ToDecimal(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadDecimalAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNumericAsync(context, sizeof(decimal), (data) => data.ToDecimal()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static decimal? ReadDecimalNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadNullableNumeric(stream, sizeof(decimal), decimal.MinValue, decimal.MaxValue, version, pool, (data) => data.AsSpan().ToDecimal()); +#pragma warning disable IDE0060 // Remove unused argument + public static decimal? ReadDecimalNullable(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumeric(context, sizeof(decimal), decimal.MinValue, decimal.MaxValue, (data) => data.ToDecimal()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadDecimalNullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) - => ReadNullableNumericAsync( - stream, - sizeof(decimal), - decimal.MinValue, - decimal.MaxValue, - version, - pool, - (data) => data.AsSpan().ToDecimal(), - cancellationToken - ); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadDecimalNullableAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableNumericAsync(context, sizeof(decimal), decimal.MinValue, decimal.MaxValue, (data) => data.ToDecimal()); /// /// Read a numeric value /// /// Numeric type - /// Stream + /// Context /// Serialized data size in bytes - /// Serializer version - /// Array pool /// Deserializer action /// Value -#pragma warning disable IDE0060 // Remove unused parameter #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static T ReadNumeric(Stream stream, int size, int? version, ArrayPool? pool, Func deserializer) where T : struct, IConvertible -#pragma warning restore IDE0060 // Remove unused parameter + [SkipLocalsInit] + private static T ReadNumeric(IDeserializationContext context, int size, NumericReader_Delegate deserializer) { - pool ??= StreamSerializer.BufferPool; - byte[] data = ReadSerializedData(stream, size, pool); - try - { - return deserializer(data); - } - finally - { - pool.Return(data, clearArray: false); - } + Span buffer = stackalloc byte[size]; + if (context.Stream.Read(buffer) != size) throw new SerializerException($"Failed to read {size} bytes serialized data", new IOException()); + return deserializer(buffer); } /// /// Read a numeric value /// /// Numeric type - /// Stream + /// Context /// Serialized data size in bytes - /// Serializer version - /// Array pool /// Deserializer action - /// Cancellation token /// Value -#pragma warning disable IDE0060 // Remove unused parameter #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task ReadNumericAsync( - Stream stream, - int size, - int? version, - ArrayPool? pool, - Func deserializer, - CancellationToken cancellationToken - ) -#pragma warning restore IDE0060 // Remove unused parameter - where T : struct, IConvertible + private static async Task ReadNumericAsync(IDeserializationContext context, int size, NumericReader_Delegate deserializer) { - pool ??= StreamSerializer.BufferPool; - byte[] data = await ReadSerializedDataAsync(stream, size, pool, cancellationToken).DynamicContext(); + byte[] data = await ReadSerializedDataAsync(context.Stream, size, context).DynamicContext(); try { - return deserializer(data); + return deserializer(data.AsSpan(0, size)); } finally { - pool.Return(data, clearArray: false); + context.BufferPool.Return(data, clearArray: false); } } @@ -664,34 +633,33 @@ CancellationToken cancellationToken /// Read a nullable numeric /// /// Numeric type - /// Stream + /// Context /// Serialized data size in bytes /// Minimum /// Maximum - /// Serializer version - /// Array pool /// Deserializer function to execute, if the red value isn't a default handleable numeric value /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static T? ReadNullableNumeric(Stream stream, int size, T min, T max, int? version, ArrayPool? pool, Func deserializer) + [SkipLocalsInit] + private static T? ReadNullableNumeric(IDeserializationContext context, int size, T min, T max, NumericReader_Delegate deserializer) where T : struct, IConvertible { - pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - if (!ReadBool(stream, version, pool)) return null; + if (!ReadBool(context.Stream, context)) return null; } break; default: { - switch ((NumberTypes)ReadOneByte(stream, version)) + if (size > 2 && context.TryReadCachedNumber(out T? res)) return res; + switch (size > 2 && context.IsCacheEnabled ? context.LastNumberType!.Value : (NumberTypes)ReadOneByte(context.Stream, context)) { - case NumberTypes.Null: return null; + case NumberTypes.IsNull: return null; case NumberTypes.MinValue: return min; case NumberTypes.MaxValue: return max; case NumberTypes.Zero: return default(T); @@ -699,59 +667,45 @@ CancellationToken cancellationToken } break; } - byte[] data = ReadSerializedData(stream, size, pool); - try - { - return deserializer(data); - } - finally - { - pool.Return(data, clearArray: false); - } + Span buffer = stackalloc byte[size]; + if (context.Stream.Read(buffer) != size) throw new SerializerException($"Failed to read {size} bytes serialized data", new IOException()); + return deserializer(buffer); } /// /// Read a nullable numeric /// /// Numeric type - /// Stream + /// Context /// Serialized data size in bytes /// Minimum /// Maximum - /// Serializer version - /// Array pool /// Deserializer function to execute, if the red value isn't a default handleable numeric value - /// Cancellation token /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task ReadNullableNumericAsync( - Stream stream, - int size, - T min, - T max, - int? version, - ArrayPool? pool, - Func deserializer, - CancellationToken cancellationToken - ) + private static async Task ReadNullableNumericAsync(IDeserializationContext context, int size, T min, T max, NumericReader_Delegate deserializer) where T : struct, IConvertible { - pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) return null; + if (!await ReadBoolAsync(context.Stream, context).DynamicContext()) return null; } break; default: { - switch ((NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext()) + if (size > 2) + { + (bool cached, T? res) = await context.TryReadCachedNumberAsync().DynamicContext(); + if (cached) return res; + } + switch (size > 2 && context.IsCacheEnabled ? context.LastNumberType!.Value : (NumberTypes)await ReadOneByteAsync(context.Stream, context).DynamicContext()) { - case NumberTypes.Null: return null; + case NumberTypes.IsNull: return null; case NumberTypes.MinValue: return min; case NumberTypes.MaxValue: return max; case NumberTypes.Zero: return default(T); @@ -759,15 +713,23 @@ CancellationToken cancellationToken } break; } - byte[] data = await ReadSerializedDataAsync(stream, size, pool, cancellationToken).DynamicContext(); + byte[] data = await ReadSerializedDataAsync(context.Stream, size, context).DynamicContext(); try { return deserializer(data); } finally { - pool.Return(data, clearArray: false); + context.BufferPool.Return(data, clearArray: false); } } + + /// + /// Delegate for a numeric reader + /// + /// Number type + /// Serialized data + /// Number + private delegate T NumericReader_Delegate(Span data); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs index 21e3069..39f8ab1 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Bytes.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -11,32 +10,20 @@ public static partial class StreamExtensions /// Read /// /// Stream - /// Serializer version - /// Result buffer to use - /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the pool after use!) + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value and length - public static (byte[] Value, int Length) ReadBytes( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue - ) + public static (byte[] Value, int Length) ReadBytes(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - bool rented = false; + byte[] buffer = Array.Empty(); try { - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); if (len != 0) { + if (len != 0) buffer = context.BufferPool.Rent(len); int red = stream.Read(buffer.AsSpan(0, len)); if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); } @@ -44,12 +31,12 @@ public static (byte[] Value, int Length) ReadBytes( } catch (SerializerException) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw; } catch (Exception ex) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw SerializerException.From(ex); } } @@ -58,50 +45,33 @@ public static (byte[] Value, int Length) ReadBytes( /// Read /// /// Stream - /// Serializer version - /// Result buffer to use - /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the pool after use!) + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value and length - public static async Task<(byte[] Value, int Length)> ReadBytesAsync( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) + public static async Task<(byte[] Value, int Length)> ReadBytesAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - bool rented = false; + byte[] buffer = Array.Empty(); try { - return await SerializerException.WrapAsync(async () => + int len = await ReadNumberAsync(stream, context).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len != 0) { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); - SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); - if (len != 0) - { - int red = await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext(); - if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); - } - return (buffer, len); - }).DynamicContext(); + if (len != 0) buffer = context.BufferPool.Rent(len); + int red = await stream.ReadAsync(buffer.AsMemory(0, len), context.Cancellation).DynamicContext(); + if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); + } + return (buffer, len); } catch (SerializerException) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw; } catch (Exception ex) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw SerializerException.From(ex); } } @@ -110,43 +80,30 @@ public static (byte[] Value, int Length) ReadBytes( /// Read /// /// Stream - /// Serializer version - /// Result buffer to use - /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the - /// pool after use!) + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value and length [TargetedPatchingOptOut("Tiny method")] - public static (byte[] Value, int Length)? ReadBytesNullable( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue - ) + public static (byte[] Value, int Length)? ReadBytesNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return ReadBool(stream, version, pool) ? ReadBytes(stream, version, buffer, pool, minLen, maxLen) : null; + return ReadBool(stream, context) ? ReadBytes(stream, context, minLen, maxLen) : null; } default: { - bool rented = false; + byte[] buffer = Array.Empty(); try { - if (ReadNumberNullable(stream, version, pool) is not int len) return null; + if (ReadNumberNullable(stream, context) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null && pool == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); if (len != 0) { + if (len != 0) buffer = context.BufferPool.Rent(len); int red = stream.Read(buffer.AsSpan(0, len)); if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); } @@ -154,12 +111,12 @@ public static (byte[] Value, int Length)? ReadBytesNullable( } catch (SerializerException) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw; } catch (Exception ex) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw SerializerException.From(ex); } } @@ -170,61 +127,45 @@ public static (byte[] Value, int Length)? ReadBytesNullable( /// Read /// /// Stream - /// Serializer version - /// Result buffer to use - /// Array pool (if given, and buffer is , the returned value is a pool array which needs to be returned to the - /// pool after use!) + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value and length [TargetedPatchingOptOut("Tiny method")] - public static async Task<(byte[] Value, int Length)?> ReadBytesNullableAsync( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) + public static async Task<(byte[] Value, int Length)?> ReadBytesNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadBytesAsync(stream, version, buffer, pool, minLen, maxLen, cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadBytesAsync(stream, context, minLen, maxLen).DynamicContext() : null; } default: { - bool rented = false; + byte[] buffer = Array.Empty(); try { - if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0 && buffer == null && pool == null) buffer = Array.Empty(); - rented = buffer == null && pool != null; - buffer ??= rented ? pool!.Rent(len) : new byte[len]; - if (buffer.Length < len) - throw new SerializerException($"Buffer too small ({len} bytes required)", new ArgumentOutOfRangeException(nameof(buffer))); if (len != 0) { - int red = await stream.ReadAsync(buffer.AsMemory(0, len), cancellationToken).DynamicContext(); + if (len != 0) buffer = context.BufferPool.Rent(len); + int red = await stream.ReadAsync(buffer.AsMemory(0, len), context.Cancellation).DynamicContext(); if (red != len) throw new SerializerException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); } return (buffer, len); } catch (SerializerException) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw; } catch (Exception ex) { - if (rented) pool!.Return(buffer!); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); throw SerializerException.From(ex); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs index 6a48cd0..612921e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Collections; +using System.Collections; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -15,36 +14,21 @@ public static partial class StreamExtensions /// Key type /// Value type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Dictionary ReadDict( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static Dictionary ReadDict(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) where tKey : notnull { - version ??= StreamSerializer.Version; - pool ??= StreamSerializer.BufferPool; - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - ReadDictInt(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable); + ReadDictInt(context, res, typeof(tKey), typeof(tValue), len); return res; } @@ -53,42 +37,26 @@ public static Dictionary ReadDict( /// /// Stream /// Dictionary type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static IDictionary ReadDict( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static IDictionary ReadDict(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a dictionary type" )); - version ??= StreamSerializer.Version; - pool ??= StreamSerializer.BufferPool; - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - ReadDictInt(stream, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len, version.Value, keyOptions, valueOptions, valuesNullable); + ReadDictInt(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len); return res; } @@ -98,38 +66,21 @@ public static IDictionary ReadDict( /// Key type /// Value type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task> ReadDictAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task> ReadDictAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) where tKey : notnull { - version ??= StreamSerializer.Version; - pool ??= StreamSerializer.BufferPool; - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(stream, context).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - await ReadDictIntAsync(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable, cancellationToken).DynamicContext(); + await ReadDictIntAsync(context, res, typeof(tKey), typeof(tValue), len).DynamicContext(); return res; } @@ -138,56 +89,26 @@ public static async Task> ReadDictAsync( /// /// Stream /// Dictionary type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadDictAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadDictAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a dictionary type" )); - version ??= StreamSerializer.Version; - pool ??= StreamSerializer.BufferPool; - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(stream, context).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - await ReadDictIntAsync( - stream, - res, - type.GenericTypeArguments[0], - type.GenericTypeArguments[1], - len, - version.Value, - keyOptions, - valueOptions, - valuesNullable, - cancellationToken - ) - .DynamicContext(); + await ReadDictIntAsync(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len).DynamicContext(); return res; } @@ -197,42 +118,28 @@ await ReadDictIntAsync( /// Key type /// Value type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Dictionary? ReadDictNullable( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static Dictionary? ReadDictNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) where tKey : notnull { - pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: - return ReadBool(stream, version, pool) ? ReadDict(stream, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; + return ReadBool(stream, context) ? ReadDict(stream, context, minLen, maxLen) : null; default: { - if (ReadNumberNullable(stream, version, pool) is not int len) return null; + if (ReadNumberNullable(stream, context) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - ReadDictInt(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable); + ReadDictInt(context, res, typeof(tKey), typeof(tValue), len); return res; } } @@ -243,50 +150,35 @@ await ReadDictIntAsync( /// /// Stream /// Dictionary type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static IDictionary? ReadDictNullable( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static IDictionary? ReadDictNullable(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a dictionary type" )); - pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return ReadBool(stream, version, pool) ? ReadDict(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions) : null; + return ReadBool(stream, context) ? ReadDict(stream, type, context, minLen, maxLen) : null; } default: { - if (ReadNumberNullable(stream, version, pool) is not int len) return null; + if (ReadNumberNullable(stream, context) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - ReadDictInt(stream, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len, version.Value, keyOptions, valueOptions, valuesNullable); + ReadDictInt(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len); return res; } } @@ -298,50 +190,32 @@ await ReadDictIntAsync( /// Key type /// Value type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task?> ReadDictNullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task?> ReadDictNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) where tKey : notnull { - pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDictAsync(stream, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken: cancellationToken) - .DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadDictAsync(stream, context, minLen, maxLen).DynamicContext() : null; } default: { - if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Dictionary res = new(len); - await ReadDictIntAsync(stream, res, typeof(tKey), typeof(tValue), len, version.Value, keyOptions, valueOptions, valuesNullable, cancellationToken) - .DynamicContext(); + await ReadDictIntAsync(context, res, typeof(tKey), typeof(tValue), len).DynamicContext(); return res; } } @@ -352,65 +226,37 @@ await ReadDictIntAsync(stream, res, typeof(tKey), typeof(tValue), len, version.V /// /// Stream /// Dictionary type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadDictNullableAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? keyOptions = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadDictNullableAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(Dictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a dictionary type" )); - pool ??= StreamSerializer.BufferPool; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDictAsync(stream, type, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken: cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadDictAsync(stream, type, context, minLen, maxLen).DynamicContext() : null; } default: { - if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type[] types = type.GetGenericArguments(); IDictionary res = (IDictionary)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - await ReadDictIntAsync( - stream, - res, - type.GenericTypeArguments[0], - type.GenericTypeArguments[1], - len, - version.Value, - keyOptions, - valueOptions, - valuesNullable, - cancellationToken - ).DynamicContext(); + await ReadDictIntAsync(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len).DynamicContext(); return res; } } @@ -419,373 +265,178 @@ await ReadDictIntAsync( /// /// Read dictionary items /// - /// Stream + /// Context /// Dictionary /// Key type /// Value type /// Number of items - /// Serializer version - /// Key serializer options - /// Value serializer options - /// Are the values nullable? [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void ReadDictInt( - Stream stream, - IDictionary dict, - Type keyType, - Type valueType, - int count, - int version, - ISerializerOptions? keyOptions, - ISerializerOptions? valueOptions, - bool valuesNullable - ) + private static void ReadDictInt(IDeserializationContext context, IDictionary dict, Type keyType, Type valueType, int count) { - switch (version & byte.MaxValue)// Serializer version switch + using ContextRecursion cr = new(context); + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - for (int i = 0; i < count; i++) dict[ReadObject(stream, keyType, version, keyOptions)] = ReadObject(stream, valueType, version, valueOptions); + for (int i = 0; i < count; i++) dict[ReadObject(context.Stream, keyType, context)] = ReadObject(context.Stream, valueType, context); } break; default: + try { + ISerializerOptions? options = context.Options, + keyOptions = options?.KeyOptions, + valueOptions = options?.ValueOptions; + bool hasOptions = keyOptions != null || valueOptions != null; + using ItemDeserializerContext keyContext = new(context, objectCache: false); + using ItemDeserializerContext valueContext = new(context) + { + Nullable = valueOptions?.IsNullable ?? context.Nullable + }; object key; object? value; - (SerializerTypes keySerializer, StreamSerializer.Deserialize_Delegate? keySyncDeserializer, _) = keyType.GetItemDeserializerInfo(isAsync: false); - (SerializerTypes valueSerializer, StreamSerializer.Deserialize_Delegate? valueSyncDeserializer, _) = valueType.GetItemDeserializerInfo(isAsync: false); - Type? keyItemType = null, - valueItemType = null; - ObjectTypes keyObjType = default, - valueObjType = default, - lastKeyObjType = default, - lastValueObjType = default; - SerializerTypes keyItemSerializer = default, - valueItemSerializer = default; - StreamSerializer.Deserialize_Delegate? keyItemSyncDeserializer = null, - valueItemSyncDeserializer = null; - Type[]? keyTypeCache = null, - typeCache = null; - object[]? objectCache = null; - Span keyTypeCacheSpan, - typeCacheSpan; - ReadOnlySpan keyObjectCacheSpan, - objectCacheSpan; + (keyContext.ItemSerializer, keyContext.ItemSyncDeserializer, _) = keyType.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: false); + (valueContext.ItemSerializer, valueContext.ItemSyncDeserializer, _) = valueType.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: false); object? obj; - int objIndex; - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - try + for (int i = 0; i < count; i++) { - if (keySerializer == SerializerTypes.Any) + if (hasOptions) context.WithOptions(keyOptions); + if (keyContext.ItemSerializer == SerializerTypes.Any) { - keyTypeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - keyTypeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); - keyObjectCacheSpan = Array.Empty().AsSpan(); + ReadAnyItemHeader(keyContext, i, keyType); + key = (keyContext.ItemSerializer == SerializerTypes.Serializer + ? ReadItem(keyContext) + : ReadAnyInt(context, keyContext.ObjectType, keyContext.ItemType))!; } else { - keyTypeCacheSpan = Array.Empty().AsSpan(); - keyObjectCacheSpan = Array.Empty().AsSpan(); + key = ReadItem(keyContext)!; } - if (valueSerializer == SerializerTypes.Any) + if (hasOptions) context.WithOptions(valueOptions); + if (valueContext.ItemSerializer == SerializerTypes.Any) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); - } - else - { - typeCacheSpan = Array.Empty().AsSpan(); - objectCacheSpan = Array.Empty().AsSpan(); - } - for (int i = 0; i < count; i++) - { - if (keySerializer == SerializerTypes.Any) - { - ReadAnyItemHeader( - stream, - version, - keyType, - i, - keyTypeCacheSpan, - keyObjectCacheSpan, - ref keyObjType, - ref lastKeyObjType, - ref keyItemType, - ref keyItemSerializer, - ref keyItemSyncDeserializer - ); - key = (keyItemSerializer == SerializerTypes.Serializer - ? ReadItem(stream, version, nullable: false, keyItemSerializer, keyType, pool: null, keyOptions, keyItemSyncDeserializer) - : ReadAnyInt(stream, version, keyObjType, keyItemType, keyOptions))!; - } - else + obj = ReadAnyItemHeader(valueContext, i, valueType); + if (obj == null && valueContext.ObjectType == ObjectTypes.Null) { - key = ReadItem(stream, version, nullable: false, keySerializer, keyType, pool: null, keyOptions, keySyncDeserializer)!; + if (!context.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + value = null; } - if (valueSerializer == SerializerTypes.Any) + if (obj == null) { - obj = ReadAnyItemHeader( - stream, - version, - valueType, - i, - typeCacheSpan, - objectCacheSpan, - ref valueObjType, - ref lastValueObjType, - ref valueItemType, - ref valueItemSerializer, - ref valueItemSyncDeserializer - ); - if (obj == null && valueObjType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - value = null; - } - if (obj == null) - { - value = (valueItemSerializer == SerializerTypes.Serializer - ? ReadItem(stream, version, nullable: false, valueItemSerializer, valueType, pool: null, valueOptions, valueItemSyncDeserializer) - : ReadAnyInt(stream, version, valueObjType, valueItemType, valueOptions))!; - objIndex = objectCache!.IndexOf(null); - if (objIndex != -1) objectCache![objIndex] = value!; - } - else - { - value = obj; - } + value = (valueContext.ItemSerializer == SerializerTypes.Serializer + ? ReadItem(valueContext) + : ReadAnyInt(context, valueContext.ObjectType, valueContext.ItemType))!; + if (valueContext.ObjectType.RequiresObjectWriting()) valueContext.AddObject(value); } else { - value = ReadItem(stream, version, valuesNullable, valueSerializer, valueType, pool: null, valueOptions, valueSyncDeserializer)!; + value = obj; } - dict[key] = value; } - } - finally - { - if (keyTypeCache != null) ArrayPool.Shared.Return(keyTypeCache); - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); + else + { + value = ReadItem(valueContext)!; + } + dict[key] = value; } break; } + finally + { + context.WithoutOptions(); + } } } /// /// Read dictionary items /// - /// Stream + /// Context /// Dictionary /// Key type /// Value type /// Number of items - /// Serializer version - /// Key serializer options - /// Value serializer options - /// Are the values nullable? - /// Cancellation token [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static async Task ReadDictIntAsync( - Stream stream, - IDictionary dict, - Type keyType, - Type valueType, - int count, - int version, - ISerializerOptions? keyOptions, - ISerializerOptions? valueOptions, - bool valuesNullable, - CancellationToken cancellationToken - ) + private static async Task ReadDictIntAsync(IDeserializationContext context, IDictionary dict, Type keyType, Type valueType, int count) { - switch (version & byte.MaxValue)// Serializer version switch + using ContextRecursion cr = new(context); + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { for (int i = 0; i < count; i++) - dict[await ReadObjectAsync(stream, keyType, version, keyOptions, cancellationToken).DynamicContext()] = - await ReadObjectAsync(stream, valueType, version, valueOptions, cancellationToken).DynamicContext(); + dict[await ReadObjectAsync(context.Stream, keyType, context).DynamicContext()] = + await ReadObjectAsync(context.Stream, valueType, context).DynamicContext(); } break; default: + try { + ISerializerOptions? options = context.Options, + keyOptions = options?.KeyOptions, + valueOptions = options?.ValueOptions; + bool hasOptions = keyOptions != null || valueOptions != null; + using ItemDeserializerContext keyContext = new(context, objectCache: false); + using ItemDeserializerContext valueContext = new(context) + { + Nullable = valueOptions?.IsNullable ?? context.Nullable + }; object key; object? value; - ( - SerializerTypes keySerializer, - StreamSerializer.Deserialize_Delegate? keySyncDeserializer, - StreamSerializer.AsyncDeserialize_Delegate? keyAsyncDeserializer - ) = - keyType.GetItemDeserializerInfo(isAsync: true); - ( - SerializerTypes valueSerializer, - StreamSerializer.Deserialize_Delegate? valueSyncDeserializer, - StreamSerializer.AsyncDeserialize_Delegate? valueAsyncDeserializer - ) = - valueType.GetItemDeserializerInfo(isAsync: true); - Type? keyItemType = null, - valueItemType = null; - ObjectTypes keyObjType = default, - valueObjType = default, - lastKeyObjType = default, - lastValueObjType = default; - SerializerTypes keyItemSerializer = default, - valueItemSerializer = default; - StreamSerializer.Deserialize_Delegate? keyItemSyncDeserializer = null, - valueItemSyncDeserializer = null; - StreamSerializer.AsyncDeserialize_Delegate? keyItemAsyncDeserializer = null, - valueItemAsyncDeserializer = null; - Type[]? keyTypeCache = null, - typeCache = null; - object[]? objectCache = null; - Memory keyTypeCacheMem, - typeCacheMem; - ReadOnlyMemory keyObjectCacheMem, - objectCacheMem; + (keyContext.ItemSerializer, keyContext.ItemSyncDeserializer, keyContext.ItemAsyncDeserializer) = + keyType.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: true); + (valueContext.ItemSerializer, valueContext.ItemSyncDeserializer, valueContext.ItemAsyncDeserializer) = + valueType.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: true); object? obj; - int objIndex; - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - try + for (int i = 0; i < count; i++) { - if (keySerializer == SerializerTypes.Any) + if (hasOptions) context.WithOptions(keyOptions); + if (keyContext.ItemSerializer == SerializerTypes.Any) { - keyTypeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - keyTypeCacheMem = typeCache.AsMemory(0, byte.MaxValue); - keyObjectCacheMem = Array.Empty().AsMemory(); + await ReadAnyItemHeaderAsync(keyContext, i, keyType).DynamicContext(); + key = (keyContext.ItemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync(keyContext).DynamicContext() + : await ReadAnyIntAsync(context, keyContext.ObjectType, keyContext.ItemType).DynamicContext())!; } else { - keyTypeCacheMem = Array.Empty().AsMemory(); - keyObjectCacheMem = Array.Empty().AsMemory(); + key = (await ReadItemAsync(keyContext).DynamicContext())!; } - if (valueSerializer == SerializerTypes.Any) + if (hasOptions) context.WithOptions(valueOptions); + if (valueContext.ItemSerializer == SerializerTypes.Any) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); - } - else - { - typeCacheMem = Array.Empty().AsMemory(); - objectCacheMem = Array.Empty().AsMemory(); - } - for (int i = 0; i < count; i++) - { - if (keySerializer == SerializerTypes.Any) - { - (obj, keyObjType, lastKeyObjType, keyItemType, keyItemSerializer, keyItemSyncDeserializer, keyItemAsyncDeserializer) = - await ReadAnyItemHeaderAsync( - stream, - version, - keyType, - i, - keyTypeCacheMem, - keyObjectCacheMem, - lastKeyObjType, - keyItemType, - keyItemSerializer, - keyItemSyncDeserializer, - keyItemAsyncDeserializer, - cancellationToken - ); - key = (keyItemSerializer == SerializerTypes.Serializer - ? await ReadItemAsync( - stream, - version, - nullable: false, - keyItemSerializer, - keyItemType, - pool: null, - keyOptions, - keyItemSyncDeserializer, - keyItemAsyncDeserializer, - cancellationToken - ).DynamicContext() - : await ReadAnyIntAsync(stream, version, keyObjType, keyItemType, keyOptions, cancellationToken).DynamicContext())!; - } - else + obj = await ReadAnyItemHeaderAsync(valueContext, i, valueType).DynamicContext(); + if (obj == null && valueContext.ObjectType == ObjectTypes.Null) { - key = ReadItem(stream, version, nullable: false, keySerializer, keyType, pool: null, keyOptions, keySyncDeserializer)!; + if (!context.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + value = null; } - if (valueSerializer == SerializerTypes.Any) + if (obj == null) { - (obj, valueObjType, lastValueObjType, valueItemType, valueItemSerializer, valueItemSyncDeserializer, valueItemAsyncDeserializer) = - await ReadAnyItemHeaderAsync( - stream, - version, - valueType, - i, - typeCacheMem, - objectCacheMem, - lastValueObjType, - valueItemType, - valueItemSerializer, - valueItemSyncDeserializer, - valueItemAsyncDeserializer, - cancellationToken - ).DynamicContext(); - if (obj == null && valueObjType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - value = null; - } - else if (obj == null) - { - value = (valueItemSerializer == SerializerTypes.Serializer - ? await ReadItemAsync( - stream, - version, - nullable: false, - valueItemSerializer, - valueType, - pool: null, - valueOptions, - valueItemSyncDeserializer, - valueItemAsyncDeserializer, - cancellationToken - ).DynamicContext() - : await ReadAnyIntAsync(stream, version, valueObjType, valueItemType, valueOptions, cancellationToken).DynamicContext())!; - objIndex = objectCache!.IndexOf(null); - if (objIndex != -1) objectCache![objIndex] = value!; - } - else - { - value = obj; - } + value = (valueContext.ItemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync(valueContext).DynamicContext() + : await ReadAnyIntAsync(context, valueContext.ObjectType, valueContext.ItemType).DynamicContext()); + if (valueContext.ObjectType.RequiresObjectWriting()) valueContext.AddObject(value); } else { - value = (await ReadItemAsync( - stream, - version, - valuesNullable, - valueSerializer, - valueType, - pool: null, - valueOptions, - valueSyncDeserializer, - valueAsyncDeserializer, - cancellationToken - ).DynamicContext())!; + value = obj; } - dict[key] = value; } - } - finally - { - if (keyTypeCache != null) ArrayPool.Shared.Return(keyTypeCache); - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); + else + { + value = await ReadItemAsync(valueContext).DynamicContext(); + } + dict[key] = value; } break; } + finally + { + context.WithoutOptions(); + } } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs index 2625aed..1d7afb2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -13,48 +12,48 @@ public static partial class StreamExtensions /// /// Enumeration type /// Stream - /// Serializer version - /// Array pool + /// Context /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T ReadEnum(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum - => (T)ReadEnumInt(stream, typeof(T), version, numberType: null, pool); +#pragma warning disable IDE0060 // Remove unused argument + public static T ReadEnum(this Stream stream, IDeserializationContext context) where T : struct, Enum +#pragma warning restore IDE0060 // Remove unused argument + => (T)ReadEnumInt(context, typeof(T), numberType: null); /// /// Read /// /// Stream /// Enumeration type - /// Serializer version - /// Array pool + /// Context /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Enum ReadEnum(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) - => ReadEnumInt(stream, type, version, numberType: null, pool); +#pragma warning disable IDE0060 // Remove unused argument + public static Enum ReadEnum(this Stream stream, Type type, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadEnumInt(context, type, numberType: null); /// /// Read /// - /// Stream + /// Context /// Enumeration type - /// Serializer version /// Number type - /// Array pool /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Enum ReadEnumInt(Stream stream, Type type, int? version, NumberTypes? numberType, ArrayPool? pool) + private static Enum ReadEnumInt(IDeserializationContext context, Type type, NumberTypes? numberType) => SerializerException.Wrap(() => { IEnumInfo info = type.GetEnumInfo(); - numberType ??= (NumberTypes)ReadOneByte(stream, version); + numberType ??= (NumberTypes)ReadOneByte(context.Stream, context); if (numberType == NumberTypes.Default) return info.DefaultValue; - Enum res = (Enum)Enum.ToObject(type, ReadNumberInt(stream, type.GetEnumUnderlyingType()!, version, numberType, pool)); + Enum res = (Enum)Enum.ToObject(type, ReadNumberInt(context, type.GetEnumUnderlyingType()!, numberType)); if (!info.IsValidValue(res)) throw new SerializerException($"Unknown enumeration value {res} for {type}"); return res; }); @@ -64,52 +63,48 @@ private static Enum ReadEnumInt(Stream stream, Type type, int? version, NumberTy /// /// Enumeration type /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadEnumAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - where T : struct, Enum - => (T)await ReadEnumIntAsync(stream, typeof(T), version, numberType: null, pool, cancellationToken).DynamicContext(); +#pragma warning disable IDE0060 // Remove unused argument + public static async Task ReadEnumAsync(this Stream stream, IDeserializationContext context) where T : struct, Enum +#pragma warning restore IDE0060 // Remove unused argument + => (T)await ReadEnumIntAsync(context, typeof(T), numberType: null).DynamicContext(); /// /// Read /// /// Stream /// Enumeration type - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task ReadEnumAsync(this Stream stream, Type type, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadEnumIntAsync(stream, type, version, numberType: null, pool, cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadEnumAsync(this Stream stream, Type type, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => ReadEnumIntAsync(context, type, numberType: null); /// /// Read /// - /// Stream + /// Context /// Enumeration type - /// Serializer version /// Number type - /// Array pool - /// Cancellation token /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Task ReadEnumIntAsync(Stream stream, Type type, int? version, NumberTypes? numberType, ArrayPool? pool, CancellationToken cancellationToken) + private static Task ReadEnumIntAsync(IDeserializationContext context, Type type, NumberTypes? numberType) => SerializerException.WrapAsync(async () => { IEnumInfo info = type.GetEnumInfo(); - numberType ??= (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); + numberType ??= (NumberTypes)await ReadOneByteAsync(context.Stream, context).DynamicContext(); if (numberType == NumberTypes.Default) return info.DefaultValue; - Enum res = (Enum)Enum.ToObject(type, await ReadNumberIntAsync(stream, type.GetEnumUnderlyingType(), version, numberType, pool, cancellationToken).DynamicContext()); + Enum res = (Enum)Enum.ToObject(type, await ReadNumberIntAsync(context, type.GetEnumUnderlyingType(), numberType).DynamicContext()); if (!info.IsValidValue(res)) throw new SerializerException($"Unknown enumeration value {res} for {type}"); return res; }); @@ -119,25 +114,24 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// /// Enumeration type /// Stream - /// Serializer version - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T? ReadEnumNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum + public static T? ReadEnumNullable(this Stream stream, IDeserializationContext context) where T : struct, Enum { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return ReadBool(stream, version, pool) ? ReadEnum(stream, version, pool) : null; + return ReadBool(stream, context) ? ReadEnum(stream, context) : null; } default: { - NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); - return numberType == NumberTypes.Null ? null : (T?)ReadEnumInt(stream, typeof(T), version, numberType, pool); + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull ? null : (T?)ReadEnumInt(context, typeof(T), numberType); } } } @@ -147,29 +141,28 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// /// Stream /// Enumeration type - /// Serializer version - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Enum? ReadEnumNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) + public static Enum? ReadEnumNullable(this Stream stream, Type type, IDeserializationContext context) { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return ReadBool(stream, version, pool) - ? ReadEnum(stream, type, version, pool) + return ReadBool(stream, context) + ? ReadEnum(stream, type, context) : null; } default: { - NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); - return numberType == NumberTypes.Null + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull ? null - : ReadEnumInt(stream, type, version, numberType, pool); + : ReadEnumInt(context, type, numberType); } } } @@ -179,31 +172,29 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// /// Enumeration type /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadEnumNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + public static async Task ReadEnumNullableAsync(this Stream stream, IDeserializationContext context) where T : struct, Enum { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadEnumAsync(stream, context).DynamicContext() : null; } default: { - NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull ? null - : (T)await ReadEnumIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken).DynamicContext(); + : (T)await ReadEnumIntAsync(context, typeof(T), numberType).DynamicContext(); } } } @@ -213,36 +204,28 @@ private static Task ReadEnumIntAsync(Stream stream, Type type, int? versio /// /// Stream /// Enumeration type - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadEnumNullableAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) + public static async Task ReadEnumNullableAsync(this Stream stream, Type type, IDeserializationContext context) { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadEnumAsync(stream, type, version, pool, cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadEnumAsync(stream, type, context).DynamicContext() : null; } default: { - NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull ? null - : await ReadEnumIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); + : await ReadEnumIntAsync(context, type, numberType).DynamicContext(); } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs index 0d82877..2d645bf 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs @@ -1,6 +1,4 @@ -using System.Buffers; -using System.Diagnostics; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -15,23 +13,13 @@ public static partial class StreamExtensions /// Element type /// Stream /// Array - /// Serializer version - /// Value deserializer options - /// Are the values nullable? - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T[] ReadFixedArray( - this Stream stream, - T[] arr, - int? version = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - ArrayPool? pool = null - ) + public static T[] ReadFixedArray(this Stream stream, T[] arr, IDeserializationContext context) { - ReadFixedArray(stream, arr.AsSpan(), version, valueOptions, valuesNullable, pool); + ReadFixedArray(stream, arr.AsSpan(), context); return arr; } @@ -41,114 +29,69 @@ public static T[] ReadFixedArray( /// Element type /// Stream /// Array - /// Serializer version - /// Value deserializer options - /// Are the values nullable? - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Span ReadFixedArray( - this Stream stream, - Span arr, - int? version = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - ArrayPool? pool = null - ) + public static Span ReadFixedArray(this Stream stream, Span arr, IDeserializationContext context) { + using ContextRecursion cr = new(context); try { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - for (int i = 0, len = arr.Length; i < len; arr[i] = ReadObject(stream, version, valueOptions), i++) ; + for (int i = 0, len = arr.Length; i < len; arr[i] = ReadObject(stream, context), i++) ; return arr; } default: + try { Type type = typeof(T); - (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, _) = type.GetItemDeserializerInfo(isAsync: false); - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - if (serializer == SerializerTypes.Any) + using ItemDeserializerContext itemContext = new(context) + { + Nullable = context.Options?.IsNullable ?? context.Nullable + }; + (itemContext.ItemSerializer, itemContext.ItemSyncDeserializer, _) = type.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Span typeCacheSpan; - ReadOnlySpan objectCacheSpan; object? obj; - int objIndex; - try + for (int i = 0, len = arr.Length; i < len; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); - for (int i = 0, len = arr.Length; i < len; i++) + obj = ReadAnyItemHeader(itemContext, i, type); + Logging.WriteInfo($"READ {i} {stream.Position} {itemContext.ObjectType} {(int)itemContext.ObjectType} {itemContext.ItemType} {obj}"); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - obj = ReadAnyItemHeader( - stream, - version.Value, - type, - i, - typeCache, - objectCache, - ref objType, - ref lastObjType, - ref itemType, - ref itemSerializer, - ref itemSyncDeserializer - ); - Logging.WriteInfo($"READ {i} {stream.Position} {objType} {(int)objType} {itemType} {obj}"); - if (obj == null && objType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - arr[i] = (T?)obj!; - } - else if (obj == null) - { - arr[i] = (itemSerializer == SerializerTypes.Serializer - ? (T?)(obj = ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool, valueOptions, itemSyncDeserializer)) - : (T?)(obj = ReadAnyInt(stream, version.Value, objType, itemType, valueOptions)))!; - if (obj!.GetObjectSerializerInfo().WriteObject) - { - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - Logging.WriteInfo($"\t\tRED {obj} {stream.Position} {objIndex}"); - } - else - { - Logging.WriteInfo($"\t\tRED {obj} {stream.Position}"); - } - } - else - { - arr[i] = (T)obj; - } + if (!itemContext.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + arr[i] = (T?)obj!; + } + else if (obj == null) + { + arr[i] = (itemContext.ItemSerializer == SerializerTypes.Serializer + ? (T?)(obj = ReadItem(itemContext)) + : (T?)(obj = ReadAnyInt(context, itemContext.ObjectType, itemContext.ItemType)))!; + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + arr[i] = (T)obj; } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } } else { - for (int i = 0, len = arr.Length; i < len; i++) - arr[i] = (T)ReadItem(stream, version.Value, valuesNullable, serializer, type, pool, valueOptions, syncDeserializer)!; + for (int i = 0, len = arr.Length; i < len; arr[i] = (T)ReadItem(itemContext)!, i++) ; } return arr; } + finally + { + context.WithoutOptions(); + } } } catch (SerializerException) @@ -166,105 +109,67 @@ ref itemSyncDeserializer /// /// Stream /// Array - /// Serializer version - /// Value deserializer options - /// Are the values nullable? - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Array ReadFixedArray( - this Stream stream, - Array arr, - int? version = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - ArrayPool? pool = null - ) + public static Array ReadFixedArray(this Stream stream, Array arr, IDeserializationContext context) { + using ContextRecursion cr = new(context); Type elementType = arr.GetType().GetElementType()!; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - for (int i = 0, len = arr.Length; i < len; arr.SetValue(ReadObject(stream, elementType, version, valueOptions), i), i++) ; + for (int i = 0, len = arr.Length; i < len; arr.SetValue(ReadObject(stream, elementType, context), i), i++) ; return arr; } default: + try { Type type = arr.GetType().GetElementType()!; - (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, _) = type.GetItemDeserializerInfo(isAsync: false); - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - if (serializer == SerializerTypes.Any) + using ItemDeserializerContext itemContext = new(context) + { + Nullable = context.Options?.IsNullable ?? context.Nullable + }; + (itemContext.ItemSerializer, itemContext.ItemSyncDeserializer, _) = type.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Span typeCacheSpan; - ReadOnlySpan objectCacheSpan; object? obj; - int objIndex; - try + for (int i = 0, len = arr.Length; i < len; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); - for (int i = 0, len = arr.Length; i < len; i++) + obj = ReadAnyItemHeader(itemContext, i, type); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - obj = ReadAnyItemHeader( - stream, - version.Value, - type, - i, - typeCache, - objectCache, - ref objType, - ref lastObjType, - ref itemType, - ref itemSerializer, - ref itemSyncDeserializer - ); - if (obj == null && objType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - arr.SetValue(null, i); - } - else if (obj == null) - { - arr.SetValue(obj = itemSerializer == SerializerTypes.Serializer - ? ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool, valueOptions, itemSyncDeserializer) - : ReadAnyInt(stream, version.Value, objType, itemType, valueOptions), - i); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - arr.SetValue(obj, i); - } + if (!itemContext.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + arr.SetValue(obj, i); + } + else if (obj == null) + { + arr.SetValue((itemContext.ItemSerializer == SerializerTypes.Serializer + ? obj = ReadItem(itemContext) + : obj = ReadAnyInt(context, itemContext.ObjectType, itemContext.ItemType))!, i); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + arr.SetValue(obj, i); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } } else { - for (int i = 0, len = arr.Length; i < len; i++) - arr.SetValue(ReadItem(stream, version.Value, valuesNullable, serializer, type, pool, valueOptions, syncDeserializer)!, i); + for (int i = 0, len = arr.Length; i < len; arr.SetValue(ReadItem(itemContext), i), i++) ; } return arr; } + finally + { + context.WithoutOptions(); + } } } @@ -274,25 +179,13 @@ ref itemSyncDeserializer /// Element type /// Stream /// Array - /// Serializer version - /// Value deserializer options - /// Are the values nullable? - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadFixedArrayAsync( - this Stream stream, - T[] arr, - int? version = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) + public static async Task ReadFixedArrayAsync(this Stream stream, T[] arr, IDeserializationContext context) { - await ReadFixedArrayAsync(stream, arr.AsMemory(), version, valueOptions, valuesNullable, pool, cancellationToken).DynamicContext(); + await ReadFixedArrayAsync(stream, arr.AsMemory(), context).DynamicContext(); return arr; } @@ -302,140 +195,73 @@ public static async Task ReadFixedArrayAsync( /// Element type /// Stream /// Array - /// Serializer version - /// Value deserializer options - /// Are the values nullable? - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task> ReadFixedArrayAsync( - this Stream stream, - Memory arr, - int? version = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) + public static async Task> ReadFixedArrayAsync(this Stream stream, Memory arr, IDeserializationContext context) { + using ContextRecursion cr = new(context); T? item; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { for (int i = 0, len = arr.Length; i < len; i++) { - item = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(); + item = await ReadObjectAsync(stream, context).DynamicContext(); arr.Span[i] = item; } return arr; } default: + try { Type type = typeof(T); - (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = - type.GetItemDeserializerInfo(isAsync: true); - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - if (serializer == SerializerTypes.Any) + using ItemDeserializerContext itemContext = new(context) + { + Nullable = context.Options?.IsNullable ?? context.Nullable + }; + (itemContext.ItemSerializer, itemContext.ItemSyncDeserializer, itemContext.ItemAsyncDeserializer) = + type.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Memory typeCacheMem; - ReadOnlyMemory objectCacheMem; object? obj; - int objIndex; - try + for (int i = 0, len = arr.Length; i < len; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); - for (int i = 0, len = arr.Length; i < len; i++) + obj = await ReadAnyItemHeaderAsync(itemContext, i, type).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = - await ReadAnyItemHeaderAsync( - stream, - version.Value, - type, - i, - typeCacheMem, - objectCacheMem, - lastObjType, - itemType, - itemSerializer, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext(); - if (obj == null && objType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - item = default; - } - else if (obj == null) - { - item = (itemSerializer == SerializerTypes.Serializer - ? (T?)await ReadItemAsync( - stream, - version.Value, - nullable: false, - itemSerializer, - itemType, - pool, - valueOptions, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext() - : (T?)await ReadAnyIntAsync(stream, version.Value, lastObjType, itemType, valueOptions, cancellationToken).DynamicContext())!; - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = item!; - } - else - { - item = (T)obj; - } - arr.Span[i] = item!; + if (!itemContext.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + arr.Span[i] = (T?)obj!; + } + else if (obj == null) + { + obj = itemContext.ItemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync(itemContext).DynamicContext() + : await ReadAnyIntAsync(context, itemContext.ObjectType, itemContext.ItemType).DynamicContext(); + arr.Span[i] = (T?)obj!; + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + arr.Span[i] = (T)obj; } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } } else { - for (int i = 0, len = arr.Length; i < len; i++) - { - item = (T)(await ReadItemAsync( - stream, - version.Value, - valuesNullable, - serializer, - type, - pool, - valueOptions, - syncDeserializer, - asyncDeserializer, - cancellationToken - ).DynamicContext())!; - arr.Span[i] = item; - } + for (int i = 0, len = arr.Length; i < len; item = (T)(await ReadItemAsync(itemContext).DynamicContext())!, arr.Span[i] = item, i++) ; } return arr; } + finally + { + context.WithoutOptions(); + } } } @@ -444,28 +270,17 @@ await ReadAnyItemHeaderAsync( /// /// Stream /// Array - /// Serializer version - /// Value deserializer options - /// Are the values nullable? - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadFixedArrayAsync( - this Stream stream, - Array arr, - int? version = null, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) + public static async Task ReadFixedArrayAsync(this Stream stream, Array arr, IDeserializationContext context) { + using ContextRecursion cr = new(context); Type elementType = arr.GetType().GetElementType()!; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: @@ -473,108 +288,54 @@ public static async Task ReadFixedArrayAsync( for ( int i = 0, len = arr.Length; i < len; - arr.SetValue(await ReadObjectAsync(stream, elementType, version, valueOptions, cancellationToken).DynamicContext(), i), i++ + arr.SetValue(await ReadObjectAsync(stream, elementType, context).DynamicContext(), i), i++ ) ; return arr; } default: + try { Type type = arr.GetType().GetElementType()!; - (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = - type.GetItemDeserializerInfo(isAsync: true); - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - if (serializer == SerializerTypes.Any) + using ItemDeserializerContext itemContext = new(context) + { + Nullable = context.Options?.IsNullable ?? context.Nullable + }; + (itemContext.ItemSerializer, itemContext.ItemSyncDeserializer, itemContext.ItemAsyncDeserializer) = + type.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Memory typeCacheMem; - ReadOnlyMemory objectCacheMem; object? obj; - int objIndex; - try + for (int i = 0, len = arr.Length; i < len; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); - for (int i = 0, len = arr.Length; i < len; i++) + obj = await ReadAnyItemHeaderAsync(itemContext, i, type).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = - await ReadAnyItemHeaderAsync( - stream, - version.Value, - type, - i, - typeCacheMem, - objectCacheMem, - lastObjType, - itemType, - itemSerializer, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext(); - if (obj == null && objType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - arr.SetValue(null, i); - } - else if (obj == null) - { - arr.SetValue(obj = itemSerializer == SerializerTypes.Serializer - ? await ReadItemAsync( - stream, - version.Value, - nullable: false, - itemSerializer, - itemType, - pool, - valueOptions, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext() - : await ReadAnyIntAsync(stream, version.Value, objType, itemType, valueOptions, cancellationToken).DynamicContext(), - i); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - arr.SetValue(obj, i); - } + if (!itemContext.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + arr.SetValue(obj, i); + } + else if (obj == null) + { + arr.SetValue((itemContext.ItemSerializer == SerializerTypes.Serializer + ? obj = await ReadItemAsync(itemContext).DynamicContext() + : obj = await ReadAnyIntAsync(context, itemContext.ObjectType, itemContext.ItemType).DynamicContext()), i); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + arr.SetValue(obj, i); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } } else { - for (int i = 0, len = arr.Length; i < len; i++) - arr.SetValue(await ReadItemAsync( - stream, - version.Value, - valuesNullable, - serializer, - type, - pool, - valueOptions, - syncDeserializer, - asyncDeserializer, - cancellationToken - ).DynamicContext(), i); + for (int i = 0, len = arr.Length; i < len; arr.SetValue(await ReadItemAsync(itemContext).DynamicContext(), i), i++) ; } return arr; } + finally + { + context.WithoutOptions(); + } } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs index 53a6777..5de07b1 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs @@ -1,6 +1,4 @@ -using System.Buffers; -using System.Diagnostics; -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -11,298 +9,237 @@ public static partial class StreamExtensions /// /// Read an item using a specified serializer /// - /// Stream - /// Serializer version - /// Nullable? - /// Serializer type - /// Type - /// Array pool - /// Serializer options - /// Synchronous deserializer - /// Stream + /// Context + /// Item #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static dynamic? ReadItem( - Stream stream, - int version, - bool nullable, - SerializerTypes serializer, - Type? type = null, - ArrayPool? pool = null, - ISerializerOptions? options = null, - StreamSerializer.Deserialize_Delegate? syncDeserializer = null - ) + public static dynamic? ReadItem(ItemDeserializerContext context) { - if (!nullable) + IDeserializationContext dc = context.Context; + Type? type = context.ItemType; + if (!context.Nullable) { - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return ReadSerializedObject(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); + case SerializerTypes.StreamSerializer: return ReadSerializedObject(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); case SerializerTypes.Serializer: { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); - return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncDeserializer, "Missing serializer")); + return SerializerException.Wrap(() => context.ItemSyncDeserializer!(dc, SerializerHelper.EnsureNotNull(type, nameof(type)))) ?? throw new SerializerException($"{type} deserialized to NULL"); } - case SerializerTypes.Any: return ReadAny(stream, version, options); - case SerializerTypes.AnyObject: return ReadAnyObject(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); - case SerializerTypes.Bool: return ReadBool(stream, version, pool); - case SerializerTypes.Number: return ReadNumber(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); - case SerializerTypes.Enum: return ReadEnum(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); - case SerializerTypes.String: return ReadString(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); - case SerializerTypes.String16: return ReadString16(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); - case SerializerTypes.String32: return ReadString32(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); - case SerializerTypes.Bytes: return ReadBytes(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).Value; - case SerializerTypes.Array: return ReadArray(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); - case SerializerTypes.List: return ReadList(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); - case SerializerTypes.Dictionary: return ReadDict(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions); + case SerializerTypes.Any: return ReadAny(dc.Stream, dc); + case SerializerTypes.AnyObject: return ReadAnyObject(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.Bool: return ReadBool(dc.Stream, dc); + case SerializerTypes.Number: return ReadNumber(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.Enum: return ReadEnum(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.String: return ReadString(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String16: return ReadString16(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String32: return ReadString32(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.Bytes: return ReadBytes(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).Value; + case SerializerTypes.Array: return ReadArray(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.List: return ReadList(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.Dictionary: return ReadDict(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); case SerializerTypes.Struct: - return ReadStructMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool) + return ReadStructMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, dc.Stream, dc) ?? throw new SerializerException($"{nameof(ReadStruct)} serialized {type} to NULL"); - case SerializerTypes.Stream: return ReadStream(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Stream: return ReadStream(dc.Stream, SerializerHelper.EnsureNotNull(dc.Options?.Attribute?.GetStream(null, null, dc), nameof(ISerializerOptions.Attribute)), dc, maxBufferSize: null, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); + case SerializerTypes.Type: return ReadType(dc.Stream, dc); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return ReadSerializedObjectNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); + case SerializerTypes.StreamSerializer: return ReadSerializedObjectNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); case SerializerTypes.Serializer: { - if (!ReadBool(stream, version, pool)) return null; - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); - return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + if (!ReadBool(dc.Stream, dc)) return null; + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncDeserializer, "Missing serializer")); + return SerializerException.Wrap(() => context.ItemSyncDeserializer!(dc, SerializerHelper.EnsureNotNull(type, nameof(type)))) ?? throw new SerializerException($"{type} deserialized to NULL"); } - case SerializerTypes.Any: return ReadAnyNullable(stream, version, options); - case SerializerTypes.AnyObject: return ReadAnyObjectNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version); - case SerializerTypes.Bool: return ReadBoolNullable(stream, version, pool); - case SerializerTypes.Number: return ReadNumberNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); - case SerializerTypes.Enum: return ReadEnumNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool); - case SerializerTypes.String: return ReadStringNullable(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); - case SerializerTypes.String16: return ReadString16Nullable(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); - case SerializerTypes.String32: return ReadString32Nullable(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); - case SerializerTypes.Bytes: return ReadBytesNullable(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue)?.Value; - case SerializerTypes.Array: return ReadArrayNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); - case SerializerTypes.List: return ReadListNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions); - case SerializerTypes.Dictionary: return ReadDictNullable(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions); - case SerializerTypes.Struct: return ReadStructNullableMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool); - case SerializerTypes.Stream: return ReadStreamNullable(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Any: return ReadAnyNullable(dc.Stream, dc); + case SerializerTypes.AnyObject: return ReadAnyObjectNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.Bool: return ReadBoolNullable(dc.Stream, dc); + case SerializerTypes.Number: return ReadNumberNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.Enum: return ReadEnumNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.String: return ReadStringNullable(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String16: return ReadString16Nullable(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.String32: return ReadString32Nullable(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.Bytes: return ReadBytesNullable(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue)?.Value; + case SerializerTypes.Array: return ReadArrayNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.List: return ReadListNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.Dictionary: return ReadDictNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue); + case SerializerTypes.Struct: return ReadStructNullableMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, dc.Stream, dc); + case SerializerTypes.Stream: return ReadStreamNullable(dc.Stream, SerializerHelper.EnsureNotNull(dc.Options?.Attribute?.GetStream(null, null, dc), nameof(ISerializerOptions.Attribute)), dc, maxBufferSize: null, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); + case SerializerTypes.Type: return ReadTypeNullable(dc.Stream, dc); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } /// /// Read an item using a specified serializer /// - /// Stream - /// Serializer version - /// Nullable? - /// Serializer type - /// Type - /// Array pool - /// Serializer options - /// Synchronous deserializer - /// Asynchronous deserializer - /// Cancellation token - /// Stream + /// Context + /// Item #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadItemAsync( - Stream stream, - int version, - bool nullable, - SerializerTypes serializer, - Type? type = null, - ArrayPool? pool = null, - ISerializerOptions? options = null, - StreamSerializer.Deserialize_Delegate? syncDeserializer = null, - StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer = null, - CancellationToken cancellationToken = default - ) + public static async Task ReadItemAsync(ItemDeserializerContext context) { - if (!nullable) + IDeserializationContext dc = context.Context; + Type? type = context.ItemType; + if (!context.Nullable) { - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return await ReadSerializedObjectAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); + case SerializerTypes.StreamSerializer: return await ReadSerializedObjectAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); case SerializerTypes.Serializer: { - if (asyncDeserializer == null) + if (context.ItemAsyncDeserializer == null) { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); - return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(context.ItemSyncDeserializer), context, "Missng serializer")); + return SerializerException.Wrap(() => context.ItemSyncDeserializer!(dc, SerializerHelper.EnsureNotNull(type, nameof(type)))) ?? throw new SerializerException($"{type} deserialized to NULL"); } else { - Task task = SerializerException.WrapAsync(() => asyncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options, cancellationToken)); + Task task = SerializerException.WrapAsync(() => context.ItemAsyncDeserializer!(dc, SerializerHelper.EnsureNotNull(type, nameof(type)))); await task.DynamicContext(); return task.GetResult(type!); } } - case SerializerTypes.Any: return await ReadAnyAsync(stream, version, options, cancellationToken).DynamicContext(); - case SerializerTypes.AnyObject: return await ReadAnyObjectAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); - case SerializerTypes.Bool: return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext(); - case SerializerTypes.Number: return await ReadNumberAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); - case SerializerTypes.Enum: return await ReadEnumAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); - case SerializerTypes.String: return await ReadStringAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); - case SerializerTypes.String16: return await ReadString16Async(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); - case SerializerTypes.String32: return await ReadString32Async(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); - case SerializerTypes.Bytes: return (await ReadBytesAsync(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext()).Value; - case SerializerTypes.Array: return await ReadArrayAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.List: return await ReadListAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Dictionary: return await ReadDictAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Any: return await ReadAnyAsync(dc.Stream, dc).DynamicContext(); + case SerializerTypes.AnyObject: return await ReadAnyObjectAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.Bool: return await ReadBoolAsync(dc.Stream, dc).DynamicContext(); + case SerializerTypes.Number: return await ReadNumberAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.Enum: return await ReadEnumAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.String: return await ReadStringAsync(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.String16: return await ReadString16Async(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.String32: return await ReadString32Async(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.Bytes: return (await ReadBytesAsync(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext()).Value; + case SerializerTypes.Array: return await ReadArrayAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.List: return await ReadListAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.Dictionary: return await ReadDictAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); case SerializerTypes.Struct: - return ReadStructMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool) + return ReadStructMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, dc.Stream, dc) ?? throw new SerializerException($"{nameof(ReadStruct)} serialized {type} to NULL"); - case SerializerTypes.Stream: return await ReadStreamAsync(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version, cancellationToken), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue, cancellationToken).DynamicContext(); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Stream: return await ReadStreamAsync(dc.Stream, SerializerHelper.EnsureNotNull(dc.Options?.Attribute?.GetStream(null, null, dc), nameof(ISerializerOptions.Attribute)), dc, maxBufferSize: null, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue).DynamicContext(); + case SerializerTypes.Type: return await ReadTypeAsync(dc.Stream, dc).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return await ReadSerializedObjectNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); + case SerializerTypes.StreamSerializer: return await ReadSerializedObjectNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); case SerializerTypes.Serializer: { - if (!await ReadBoolAsync(stream, version, pool, cancellationToken: cancellationToken).DynamicContext()) return null; - if (asyncDeserializer == null) + if (!await ReadBoolAsync(dc.Stream, dc).DynamicContext()) return null; + if (context.ItemAsyncDeserializer == null) { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncDeserializer), syncDeserializer)); - return SerializerException.Wrap(() => syncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options)) + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncDeserializer, "Missing serializer")); + return SerializerException.Wrap(() => context.ItemSyncDeserializer!(dc, SerializerHelper.EnsureNotNull(type, nameof(type)))) ?? throw new SerializerException($"{type} deserialized to NULL"); } else { - Task task = SerializerException.WrapAsync(() => asyncDeserializer!(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, options, cancellationToken)); + Task task = SerializerException.WrapAsync(() => context.ItemAsyncDeserializer(dc, SerializerHelper.EnsureNotNull(type, nameof(type)))); await task.DynamicContext(); return task.GetResult(type!); } } - case SerializerTypes.Any: return await ReadAnyNullableAsync(stream, version, options, cancellationToken).DynamicContext(); - case SerializerTypes.AnyObject: return await ReadAnyObjectNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, cancellationToken).DynamicContext(); - case SerializerTypes.Bool: return await ReadBoolNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); - case SerializerTypes.Number: return await ReadNumberNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); - case SerializerTypes.Enum: return await ReadEnumNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, cancellationToken).DynamicContext(); - case SerializerTypes.String: return await ReadStringNullableAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); - case SerializerTypes.String16: return await ReadString16NullableAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); - case SerializerTypes.String32: return await ReadString32NullableAsync(stream, version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext(); - case SerializerTypes.Bytes: return (await ReadBytesNullableAsync(stream, version, buffer: null, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, cancellationToken).DynamicContext())?.Value; - case SerializerTypes.Array: return await ReadArrayNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.List: return await ReadListNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Dictionary: return await ReadDictNullableAsync(stream, SerializerHelper.EnsureNotNull(type, nameof(type)), version, pool, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, options?.KeyOptions, options?.ValueOptions, cancellationToken: cancellationToken).DynamicContext(); + case SerializerTypes.Any: return await ReadAnyNullableAsync(dc.Stream, dc).DynamicContext(); + case SerializerTypes.AnyObject: return await ReadAnyObjectNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.Bool: return await ReadBoolNullableAsync(dc.Stream, dc).DynamicContext(); + case SerializerTypes.Number: return await ReadNumberNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.Enum: return await ReadEnumNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.String: return await ReadStringNullableAsync(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.String16: return await ReadString16NullableAsync(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.String32: return await ReadString32NullableAsync(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.Bytes: return (await ReadBytesNullableAsync(dc.Stream, dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext())?.Value; + case SerializerTypes.Array: return await ReadArrayNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.List: return await ReadListNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); + case SerializerTypes.Dictionary: return await ReadDictNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue).DynamicContext(); case SerializerTypes.Struct: - return ReadStructNullableMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, stream, version, null, pool) + return ReadStructNullableMethod.MakeGenericMethod(SerializerHelper.EnsureNotNull(type, nameof(type))).InvokeAuto(obj: null, dc.Stream, dc) ?? throw new SerializerException($"{nameof(ReadStructNullable)} serialized {type} to NULL"); - case SerializerTypes.Stream: return await ReadStreamNullableAsync(stream, SerializerHelper.EnsureNotNull(options?.Attribute?.GetStream(null, null, stream, version, cancellationToken), nameof(ISerializerOptions.Attribute)), version, pool, maxBufferSize: null, options?.GetMinLen(0) ?? 0, options?.GetMaxLen(long.MaxValue) ?? long.MaxValue, cancellationToken).DynamicContext(); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Stream: return await ReadStreamNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(dc.Options?.Attribute?.GetStream(null, null, dc), nameof(ISerializerOptions.Attribute)), dc, maxBufferSize: null, dc.Options?.GetMinLen(0) ?? 0, dc.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue).DynamicContext(); + case SerializerTypes.Type: return await ReadTypeNullableAsync(dc.Stream, dc).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } /// /// Read an item header, if the final item type is not specified /// - /// Stream - /// Serializer version - /// Item element type + /// Context /// Item index - /// Type cache - /// Object cache - /// Object type - /// Last object type - /// Item type - /// Item serializer type - /// Synchronous item deserializer + /// Element type /// Cached object - public static object? ReadAnyItemHeader( - Stream stream, - int version, - Type elementType, - int index, - Span typeCache, - ReadOnlySpan objectCache, - ref ObjectTypes objType, - ref ObjectTypes lastObjType, - ref Type? itemType, - ref SerializerTypes itemSerializer, - ref StreamSerializer.Deserialize_Delegate? itemSyncDeserializer - ) + public static object? ReadAnyItemHeader(ItemDeserializerContext context, int index, Type elementType) { + IDeserializationContext dc = context.Context; bool requireType; // Read the object type - objType = (ObjectTypes)ReadOneByte(stream, version); - Logging.WriteInfo($"\tRED OBJECT TYPE {objType}"); - if (objType == ObjectTypes.Null) return null; + context.ObjectType = (ObjectTypes)ReadOneByte(dc.Stream, dc); + if (context.ObjectType == ObjectTypes.Null) return null; // Use the object cache - if (objType == ObjectTypes.Cached) + if (context.ObjectType == ObjectTypes.Cached) { - Logging.WriteInfo("\t\tUSING CACHE"); - int objIndex = ReadOneByte(stream, version); - Logging.WriteInfo($"\t\tCACHE INDEX {objIndex}"); - object? res = objectCache[objIndex] ?? throw new SerializerException($"Invalid object cache index #{objIndex}", new InvalidDataException()); - itemType = res.GetType(); - Logging.WriteInfo($"\t\tCACHED TYPE {itemType} {res}"); - objType = res.GetObjectSerializerInfo().ObjectType; - (itemSerializer, itemSyncDeserializer, _) = itemType.GetItemDeserializerInfo(isAsync: false); - lastObjType = objType; + object res = context.GetCachedObject(ReadOneByte(dc.Stream, dc)); + context.ItemType = res.GetType(); + context.ObjectType = res.GetObjectSerializerInfo().ObjectType; + (context.ItemSerializer, context.ItemSyncDeserializer, _) = context.ItemType.GetItemDeserializerInfo(context.ObjectType, isAsync: false); + context.LastObjectType = context.ObjectType; return res; } // Prepare the deserialization - if (objType == ObjectTypes.LastItemType) + if (context.ObjectType == ObjectTypes.LastItemType) { - Logging.WriteInfo($"\t\tUSING LAST OBJ TYPE {lastObjType}"); // Use the last object type - if (index == 0) throw new SerializerException($"Invalid object type {objType} for item #{index}", new InvalidDataException()); + if (index == 0) throw new SerializerException($"Invalid object type {context.ObjectType} for item #{index}", new InvalidDataException()); requireType = false; } else { - Logging.WriteInfo("\t\tGETTING TYPE"); // Ensure correct deserializer informations - lastObjType = objType.RequiresObjectWriting() ? objType : default; - requireType = objType.RequiresTypeName(); - Logging.WriteInfo($"\t\tREQUIRE TYPE {requireType}"); + context.LastObjectType = context.ObjectType.RequiresObjectWriting() ? context.ObjectType : default; + requireType = context.ObjectType.RequiresType(); if (requireType) { // An object type is required - if (objType.IsBasicTypeInfo()) + if (context.ObjectType.IsBasicTypeInfo()) { - Logging.WriteInfo($"\t\tUSING BASIC TYPE INFO"); // Read a basic type information - itemType = new SerializedTypeInfo((ObjectTypes)stream.ReadOneByte(version)).ToSerializableType(); - objType &= ~ObjectTypes.BasicTypeInfo; + context.ItemType = new SerializedTypeInfo((ObjectTypes)dc.Stream.ReadOneByte(dc)).ToSerializableType(); + context.ObjectType &= ~ObjectTypes.BasicTypeInfo; } - if (objType.IsCached()) + if (context.ObjectType.IsCached()) { - Logging.WriteInfo("\t\tUSING CACHE"); // Use a previously cached object type - int typeIndex = ReadOneByte(stream, version); - itemType = typeCache[typeIndex] ?? throw new SerializerException($"No type at cache index #{typeIndex}", new InvalidDataException()); - objType &= ~ObjectTypes.Cached; + context.ItemType = context.GetCachedType(ReadOneByte(dc.Stream, dc)); + context.ObjectType &= ~ObjectTypes.Cached; } else { // Read the object type - Logging.WriteInfo("\t\tREADING TYPE"); - itemType = ReadSerializableType(stream, version); - Logging.WriteInfo($"\t\tRED TYPE {itemType}"); - if (!elementType.IsAssignableFrom(itemType) || itemType.IsAbstract || itemType.IsInterface || itemType == typeof(object)) - throw new SerializerException($"Invalid item type {itemType} for item #{index} ({elementType})", new InvalidCastException()); - int typeIndex = typeCache.AsReadOnly().IndexOf(null!); - if (typeIndex != -1) typeCache[typeIndex] = itemType; + context.ItemType = ReadSerializableType(dc.Stream, dc); + if (!elementType.IsAssignableFrom(context.ItemType) || context.ItemType.IsAbstract || context.ItemType.IsInterface || context.ItemType == typeof(object)) + throw new SerializerException($"Invalid item type {context.ItemType} for item #{index} ({elementType})", new InvalidCastException()); + context.AddType(context.ItemType); } - (itemSerializer, itemSyncDeserializer, _) = itemType.GetItemDeserializerInfo(isAsync: false); + (context.ItemSerializer, context.ItemSyncDeserializer, _) = context.ItemType.GetItemDeserializerInfo(context.ObjectType, isAsync: false); } else { // No object type is required - itemType = null; - itemSerializer = SerializerTypes.Any; + context.ItemType = null; + context.ItemSerializer = SerializerTypes.Any; } } // Ensure having a valid type serializer configuration - if (requireType && itemType == null) + if (requireType && context.ItemType == null) throw new SerializerException($"Serialized type name expected for item #{index}", new InvalidDataException()); return null; } @@ -310,107 +247,77 @@ ref StreamSerializer.Deserialize_Delegate? itemSyncDeserializer /// /// Read an item header, if the final item type is not specified /// - /// Stream - /// Serializer version - /// Item element type + /// Context /// Item index - /// Type cache - /// Object cache - /// Last object type - /// Item type - /// Item serializer type - /// Synchronous item deserializer - /// Asynchronous item deserializer - /// Cancellation token + /// Item element type /// Item informations - public static async Task<( - object? Object, - ObjectTypes ObjectType, - ObjectTypes LastObjType, - Type? ItemType, - SerializerTypes ItemSerializer, - StreamSerializer.Deserialize_Delegate? ItemSyncDesSerializer, - StreamSerializer.AsyncDeserialize_Delegate? ItemAsyncDeserializer - )> ReadAnyItemHeaderAsync( - Stream stream, - int version, - Type elementType, - int index, - Memory typeCache, - ReadOnlyMemory objectCache, - ObjectTypes lastObjType, - Type? itemType, - SerializerTypes itemSerializer, - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer, - StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer, - CancellationToken cancellationToken - ) + public static async Task ReadAnyItemHeaderAsync(ItemDeserializerContext context, int index, Type elementType) { + IDeserializationContext dc = context.Context; bool requireType; // Read the object type - ObjectTypes objType = (ObjectTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - if (objType == ObjectTypes.Null) return (Object: null, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer); + context.ObjectType = (ObjectTypes)await ReadOneByteAsync(dc.Stream, dc).DynamicContext(); + if (context.ObjectType == ObjectTypes.Null) return null; // Use the object cache - if (objType == ObjectTypes.Cached) + if (context.ObjectType == ObjectTypes.Cached) { - int objIndex = await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - object? res = objectCache.Span[objIndex] ?? throw new SerializerException($"Invalid object cache index #{objIndex}", new InvalidDataException()); - itemType = res.GetType(); - objType = res.GetObjectSerializerInfo().ObjectType; - (itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = itemType.GetItemDeserializerInfo(isAsync: false); - lastObjType = objType; - return (res, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer); + object res = context.GetCachedObject(ReadOneByte(dc.Stream, dc)); + context.ItemType = res.GetType(); + context.ObjectType = res.GetObjectSerializerInfo().ObjectType; + (context.ItemSerializer, context.ItemSyncDeserializer, context.ItemAsyncDeserializer) = + context.ItemType.GetItemDeserializerInfo(context.ObjectType, isAsync: true); + context.LastObjectType = context.ObjectType; + return res; } // Prepare the deserialization - if (objType == ObjectTypes.LastItemType) + if (context.ObjectType == ObjectTypes.LastItemType) { // Use the last object type - if (index == 0) throw new SerializerException($"Invalid object type {objType} for item #{index}", new InvalidDataException()); + if (index == 0) throw new SerializerException($"Invalid object type {context.ObjectType} for item #{index}", new InvalidDataException()); requireType = false; } else { // Ensure correct deserializer informations - lastObjType = objType.RequiresObjectWriting() ? objType : default; - requireType = objType.RequiresTypeName(); + context.LastObjectType = context.ObjectType.RequiresObjectWriting() ? context.ObjectType : default; + requireType = context.ObjectType.RequiresType(); if (requireType) { - // An object type (name) is required - if (objType.IsBasicTypeInfo()) + // An object type is required + if (context.ObjectType.IsBasicTypeInfo()) { // Read a basic type information - itemType = new SerializedTypeInfo((ObjectTypes)await stream.ReadOneByteAsync(version, cancellationToken).DynamicContext()).ToSerializableType(); - objType &= ~ObjectTypes.BasicTypeInfo; + context.ItemType = new SerializedTypeInfo((ObjectTypes)await dc.Stream.ReadOneByteAsync(dc).DynamicContext()).ToSerializableType(); + context.ObjectType &= ~ObjectTypes.BasicTypeInfo; } - else if (objType.IsCached()) + if (context.ObjectType.IsCached()) { // Use a previously cached object type - int typeIndex = await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - itemType = typeCache.Span[typeIndex] ?? throw new SerializerException($"No type at cache index #{typeIndex}", new InvalidDataException()); - objType &= ~ObjectTypes.Cached; + context.ItemType = context.GetCachedType(await ReadOneByteAsync(dc.Stream, dc).DynamicContext()); + context.ObjectType &= ~ObjectTypes.Cached; } else { - // Read the object type name - itemType = await ReadSerializableTypeAsync(stream, version, cancellationToken).DynamicContext(); - if (!elementType.IsAssignableFrom(itemType) || itemType.IsAbstract || itemType.IsInterface || itemType == typeof(object)) - throw new SerializerException($"Invalid item type {itemType} for item #{index} ({elementType})", new InvalidCastException()); - int typeIndex = typeCache.AsReadOnly().IndexOf(null!); - if (typeIndex != -1) typeCache.Span[typeIndex] = itemType; + // Read the object type + context.ItemType = await ReadSerializableTypeAsync(dc.Stream, dc).DynamicContext(); + if (!elementType.IsAssignableFrom(context.ItemType) || context.ItemType.IsAbstract || context.ItemType.IsInterface || context.ItemType == typeof(object)) + throw new SerializerException($"Invalid item type {context.ItemType} for item #{index} ({elementType})", new InvalidCastException()); + context.AddType(context.ItemType); } - (itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = itemType.GetItemDeserializerInfo(isAsync: true); + (context.ItemSerializer, context.ItemSyncDeserializer, context.ItemAsyncDeserializer) = + context.ItemType.GetItemDeserializerInfo(context.ObjectType, isAsync: true); } else { - // No object type name is required - itemType = null; - itemSerializer = SerializerTypes.Any; + // No object type is required + context.ItemType = null; + context.ItemSerializer = SerializerTypes.Any; } } // Ensure having a valid type serializer configuration - if (requireType && itemType == null) - throw new SerializerException($"Serialized type expected for item #{index}", new InvalidDataException()); - return (Object: null, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer); + if (requireType && context.ItemType == null) + throw new SerializerException($"Serialized type name expected for item #{index}", new InvalidDataException()); + return null; } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs index 9d5f1a0..4ecca31 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Collections; +using System.Collections; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -14,32 +13,20 @@ public static partial class StreamExtensions /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static List ReadList( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static List ReadList(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - version ??= StreamSerializer.Version; - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - ReadListInt(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable); + ReadListInt(context, res, typeof(T), len); return res; } @@ -48,39 +35,26 @@ public static List ReadList( /// /// Stream /// List type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static IList ReadList( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static IList ReadList(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); - version ??= StreamSerializer.Version; - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - ReadListInt(stream, res, itemType, len, version.Value, valueOptions, valuesNullable); + ReadListInt(context, res, itemType, len); return res; } @@ -89,34 +63,20 @@ public static IList ReadList( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task> ReadListAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task> ReadListAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - version ??= StreamSerializer.Version; - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(stream, context).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - await ReadListIntAsync(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); + await ReadListIntAsync(context, res, typeof(T), len).DynamicContext(); return res; } @@ -125,41 +85,26 @@ public static async Task> ReadListAsync( /// /// Stream /// List type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadListAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadListAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); - version ??= StreamSerializer.Version; - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(stream, context).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - await ReadListIntAsync(stream, res, type.GenericTypeArguments[0], len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); + await ReadListIntAsync(context, res, type.GenericTypeArguments[0], len).DynamicContext(); return res; } @@ -168,41 +113,29 @@ public static async Task ReadListAsync( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static List? ReadListNullable( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static List? ReadListNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return ReadBool(stream, version, pool) ? ReadList(stream, version, pool, minLen, maxLen, valueOptions) : null; + return ReadBool(stream, context) ? ReadList(stream, context, minLen, maxLen) : null; } default: { - version ??= StreamSerializer.Version; - if (ReadNumberNullable(stream, version, pool) is not int len) return null; + if (ReadNumberNullable(stream, context) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - ReadListInt(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable); + ReadListInt(context, res, typeof(T), len); return res; } } @@ -213,48 +146,35 @@ public static async Task ReadListAsync( /// /// Stream /// List type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static IList? ReadListNullable( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false - ) + public static IList? ReadListNullable(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return ReadBool(stream, version, pool) ? ReadList(stream, type, version, pool, minLen, maxLen, valueOptions) : null; + return ReadBool(stream, context) ? ReadList(stream, type, context, minLen, maxLen) : null; } default: { - version ??= StreamSerializer.Version; - if (ReadNumberNullable(stream, version, pool) is not int len) return null; + if (ReadNumberNullable(stream, context) is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - ReadListInt(stream, res, itemType, len, version.Value, valueOptions, valuesNullable); + ReadListInt(context, res, itemType, len); return res; } } @@ -265,45 +185,31 @@ public static async Task ReadListAsync( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task?> ReadListNullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task?> ReadListNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadListAsync(stream, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadListAsync(stream, context, minLen, maxLen).DynamicContext() : null; } default: { - version ??= StreamSerializer.Version; - if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); List res = new(len); - await ReadListIntAsync(stream, res, typeof(T), len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); + await ReadListIntAsync(context, res, typeof(T), len).DynamicContext(); return res; } } @@ -314,52 +220,37 @@ public static async Task ReadListAsync( /// /// Stream /// List type - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Are the values nullable? - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadListNullableAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - bool valuesNullable = false, - CancellationToken cancellationToken = default - ) + public static async Task ReadListNullableAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( nameof(type), type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadListAsync(stream, type, version, pool, minLen, maxLen, valueOptions, cancellationToken: cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadListAsync(stream, type, context, minLen, maxLen).DynamicContext() : null; } default: { - version ??= StreamSerializer.Version; - if (await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext() is not int len) return null; + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; SerializerHelper.EnsureValidLength(len, minLen, maxLen); Type itemType = type.GetGenericArgumentsCached()[0]; IList res = (IList)(Activator.CreateInstance(type, len) ?? throw new SerializerException($"Failed to instance {type}")); - await ReadListIntAsync(stream, res, itemType, len, version.Value, valueOptions, valuesNullable, cancellationToken).DynamicContext(); + await ReadListIntAsync(context, res, itemType, len).DynamicContext(); return res; } } @@ -368,224 +259,129 @@ public static async Task ReadListAsync( /// /// Read list items /// - /// Stream + /// Context /// List /// Item type /// Number of items - /// Serializer version - /// Value serializer options - /// Are the values nullable? [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void ReadListInt(Stream stream, IList list, Type type, int count, int version, ISerializerOptions? valueOptions, bool valuesNullable) + private static void ReadListInt(IDeserializationContext context, IList list, Type type, int count) { - switch (version & byte.MaxValue)// Serializer version switch + using ContextRecursion cr = new(context); + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - for (int i = 0; i < count; list.Add(ReadObject(stream, type, version, valueOptions)), i++) ; + for (int i = 0; i < count; list.Add(ReadObject(context.Stream, type, context)), i++) ; break; } default: + try { - (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, _) = type.GetItemDeserializerInfo(isAsync: false); - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - if (serializer == SerializerTypes.Any) + using ItemDeserializerContext itemContext = new(context) + { + Nullable = context.Options?.IsNullable ?? context.Nullable + }; + (itemContext.ItemSerializer, itemContext.ItemSyncDeserializer, _) = type.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Span typeCacheSpan; - ReadOnlySpan objectCacheSpan; object? obj; - int objIndex; - try + for (int i = 0; i < count; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); - for (int i = 0; i < count; i++) + obj = ReadAnyItemHeader(itemContext, i, type); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - obj = ReadAnyItemHeader( - stream, - version, - type, - i, - typeCacheSpan, - objectCacheSpan, - ref objType, - ref lastObjType, - ref itemType, - ref itemSerializer, - ref itemSyncDeserializer - ); - if (obj == null && objType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - list.Add(null); - } - else if (obj == null) - { - list.Add((obj = itemSerializer == SerializerTypes.Serializer - ? ReadItem(stream, version, nullable: false, itemSerializer, itemType, pool: null, valueOptions, itemSyncDeserializer) - : ReadAnyInt(stream, version, objType, itemType, valueOptions))!); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - list.Add(obj); - } + if (!itemContext.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + list.Add(obj); + } + else if (obj == null) + { + list.Add(itemContext.ItemSerializer == SerializerTypes.Serializer + ? obj = ReadItem(itemContext) + : obj = ReadAnyInt(context, itemContext.ObjectType, itemContext.ItemType)); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + list.Add(obj); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } } else { - for (int i = 0; i < count; i++) - list.Add(ReadItem(stream, version, valuesNullable, serializer, type, pool: null, valueOptions, syncDeserializer)!); + for (int i = 0; i < count; list.Add(ReadItem(itemContext)), i++) ; } break; } + finally + { + context.WithoutOptions(); + } } } /// /// Read list items /// - /// Stream + /// Context /// List /// Item type /// Number of items - /// Serializer version - /// Value serializer options - /// Are the values nullable? - /// Cancellation token [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static async Task ReadListIntAsync( - Stream stream, - IList list, - Type type, - int count, - int version, - ISerializerOptions? valueOptions, - bool valuesNullable, - CancellationToken cancellationToken - ) + private static async Task ReadListIntAsync(IDeserializationContext context, IList list, Type type, int count) { - switch (version & byte.MaxValue)// Serializer version switch + using ContextRecursion cr = new(context); + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - for (int i = 0; i < count; list.Add(await ReadObjectAsync(stream, type, version, valueOptions, cancellationToken).DynamicContext()), i++) ; + for (int i = 0; i < count; list.Add(await ReadObjectAsync(context.Stream, type, context).DynamicContext()), i++) ; break; } default: + try { - (SerializerTypes serializer, StreamSerializer.Deserialize_Delegate? syncDeserializer, StreamSerializer.AsyncDeserialize_Delegate? asyncDeserializer) = - type.GetItemDeserializerInfo(isAsync: true); - if (valueOptions != null && !valuesNullable) valuesNullable = valueOptions.IsNullable; - if (serializer == SerializerTypes.Any) + using ItemDeserializerContext itemContext = new(context) + { + Nullable = context.Options?.IsNullable ?? context.Nullable + }; + (itemContext.ItemSerializer, itemContext.ItemSyncDeserializer, itemContext.ItemAsyncDeserializer) = + type.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Memory typeCacheMem; - ReadOnlyMemory objectCacheMem; object? obj; - int objIndex; - try + for (int i = 0; i < count; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); - for (int i = 0; i < count; i++) + obj = await ReadAnyItemHeaderAsync(itemContext, i, type).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = - await ReadAnyItemHeaderAsync( - stream, - version, - type, - i, - typeCacheMem, - objectCacheMem, - lastObjType, - itemType, - itemSerializer, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext(); - if (obj == null && objType == ObjectTypes.Null) - { - if (!valuesNullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); - list.Add(null); - } - else if (obj == null) - { - list.Add(obj = itemSerializer == SerializerTypes.Serializer - ? await ReadItemAsync( - stream, - version, - nullable: false, - itemSerializer, - itemType, - pool: null, - valueOptions, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext() - : await ReadAnyIntAsync(stream, version, lastObjType, itemType, valueOptions, cancellationToken).DynamicContext()); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - list.Add(obj); - } + if (!itemContext.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + list.Add(obj); + } + else if (obj == null) + { + list.Add(itemContext.ItemSerializer == SerializerTypes.Serializer + ? obj = await ReadItemAsync(itemContext).DynamicContext() + : obj = await ReadAnyIntAsync(context, itemContext.ObjectType, itemContext.ItemType).DynamicContext()); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + list.Add(obj); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } } else { - for (int i = 0; i < count; i++) - list.Add(await ReadItemAsync( - stream, - version, - valuesNullable, - serializer, - type, - pool: null, - valueOptions, - syncDeserializer, - asyncDeserializer, - cancellationToken - ).DynamicContext()); + for (int i = 0; i < count; list.Add(ReadItem(itemContext)), i++) ; } break; } + finally + { + context.WithoutOptions(); + } } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs index d530f6c..7adb455 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -12,131 +11,128 @@ public static partial class StreamExtensions /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static T ReadNumber(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible - => (T)ReadNumberInt(stream, typeof(T), version, numberType: null, pool); +#pragma warning disable IDE0060 // Remove unused argument + public static T ReadNumber(this Stream stream, IDeserializationContext context) where T : struct, IConvertible +#pragma warning restore // Remove unused argument + => (T)ReadNumberInt(context, typeof(T), numberType: null); /// /// Read /// /// Stream /// Number type - /// Serializer version - /// Array pool + /// Context /// Value - public static object ReadNumber(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) - => ReadNumberInt(stream, type, version, numberType: null, pool); +#pragma warning disable IDE0060 // Remove unused argument + public static object ReadNumber(this Stream stream, Type type, IDeserializationContext context) +#pragma warning restore // Remove unused argument + => ReadNumberInt(context, type, numberType: null); /// /// Read /// - /// Stream + /// Context /// Resulting number type - /// Serializer version /// Number type - /// Array pool /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static object ReadNumberInt(Stream stream, Type resType, int? version, NumberTypes? numberType, ArrayPool? pool) + [SkipLocalsInit] + public static object ReadNumberInt(IDeserializationContext context, Type resType, NumberTypes? numberType) => SerializerException.Wrap(() => { ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), () => "Not a valid number type"); - byte[] data = numberType == null ? ReadSerializedData(stream, len: 1, pool) : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); - try - { - NumberTypes type = numberType ?? (NumberTypes)data[0]; - if (type.IsZero()) return Activator.CreateInstance(resType)!; - switch (type.RemoveValueFlags()) - { - case NumberTypes.Byte: - switch (type) - { - case NumberTypes.Byte | NumberTypes.MinValue: - return Convert.ChangeType(sbyte.MinValue, resType); - case NumberTypes.Byte | NumberTypes.MaxValue: - return Convert.ChangeType(sbyte.MaxValue, resType); - } - if (stream.Read(data.AsSpan(0, 1)) != 1) throw new SerializerException("Failed to read serialized data (1 bytes)"); - return Convert.ChangeType(data[0], resType); - case NumberTypes.Byte | NumberTypes.Unsigned: - switch (type) - { - case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: - return Convert.ChangeType(byte.MaxValue, resType); - } - if (stream.Read(data.AsSpan(0, 1)) != 1) throw new SerializerException("Failed to read serialized data (1 bytes)"); - return Convert.ChangeType(data[0], resType); - case NumberTypes.Short: - return type switch - { - NumberTypes.Short | NumberTypes.MinValue => Convert.ChangeType(short.MinValue, resType), - NumberTypes.Short | NumberTypes.MaxValue => Convert.ChangeType(short.MaxValue, resType), - _ => Convert.ChangeType(ReadShort(stream, version, pool), resType) - }; - case NumberTypes.Short | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ushort.MaxValue, resType), - _ => Convert.ChangeType(ReadUShort(stream, version, pool), resType) - }; - case NumberTypes.Int: - return type switch - { - NumberTypes.Int | NumberTypes.MinValue => Convert.ChangeType(int.MinValue, resType), - NumberTypes.Int | NumberTypes.MaxValue => Convert.ChangeType(int.MaxValue, resType), - _ => Convert.ChangeType(ReadInt(stream, version, pool), resType) - }; - case NumberTypes.Int | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(uint.MaxValue, resType), - _ => Convert.ChangeType(ReadUInt(stream, version, pool), resType) - }; - case NumberTypes.Long: - return type switch - { - NumberTypes.Long | NumberTypes.MinValue => Convert.ChangeType(long.MinValue, resType), - NumberTypes.Long | NumberTypes.MaxValue => Convert.ChangeType(long.MaxValue, resType), - _ => Convert.ChangeType(ReadLong(stream, version, pool), resType) - }; - case NumberTypes.Long | NumberTypes.Unsigned: - return type switch - { - NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ulong.MaxValue, resType), - _ => Convert.ChangeType(ReadULong(stream, version, pool), resType) - }; - case NumberTypes.Float: - return type switch - { - NumberTypes.Float | NumberTypes.MinValue => Convert.ChangeType(float.MinValue, resType), - NumberTypes.Float | NumberTypes.MaxValue => Convert.ChangeType(float.MaxValue, resType), - _ => Convert.ChangeType(ReadFloat(stream, version, pool), resType) - }; - case NumberTypes.Double: - return type switch - { - NumberTypes.Double | NumberTypes.MinValue => Convert.ChangeType(double.MinValue, resType), - NumberTypes.Double | NumberTypes.MaxValue => Convert.ChangeType(double.MaxValue, resType), - _ => Convert.ChangeType(ReadDouble(stream, version, pool), resType) - }; - case NumberTypes.Decimal: - return type switch - { - NumberTypes.Decimal | NumberTypes.MinValue => Convert.ChangeType(decimal.MinValue, resType), - NumberTypes.Decimal | NumberTypes.MaxValue => Convert.ChangeType(decimal.MaxValue, resType), - _ => Convert.ChangeType(ReadDecimal(stream, version, pool), resType) - }; - default: - throw new SerializerException($"Unknown numeric type {type}"); - } - } - finally + Span data = stackalloc byte[1]; + if (numberType == null && context.Stream.Read(data) != 1) throw new SerializerException("Failed to read one byte", new IOException()); + NumberTypes type = numberType ?? (NumberTypes)data[0]; + if (type.IsZero()) return Activator.CreateInstance(resType)!; + switch (type.RemoveValueFlags()) { - (pool ?? StreamSerializer.BufferPool).Return(data); + case NumberTypes.Byte: + switch (type) + { + case NumberTypes.Byte | NumberTypes.MinValue: + return Convert.ChangeType(sbyte.MinValue, resType); + case NumberTypes.Byte | NumberTypes.MaxValue: + return Convert.ChangeType(sbyte.MaxValue, resType); + } + if (context.Stream.Read(data) != 1)// Compatibility with serializer version 2 + throw new SerializerException("Failed to read serialized data (1 bytes)"); + return Convert.ChangeType(data[0], resType); + case NumberTypes.Byte | NumberTypes.Unsigned: + switch (type) + { + case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: + return Convert.ChangeType(byte.MaxValue, resType); + } + if (context.Stream.Read(data) != 1)// Compatibility with serializer version 2 + throw new SerializerException("Failed to read serialized data (1 bytes)"); + return Convert.ChangeType(data[0], resType); + case NumberTypes.Short: + return type switch + { + NumberTypes.Short | NumberTypes.MinValue => Convert.ChangeType(short.MinValue, resType), + NumberTypes.Short | NumberTypes.MaxValue => Convert.ChangeType(short.MaxValue, resType), + _ => Convert.ChangeType(ReadShort(context.Stream, context), resType)// Compatibility with serializer version 2 + }; + case NumberTypes.Short | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ushort.MaxValue, resType), + _ => Convert.ChangeType(ReadUShort(context.Stream, context), resType)// Compatibility with serializer version 2 + }; + case NumberTypes.Int: + return type switch + { + NumberTypes.Int | NumberTypes.MinValue => Convert.ChangeType(int.MinValue, resType), + NumberTypes.Int | NumberTypes.MaxValue => Convert.ChangeType(int.MaxValue, resType), + _ => Convert.ChangeType(ReadInt(context.Stream, context), resType) + }; + case NumberTypes.Int | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(uint.MaxValue, resType), + _ => Convert.ChangeType(ReadUInt(context.Stream, context), resType) + }; + case NumberTypes.Long: + return type switch + { + NumberTypes.Long | NumberTypes.MinValue => Convert.ChangeType(long.MinValue, resType), + NumberTypes.Long | NumberTypes.MaxValue => Convert.ChangeType(long.MaxValue, resType), + _ => Convert.ChangeType(ReadLong(context.Stream, context), resType) + }; + case NumberTypes.Long | NumberTypes.Unsigned: + return type switch + { + NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ulong.MaxValue, resType), + _ => Convert.ChangeType(ReadULong(context.Stream, context), resType) + }; + case NumberTypes.Float: + return type switch + { + NumberTypes.Float | NumberTypes.MinValue => Convert.ChangeType(float.MinValue, resType), + NumberTypes.Float | NumberTypes.MaxValue => Convert.ChangeType(float.MaxValue, resType), + _ => Convert.ChangeType(ReadFloat(context.Stream, context), resType) + }; + case NumberTypes.Double: + return type switch + { + NumberTypes.Double | NumberTypes.MinValue => Convert.ChangeType(double.MinValue, resType), + NumberTypes.Double | NumberTypes.MaxValue => Convert.ChangeType(double.MaxValue, resType), + _ => Convert.ChangeType(ReadDouble(context.Stream, context), resType) + }; + case NumberTypes.Decimal: + return type switch + { + NumberTypes.Decimal | NumberTypes.MinValue => Convert.ChangeType(decimal.MinValue, resType), + NumberTypes.Decimal | NumberTypes.MaxValue => Convert.ChangeType(decimal.MaxValue, resType), + _ => Convert.ChangeType(ReadDecimal(context.Stream, context), resType) + }; + default: + throw new SerializerException($"Unknown numeric type {type}"); } }); @@ -144,53 +140,43 @@ private static object ReadNumberInt(Stream stream, Type resType, int? version, N /// Read /// /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static async Task ReadNumberAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) +#pragma warning disable IDE0060 // Remove unused argument + public static async Task ReadNumberAsync(this Stream stream, IDeserializationContext context) +#pragma warning restore // Remove unused argument where T : struct, IConvertible - => (T)await ReadNumberIntAsync(stream, typeof(T), version, numberType: null, pool, cancellationToken).DynamicContext(); + => (T)await ReadNumberIntAsync(context, typeof(T), numberType: null).DynamicContext(); /// /// Read /// /// Stream /// Number type - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static Task ReadNumberAsync(this Stream stream, Type type, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - => ReadNumberIntAsync(stream, type, version, numberType: null, pool, cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadNumberAsync(this Stream stream, Type type, IDeserializationContext context) +#pragma warning restore // Remove unused argument + => ReadNumberIntAsync(context, type, numberType: null); /// /// Read /// - /// Stream + /// Context /// Resulting number type - /// Serializer version /// Number type - /// Array pool - /// Cancellation token /// Value #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Task ReadNumberIntAsync( - Stream stream, - Type resType, - int? version, - NumberTypes? numberType, - ArrayPool? pool, - CancellationToken cancellationToken - ) + public static Task ReadNumberIntAsync(IDeserializationContext context, Type resType, NumberTypes? numberType) => SerializerException.WrapAsync(async () => { ArgumentValidationHelper.EnsureValidArgument(nameof(resType), resType.IsValueType && typeof(IConvertible).IsAssignableFrom(resType), () => "Not a valid number type"); byte[] data = numberType == null - ? await ReadSerializedDataAsync(stream, len: 1, pool, cancellationToken).DynamicContext() - : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); + ? await ReadSerializedDataAsync(context.Stream, len: 1, context).DynamicContext() + : context.BufferPool.Rent(minimumLength: 1); try { NumberTypes type = numberType ?? (NumberTypes)data[0]; @@ -205,7 +191,7 @@ CancellationToken cancellationToken case NumberTypes.Byte | NumberTypes.MaxValue: return Convert.ChangeType(sbyte.MaxValue, resType); } - if (await stream.ReadAsync(data.AsMemory(0, 1), cancellationToken).DynamicContext() != 1) + if (await context.Stream.ReadAsync(data.AsMemory(0, 1), context.Cancellation).DynamicContext() != 1)// Compatibility with serializer version 2 throw new SerializerException("Failed to read serialized data (1 bytes)"); return Convert.ChangeType(data[0], resType); case NumberTypes.Byte | NumberTypes.Unsigned: @@ -214,7 +200,7 @@ CancellationToken cancellationToken case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: return Convert.ChangeType(byte.MaxValue, resType); } - if (await stream.ReadAsync(data.AsMemory(0, 1), cancellationToken).DynamicContext() != 1) + if (await context.Stream.ReadAsync(data.AsMemory(0, 1), context.Cancellation).DynamicContext() != 1)// Compatibility with serializer version 2 throw new SerializerException("Failed to read serialized data (1 bytes)"); return Convert.ChangeType(data[0], resType); case NumberTypes.Short: @@ -222,60 +208,60 @@ CancellationToken cancellationToken { NumberTypes.Short | NumberTypes.MinValue => Convert.ChangeType(short.MinValue, resType), NumberTypes.Short | NumberTypes.MaxValue => Convert.ChangeType(short.MaxValue, resType), - _ => Convert.ChangeType(await ReadShortAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadShortAsync(context.Stream, context).DynamicContext(), resType)// Compatibility with serializer version 2 }; case NumberTypes.Short | NumberTypes.Unsigned: return type switch { NumberTypes.Short | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ushort.MaxValue, resType), - _ => Convert.ChangeType(await ReadUShortAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadUShortAsync(context.Stream, context).DynamicContext(), resType)// Compatibility with serializer version 2 }; case NumberTypes.Int: return type switch { NumberTypes.Int | NumberTypes.MinValue => Convert.ChangeType(int.MinValue, resType), NumberTypes.Int | NumberTypes.MaxValue => Convert.ChangeType(int.MaxValue, resType), - _ => Convert.ChangeType(await ReadIntAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadIntAsync(context.Stream, context).DynamicContext(), resType) }; case NumberTypes.Int | NumberTypes.Unsigned: return type switch { NumberTypes.Int | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(uint.MaxValue, resType), - _ => Convert.ChangeType(await ReadUIntAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadUIntAsync(context.Stream, context).DynamicContext(), resType) }; case NumberTypes.Long: return type switch { NumberTypes.Long | NumberTypes.MinValue => Convert.ChangeType(long.MinValue, resType), NumberTypes.Long | NumberTypes.MaxValue => Convert.ChangeType(long.MaxValue, resType), - _ => Convert.ChangeType(await ReadLongAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadLongAsync(context.Stream, context).DynamicContext(), resType) }; case NumberTypes.Long | NumberTypes.Unsigned: return type switch { NumberTypes.Long | NumberTypes.MaxValue | NumberTypes.Unsigned => Convert.ChangeType(ulong.MaxValue, resType), - _ => Convert.ChangeType(await ReadULongAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadULongAsync(context.Stream, context).DynamicContext(), resType) }; case NumberTypes.Float: return type switch { NumberTypes.Float | NumberTypes.MinValue => Convert.ChangeType(float.MinValue, resType), NumberTypes.Float | NumberTypes.MaxValue => Convert.ChangeType(float.MaxValue, resType), - _ => Convert.ChangeType(await ReadFloatAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadFloatAsync(context.Stream, context).DynamicContext(), resType) }; case NumberTypes.Double: return type switch { NumberTypes.Double | NumberTypes.MinValue => Convert.ChangeType(double.MinValue, resType), NumberTypes.Double | NumberTypes.MaxValue => Convert.ChangeType(double.MaxValue, resType), - _ => Convert.ChangeType(await ReadDoubleAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadDoubleAsync(context.Stream, context).DynamicContext(), resType) }; case NumberTypes.Decimal: return type switch { NumberTypes.Decimal | NumberTypes.MinValue => Convert.ChangeType(decimal.MinValue, resType), NumberTypes.Decimal | NumberTypes.MaxValue => Convert.ChangeType(decimal.MaxValue, resType), - _ => Convert.ChangeType(await ReadDecimalAsync(stream, version, pool, cancellationToken).DynamicContext(), resType) + _ => Convert.ChangeType(await ReadDecimalAsync(context.Stream, context).DynamicContext(), resType) }; default: throw new SerializerException($"Unknown numeric type {type}"); @@ -283,7 +269,7 @@ CancellationToken cancellationToken } finally { - (pool ?? StreamSerializer.BufferPool).Return(data); + context.BufferPool.Return(data); } }); @@ -291,31 +277,30 @@ CancellationToken cancellationToken /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T? ReadNumberNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible + public static T? ReadNumberNullable(this Stream stream, IDeserializationContext context) where T : struct, IConvertible => SerializerException.Wrap(() => { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue) + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return ReadBool(stream, version, pool) ? ReadNumber(stream, version, pool) : null; + return ReadBool(stream, context) ? ReadNumber(stream, context) : null; } case 2: { - NumberTypes numberType = ReadEnum(stream, version, pool); - return numberType == NumberTypes.Null ? null : (T?)ReadNumberInt(stream, typeof(T), version, numberType, pool); + NumberTypes numberType = ReadEnum(stream, context); + return numberType == NumberTypes.IsNull ? null : (T?)ReadNumberInt(context, typeof(T), numberType); } default: { - NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); - return numberType == NumberTypes.Null ? null : (T?)ReadNumberInt(stream, typeof(T), version, numberType, pool); + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull ? null : (T?)ReadNumberInt(context, typeof(T), numberType); } } }); @@ -325,31 +310,30 @@ CancellationToken cancellationToken /// /// Stream /// Number type - /// Serializer version - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static object? ReadNumberNullable(this Stream stream, Type type, int? version = null, ArrayPool? pool = null) + public static object? ReadNumberNullable(this Stream stream, Type type, IDeserializationContext context) => SerializerException.Wrap(() => { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue) + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return ReadBool(stream, version, pool) ? ReadNumber(stream, type, version, pool) : null; + return ReadBool(stream, context) ? ReadNumber(stream, type, context) : null; } case 2: { - NumberTypes numberType = ReadEnum(stream, version, pool); - return numberType == NumberTypes.Null ? null : ReadNumberInt(stream, type, version, numberType, pool); + NumberTypes numberType = ReadEnum(stream, context); + return numberType == NumberTypes.IsNull ? null : ReadNumberInt(context, type, numberType); } default: { - NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); - return numberType == NumberTypes.Null ? null : ReadNumberInt(stream, type, version, numberType, pool); + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull ? null : ReadNumberInt(context, type, numberType); } } }); @@ -359,37 +343,33 @@ CancellationToken cancellationToken /// /// Number type /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task ReadNumberNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) + public static Task ReadNumberNullableAsync(this Stream stream, IDeserializationContext context) where T : struct, IConvertible => SerializerException.WrapAsync(async () => { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue) + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadNumberAsync(stream, context).DynamicContext() : null; } case 2: { - NumberTypes numberType = await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null ? null : (T?)await ReadNumberIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken) - .DynamicContext(); + NumberTypes numberType = await ReadEnumAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull ? null : (T?)await ReadNumberIntAsync(context, typeof(T), numberType).DynamicContext(); } default: { - NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null ? null : (T?)await ReadNumberIntAsync(stream, typeof(T), version, numberType, pool, cancellationToken) - .DynamicContext(); + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull ? null : (T?)await ReadNumberIntAsync(context, typeof(T), numberType).DynamicContext(); } } }); @@ -399,41 +379,32 @@ CancellationToken cancellationToken /// /// Stream /// Number type - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task ReadNumberNullableAsync( - this Stream stream, - Type type, - int? version = null, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) + public static Task ReadNumberNullableAsync(this Stream stream, Type type, IDeserializationContext context) => SerializerException.WrapAsync(async () => { - switch ((version ?? StreamSerializer.Version) & byte.MaxValue) + switch (context.SerializerVersion)// Serializer version switch { case 1: { - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadNumberAsync(stream, type, version, pool, cancellationToken).DynamicContext() + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadNumberAsync(stream, type, context).DynamicContext() : null; } case 2: { - NumberTypes numberType = await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null ? null : await ReadNumberIntAsync(stream, type, version, numberType, pool, cancellationToken) - .DynamicContext(); + NumberTypes numberType = await ReadEnumAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull ? null : await ReadNumberIntAsync(context, type, numberType).DynamicContext(); } default: { - NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext(); - return numberType == NumberTypes.Null ? null : await ReadNumberIntAsync(stream, type, version, numberType, pool, cancellationToken).DynamicContext(); + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull ? null : await ReadNumberIntAsync(context, type, numberType).DynamicContext(); } } }); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs index c64e1a5..7870980 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Object.cs @@ -16,20 +16,19 @@ public static partial class StreamExtensions /// /// Object type /// Stream - /// Serializer version - /// Options + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T ReadObject(this Stream stream, int? version = null, ISerializerOptions? options = null) + public static T ReadObject(this Stream stream, IDeserializationContext context) => SerializerException.Wrap(() => { - if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) return (T)ReadSerializedObject(stream, typeof(T), version); - return StreamSerializer.FindDeserializer(typeof(T)) is StreamSerializer.Deserialize_Delegate deserializer - ? (T)(deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{typeof(T)} deserialized to NULL")) - : (T)ReadAnyObject(stream, typeof(T), version); + if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) return (T)ReadSerializedObject(stream, typeof(T), context); + return StreamSerializer.FindDeserializer(typeof(T)) is StreamSerializer.Deserializer_Delegate deserializer + ? (T)(deserializer(context, typeof(T)) ?? throw new SerializerException($"{typeof(T)} deserialized to NULL")) + : (T)ReadAnyObject(stream, typeof(T), context); }); /// @@ -37,20 +36,19 @@ public static T ReadObject(this Stream stream, int? version = null, ISerializ /// /// Stream /// Type - /// Serializer version - /// Options + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static object ReadObject(this Stream stream, Type type, int? version = null, ISerializerOptions? options = null) + public static object ReadObject(this Stream stream, Type type, IDeserializationContext context) => SerializerException.Wrap(() => { - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); - return StreamSerializer.FindDeserializer(type) is StreamSerializer.Deserialize_Delegate deserializer - ? (deserializer(stream, type, version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{type} deserialized to NULL")) - : ReadAnyObject(stream, type, version); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, context); + return StreamSerializer.FindDeserializer(type) is StreamSerializer.Deserializer_Delegate deserializer + ? (deserializer(context, type) ?? throw new SerializerException($"{type} deserialized to NULL")) + : ReadAnyObject(stream, type, context); }); /// @@ -58,24 +56,22 @@ public static object ReadObject(this Stream stream, Type type, int? version = nu /// /// Object type /// Stream - /// Serializer version - /// Options - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task ReadObjectAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) + public static Task ReadObjectAsync(this Stream stream, IDeserializationContext context) => SerializerException.WrapAsync(async () => { if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) - return (T)await ReadSerializedObjectAsync(stream, typeof(T), version, cancellationToken).DynamicContext(); - if (StreamSerializer.FindAsyncDeserializer(typeof(T)) is not StreamSerializer.AsyncDeserialize_Delegate deserializer) + return (T)await ReadSerializedObjectAsync(stream, typeof(T), context).DynamicContext(); + if (StreamSerializer.FindAsyncDeserializer(typeof(T)) is not StreamSerializer.AsyncDeserializer_Delegate deserializer) return StreamSerializer.FindDeserializer(typeof(T)) is not null - ? ReadObject(stream, version, options) - : (T)ReadAnyObject(stream, typeof(T), version); - Task task = deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options, cancellationToken); + ? ReadObject(stream, context) + : (T)ReadAnyObject(stream, typeof(T), context); + Task task = deserializer(context, typeof(T)); await task.DynamicContext(); return task.GetResult(); }); @@ -85,30 +81,22 @@ public static Task ReadObjectAsync(this Stream stream, int? version = null /// /// Stream /// Type - /// Serializer version - /// Options - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task ReadObjectAsync( - this Stream stream, - Type type, - int? version = null, - ISerializerOptions? options = null, - CancellationToken cancellationToken = default - ) + public static Task ReadObjectAsync(this Stream stream, Type type, IDeserializationContext context) => SerializerException.WrapAsync(async () => { if (typeof(IStreamSerializer).IsAssignableFrom(type)) - return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); - if (StreamSerializer.FindAsyncDeserializer(type) is not StreamSerializer.AsyncDeserialize_Delegate deserializer) + return await ReadSerializedObjectAsync(stream, type, context).DynamicContext(); + if (StreamSerializer.FindAsyncDeserializer(type) is not StreamSerializer.AsyncDeserializer_Delegate deserializer) return StreamSerializer.FindDeserializer(type) is not null - ? ReadObject(stream, type, version, options) - : ReadAnyObject(stream, type, version); - Task task = deserializer(stream, type, version ?? StreamSerializer.Version, options, cancellationToken); + ? ReadObject(stream, type, context) + : ReadAnyObject(stream, type, context); + Task task = deserializer(context, type); await task.DynamicContext(); return task.GetResult(type); }); @@ -118,16 +106,15 @@ public static Task ReadObjectAsync( /// /// Object type /// Stream - /// Serializer version - /// Options + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T? ReadObjectNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) + public static T? ReadObjectNullable(this Stream stream, IDeserializationContext context) #pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version) ? ReadObject(stream, version, options) : default(T?); + => ReadBool(stream, context) ? ReadObject(stream, context) : default(T?); #pragma warning restore IDE0034 // default expression can be simplified /// @@ -135,37 +122,29 @@ public static Task ReadObjectAsync( /// /// Stream /// Object type - /// Serializer version - /// Options + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static object? ReadObjectNullable(this Stream stream, Type type, int? version = null, ISerializerOptions? options = null) - => ReadBool(stream, version) ? ReadObject(stream, type, version, options) : null; + public static object? ReadObjectNullable(this Stream stream, Type type, IDeserializationContext context) + => ReadBool(stream, context) ? ReadObject(stream, type, context) : null; /// /// Read /// /// Object type /// Stream - /// Serializer version - /// Options - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadObjectNullableAsync( - this Stream stream, - int? version = null, - ISerializerOptions? options = null, - CancellationToken cancellationToken = default - ) - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadObjectAsync(stream, version, options, cancellationToken).DynamicContext() + public static async Task ReadObjectNullableAsync(this Stream stream, IDeserializationContext context) + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadObjectAsync(stream, context).DynamicContext() #pragma warning disable IDE0034 // default expression can be simplified : default(T?); #pragma warning restore IDE0034 // default expression can be simplified @@ -175,23 +154,15 @@ public static Task ReadObjectAsync( /// /// Stream /// Object type - /// Serializer version - /// Options - /// Cancellation token + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadObjectNullableAsync( - this Stream stream, - Type type, - int? version = null, - ISerializerOptions? options = null, - CancellationToken cancellationToken = default - ) - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadObjectAsync(stream, type, version, options, cancellationToken).DynamicContext() + public static async Task ReadObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context) + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadObjectAsync(stream, type, context).DynamicContext() : null; /// @@ -199,90 +170,63 @@ public static Task ReadObjectAsync( /// /// Object type /// Stream - /// Serializer version + /// Context /// Object - public static T ReadAnyObject(this Stream stream, int? version = null) where T : class, new() + public static T ReadAnyObject(this Stream stream, IDeserializationContext context) where T : class, new() { - version ??= StreamSerializer.Version; + using ContextRecursion cr = new(context); // Handle serializable type Type type = typeof(T); - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (T)ReadSerializedObject(stream, type, version); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return (T)ReadSerializedObject(stream, type, context); // Find the stream serializer attribute StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); // Get properties to read - PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); - int count = ReadNumber(stream, version); + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, context)).ToArray(); + int count = ReadNumber(stream, context); if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); // Deserialize property values bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; T res = new(); - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Span typeCacheSpan; - ReadOnlySpan objectCacheSpan; object? obj; - int objIndex; - try + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + for (int i = 0; i < count; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); - for (int i = 0; i < count; i++) + pi = pis[i]; + attr = pi.Property.GetCustomAttributeCached(); + options = attr?.GetSerializerOptions(pi, context); + context.WithOptions(options); + itemContext.Nullable = options?.IsNullable ?? pi.Property.IsNullable(); + // Validate the property name + if ( + useChecksum && + !( + attr?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, context) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b) + ) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + obj = ReadAnyItemHeader(itemContext, i, pi.PropertyType); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - obj = ReadAnyItemHeader( - stream, - version.Value, - pi.PropertyType, - i, - typeCache, - objectCache, - ref objType, - ref lastObjType, - ref itemType, - ref itemSerializer, - ref itemSyncDeserializer - ); - if (obj == null && objType == ObjectTypes.Null) - { - if (!pi.PropertyType.IsNullable()) - throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); - pi.Setter!(res, null); - } - else if (obj == null) - { - pi.Setter!(res, itemSerializer == SerializerTypes.Serializer - ? obj = ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool: null, options: null, itemSyncDeserializer) - : obj = ReadAnyInt(stream, version.Value, objType, itemType, options: null)); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - pi.Setter!(res, obj); - } + if (!itemContext.Nullable) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, itemContext.ItemSerializer == SerializerTypes.Serializer + ? obj = ReadItem(itemContext) + : obj = ReadAnyInt(context, itemContext.ObjectType, itemContext.ItemType)); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + pi.Setter!(res, obj); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) @@ -298,89 +242,62 @@ ref itemSyncDeserializer /// /// Stream /// Object type - /// Serializer version + /// Context /// Object - public static object ReadAnyObject(this Stream stream, Type type, int? version = null) + public static object ReadAnyObject(this Stream stream, Type type, IDeserializationContext context) { - version ??= StreamSerializer.Version; + using ContextRecursion cr = new(context); // Handle serializable type - if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, version); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return ReadSerializedObject(stream, type, context); // Find the stream serializer attribute StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); // Get properties to read - PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, version)).ToArray(); - int count = ReadNumber(stream, version); + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, ReadNumberNullable(stream, context)).ToArray(); + int count = ReadNumber(stream, context); if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); // Deserialize property values bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Span typeCacheSpan; - ReadOnlySpan objectCacheSpan; object? obj; - int objIndex; - try + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + for (int i = 0; i < count; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheSpan = typeCache.AsSpan(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheSpan = objectCache.AsSpan(0, byte.MaxValue); - for (int i = 0; i < count; i++) + pi = pis[i]; + attr = pi.Property.GetCustomAttributeCached(); + options = attr?.GetSerializerOptions(pi, context); + context.WithOptions(options); + itemContext.Nullable = options?.IsNullable ?? pi.Property.IsNullable(); + // Validate the property name + if ( + useChecksum && + !( + attr?.SkipPropertyNameChecksum ?? false) && + ReadOneByte(stream, context) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b) + ) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + obj = ReadAnyItemHeader(itemContext, i, pi.PropertyType); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - ReadOneByte(stream, version) != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - obj = ReadAnyItemHeader( - stream, - version.Value, - pi.PropertyType, - i, - typeCache, - objectCache, - ref objType, - ref lastObjType, - ref itemType, - ref itemSerializer, - ref itemSyncDeserializer - ); - if (obj == null && objType == ObjectTypes.Null) - { - if (!pi.PropertyType.IsNullable()) - throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); - pi.Setter!(res, null); - } - else if (obj == null) - { - pi.Setter!(res, itemSerializer == SerializerTypes.Serializer - ? obj = ReadItem(stream, version.Value, nullable: false, itemSerializer, itemType, pool: null, options: null, itemSyncDeserializer) - : obj = ReadAnyInt(stream, version.Value, objType, itemType, options: null)); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - pi.Setter!(res, obj); - } + if (!itemContext.Nullable) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, itemContext.ItemSerializer == SerializerTypes.Serializer + ? obj = ReadItem(itemContext) + : obj = ReadAnyInt(context, itemContext.ObjectType, itemContext.ItemType)); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + pi.Setter!(res, obj); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) @@ -396,109 +313,67 @@ ref itemSyncDeserializer /// /// Object type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Object - public static async Task ReadAnyObjectAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, new() + public static async Task ReadAnyObjectAsync(this Stream stream, IDeserializationContext context) where T : class, new() { - version ??= StreamSerializer.Version; + using ContextRecursion cr = new(context); // Handle serializable type Type type = typeof(T); if (typeof(IStreamSerializer).IsAssignableFrom(type)) - return (T)await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); + return (T)await ReadSerializedObjectAsync(stream, type, context).DynamicContext(); // Find the stream serializer attribute StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); // Get properties to read PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( type, - await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() + await ReadNumberNullableAsync(stream, context).DynamicContext() ).ToArray(); - int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + int count = await ReadNumberAsync(stream, context).DynamicContext(); if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); // Deserialize property values bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; T res = new(); - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Memory typeCacheMem; - ReadOnlyMemory objectCacheMem; object? obj; - int objIndex; - try + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + for (int i = 0; i < count; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); - for (int i = 0; i < count; i++) + pi = pis[i]; + attr = pi.Property.GetCustomAttributeCached(); + options = attr?.GetSerializerOptions(pi, context); + context.WithOptions(options); + itemContext.Nullable = options?.IsNullable ?? pi.Property.IsNullable(); + // Validate the property name + if ( + useChecksum && + !( + attr?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, context).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b) + ) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + obj = await ReadAnyItemHeaderAsync(itemContext, i, pi.PropertyType).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = - await ReadAnyItemHeaderAsync( - stream, - version.Value, - pi.PropertyType, - i, - typeCacheMem, - objectCacheMem, - lastObjType, - itemType, - itemSerializer, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext(); - if (obj == null && objType == ObjectTypes.Null) - { - if (!pi.PropertyType.IsNullable()) - throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); - pi.Setter!(res, null); - } - else if (obj == null) - { - pi.Setter!(res, obj = itemSerializer == SerializerTypes.Serializer - ? await ReadItemAsync( - stream, - version.Value, - nullable: false, - itemSerializer, - itemType, - pool: null, - options: null, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext() - : await ReadAnyIntAsync(stream, version.Value, objType, itemType, options: null, cancellationToken).DynamicContext()); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - pi.Setter!(res, obj); - } + if (!itemContext.Nullable) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, obj = itemContext.ItemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync(itemContext).DynamicContext() + : await ReadAnyIntAsync(context, itemContext.ObjectType, itemContext.ItemType).DynamicContext()); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + pi.Setter!(res, obj); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) @@ -514,108 +389,62 @@ await ReadAnyItemHeaderAsync( /// /// Stream /// Object type - /// Serializer version - /// Cancellation token + /// Context /// Object - public static async Task ReadAnyObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) + public static async Task ReadAnyObjectAsync(this Stream stream, Type type, IDeserializationContext context) { - version ??= StreamSerializer.Version; + using ContextRecursion cr = new(context); // Handle serializable type - if (typeof(IStreamSerializer).IsAssignableFrom(type)) - return await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext(); + if (typeof(IStreamSerializer).IsAssignableFrom(type)) return await ReadSerializedObjectAsync(stream, type, context).DynamicContext(); // Find the stream serializer attribute StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); if (AnyObjectAttributeRequired && attr == null) throw new SerializerException($"Deserialization of {type} requires the {typeof(StreamSerializerAttribute)}"); // Get properties to read - PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties( - type, - await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ).ToArray(); - int count = await ReadNumberAsync(stream, version, cancellationToken: cancellationToken).DynamicContext(); + PropertyInfoExt[] pis = StreamSerializerAttribute.GetReadProperties(type, await ReadNumberNullableAsync(stream, context).DynamicContext()).ToArray(); + int count = await ReadNumberAsync(stream, context).DynamicContext(); if (count != pis.Length) throw new SerializerException($"The serialized type has {count} properties, while {type} has {pis.Length} properties"); // Deserialize property values bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); PropertyInfoExt pi; object res = Activator.CreateInstance(type) ?? throw new SerializerException($"Failed to instance {type}"); - Type? itemType = null; - ObjectTypes objType = default, - lastObjType = default; - SerializerTypes itemSerializer = default; - StreamSerializer.Deserialize_Delegate? itemSyncDeserializer = null; - StreamSerializer.AsyncDeserialize_Delegate? itemAsyncDeserializer = null; - Type[]? typeCache = null; - object[]? objectCache = null; - Memory typeCacheMem; - ReadOnlyMemory objectCacheMem; object? obj; - int objIndex; - try + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + for (int i = 0; i < count; i++) { - typeCache = ArrayPool.Shared.RentClean(byte.MaxValue); - typeCacheMem = typeCache.AsMemory(0, byte.MaxValue); - objectCache = ArrayPool.Shared.RentClean(byte.MaxValue); - objectCacheMem = objectCache.AsMemory(0, byte.MaxValue); - for (int i = 0; i < count; i++) + pi = pis[i]; + attr = pi.Property.GetCustomAttributeCached(); + options = attr?.GetSerializerOptions(pi, context); + context.WithOptions(options); + itemContext.Nullable = options?.IsNullable ?? pi.Property.IsNullable(); + // Validate the property name + if ( + useChecksum && + !( + attr?.SkipPropertyNameChecksum ?? false) && + await ReadOneByteAsync(stream, context).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b) + ) + ) + throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); + // Deserialize the property value + obj = await ReadAnyItemHeaderAsync(itemContext, i, pi.PropertyType).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) { - pi = pis[i]; - // Validate the property name - if ( - useChecksum && - !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false) && - await ReadOneByteAsync(stream, version, cancellationToken).DynamicContext() != pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)) - ) - throw new SerializerException($"{type}.{pi.Property.Name} property name checksum mismatch"); - // Deserialize the property value - (obj, objType, lastObjType, itemType, itemSerializer, itemSyncDeserializer, itemAsyncDeserializer) = - await ReadAnyItemHeaderAsync( - stream, - version.Value, - pi.PropertyType, - i, - typeCacheMem, - objectCacheMem, - lastObjType, - itemType, - itemSerializer, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext(); - if (obj == null && objType == ObjectTypes.Null) - { - if (!pi.PropertyType.IsNullable()) - throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); - pi.Setter!(res, null); - } - else if (obj == null) - { - pi.Setter!(res, obj = itemSerializer == SerializerTypes.Serializer - ? await ReadItemAsync( - stream, - version.Value, - nullable: false, - itemSerializer, - itemType, - pool: null, - options: null, - itemSyncDeserializer, - itemAsyncDeserializer, - cancellationToken - ).DynamicContext() - : await ReadAnyIntAsync(stream, version.Value, objType, itemType, options: null, cancellationToken).DynamicContext()); - objIndex = objectCache.IndexOf(null); - if (objIndex != -1) objectCache[objIndex] = obj!; - } - else - { - pi.Setter!(res, obj); - } + if (!itemContext.Nullable) + throw new SerializerException($"Deserialized NULL for non-NULL property {type}.{pi.Property.Name}", new InvalidDataException()); + pi.Setter!(res, null); + } + else if (obj == null) + { + pi.Setter!(res, itemContext.ItemSerializer == SerializerTypes.Serializer + ? obj = await ReadItemAsync(itemContext).DynamicContext() + : obj = await ReadAnyIntAsync(context, itemContext.ObjectType, itemContext.ItemType).DynamicContext()); + if (itemContext.ObjectType.RequiresObjectWriting()) itemContext.AddObject(obj); + } + else + { + pi.Setter!(res, obj); } - } - finally - { - if (typeCache != null) ArrayPool.Shared.Return(typeCache); - if (objectCache != null) ArrayPool.Shared.Return(objectCache); } // Validate the resulting object if (!res.TryValidateObject(out List results)) @@ -631,45 +460,44 @@ await ReadAnyItemHeaderAsync( /// /// Object type /// Stream - /// Serializer version + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T? ReadAnyObjectNullable(this Stream stream, int? version = null) where T : class, new() - => ReadBool(stream, version) ? ReadAnyObject(stream, version) : null; + public static T? ReadAnyObjectNullable(this Stream stream, IDeserializationContext context) where T : class, new() + => ReadBool(stream, context) ? ReadAnyObject(stream, context) : null; /// /// Read any object /// /// Stream /// Object type - /// Serializer version + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static object? ReadAnyObjectNullable(this Stream stream, Type type, int? version = null) - => ReadBool(stream, version) ? ReadAnyObject(stream, type, version) : null; + public static object? ReadAnyObjectNullable(this Stream stream, Type type, IDeserializationContext context) + => ReadBool(stream, context) ? ReadAnyObject(stream, type, context) : null; /// /// Read any object /// /// Object type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadAnyObjectNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + public static async Task ReadAnyObjectNullableAsync(this Stream stream, IDeserializationContext context) where T : class, new() - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadAnyObjectAsync(stream, version, cancellationToken).DynamicContext() + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadAnyObjectAsync(stream, context).DynamicContext() : null; /// @@ -677,16 +505,15 @@ await ReadAnyItemHeaderAsync( /// /// Stream /// Object type - /// Serializer version - /// Cancellation token + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadAnyObjectNullableAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadAnyObjectAsync(stream, type, version, cancellationToken).DynamicContext() + public static async Task ReadAnyObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context) + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadAnyObjectAsync(stream, type, context).DynamicContext() : null; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs index 36caf4e..dfe02eb 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Serialized.cs @@ -15,14 +15,17 @@ public static partial class StreamExtensions /// /// Object type /// Stream - /// Serializer version + /// Context /// Object - public static T ReadSerialized(this Stream stream, int? version = null) where T : class, IStreamSerializer +#pragma warning disable IDE0060 // Remove unused argument + public static T ReadSerialized(this Stream stream, IDeserializationContext context) where T : class, IStreamSerializer +#pragma warning restore IDE0060 // Remove unused argument => SerializerException.Wrap(() => { + using ContextRecursion cr = new(context); Type type = typeof(T); - T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); - if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(stream, version ?? StreamSerializer.Version); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, context); + if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(context); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -36,15 +39,18 @@ public static T ReadSerialized(this Stream stream, int? version = null) where /// /// Stream /// Object type - /// Serializer version + /// Context /// Object - public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, int? version = null) +#pragma warning disable IDE0060 // Remove unused argument + public static IStreamSerializer ReadSerializedObject(this Stream stream, Type type, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument => SerializerException.Wrap(() => { + using ContextRecursion cr = new(context); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - IStreamSerializer res = (IStreamSerializer)StreamSerializer.CreateInstance(out ConstructorInfo? ci, type, stream, version); - if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(stream, version ?? StreamSerializer.Version); + IStreamSerializer res = (IStreamSerializer)StreamSerializer.CreateInstance(out ConstructorInfo? ci, type, context); + if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(context); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -58,17 +64,19 @@ public static IStreamSerializer ReadSerializedObject(this Stream stream, Type ty /// /// Object type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Object - public static Task ReadSerializedAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, IStreamSerializer +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadSerializedAsync(this Stream stream, IDeserializationContext context) where T : class, IStreamSerializer +#pragma warning restore IDE0060 // Remove unused argument => SerializerException.WrapAsync(async () => { + using ContextRecursion cr = new(context); Type type = typeof(T); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); - if ((ci?.GetParametersCached().Length ?? 0) == 0) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, context); + if ((ci?.GetParametersCached().Length ?? 0) == 0) await res.DeserializeAsync(context).DynamicContext(); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -82,16 +90,18 @@ public static Task ReadSerializedAsync(this Stream stream, int? version = /// /// Stream /// Type - /// Serializer version - /// Cancellation token + /// Context /// Object - public static Task ReadSerializedObjectAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadSerializedObjectAsync(this Stream stream, Type type, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument => SerializerException.WrapAsync(async () => { + using ContextRecursion cr = new(context); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - IStreamSerializer res = (IStreamSerializer)StreamSerializer.CreateInstance(out ConstructorInfo? ci, type, stream, version); - if (!(ci?.IsSerializerConstructor() ?? false)) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + IStreamSerializer res = (IStreamSerializer)StreamSerializer.CreateInstance(out ConstructorInfo? ci, type, context); + if (!(ci?.IsSerializerConstructor() ?? false)) await res.DeserializeAsync(context).DynamicContext(); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -105,15 +115,15 @@ public static Task ReadSerializedObjectAsync(this Stream stre /// /// Object type /// Stream - /// Serializer version + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T? ReadSerializedNullable(this Stream stream, int? version = null) where T : class, IStreamSerializer + public static T? ReadSerializedNullable(this Stream stream, IDeserializationContext context) where T : class, IStreamSerializer #pragma warning disable IDE0034 // default expression can be simplified - => ReadBool(stream, version) ? ReadSerialized(stream, version) : default(T?); + => ReadBool(stream, context) ? ReadSerialized(stream, context) : default(T?); #pragma warning restore IDE0034 // default expression can be simplified /// @@ -121,16 +131,15 @@ public static Task ReadSerializedObjectAsync(this Stream stre /// /// Object type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadSerializedNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : class, IStreamSerializer - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadSerializedAsync(stream, version, cancellationToken).DynamicContext() + public static async Task ReadSerializedNullableAsync(this Stream stream, IDeserializationContext context) where T : class, IStreamSerializer + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadSerializedAsync(stream, context).DynamicContext() #pragma warning disable IDE0034 // default expression can be simplified : default(T?); #pragma warning restore IDE0034 // default expression can be simplified @@ -141,30 +150,29 @@ public static Task ReadSerializedObjectAsync(this Stream stre /// /// Stream /// Type - /// Serializer version + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static object? ReadSerializedObjectNullable(this Stream stream, Type type, int? version = null) - => ReadBool(stream, version) ? ReadSerializedObject(stream, type, version) : null; + public static object? ReadSerializedObjectNullable(this Stream stream, Type type, IDeserializationContext context) + => ReadBool(stream, context) ? ReadSerializedObject(stream, type, context) : null; /// /// Read /// /// Stream /// Type - /// Serializer version - /// Cancellation token + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadSerializedObjectNullableAsync(this Stream stream, Type type, int? version = null, CancellationToken cancellationToken = default) - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadSerializedObjectAsync(stream, type, version, cancellationToken).DynamicContext() + public static async Task ReadSerializedObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context) + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadSerializedObjectAsync(stream, type, context).DynamicContext() : null; /// @@ -172,16 +180,19 @@ public static Task ReadSerializedObjectAsync(this Stream stre /// /// Structure type /// Stream - /// Serializer version + /// Context /// Structure - public static T ReadSerializedStruct(this Stream stream, int? version = null) where T : struct, IStreamSerializer +#pragma warning disable IDE0060 // Remove unused argument + public static T ReadSerializedStruct(this Stream stream, IDeserializationContext context) where T : struct, IStreamSerializer +#pragma warning restore IDE0060 // Remove unused argument => SerializerException.Wrap(() => { + using ContextRecursion cr = new(context); Type type = typeof(T); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); - if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(stream, version ?? StreamSerializer.Version); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, context); + if (!(ci?.IsSerializerConstructor() ?? false)) res.Deserialize(context); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -195,17 +206,19 @@ public static T ReadSerializedStruct(this Stream stream, int? version = null) /// /// Structure type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Structure - public static Task ReadSerializedStructAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadSerializedStructAsync(this Stream stream, IDeserializationContext context) where T : struct, IStreamSerializer +#pragma warning restore IDE0060 // Remove unused argument => SerializerException.WrapAsync(async () => { + using ContextRecursion cr = new(context); Type type = typeof(T); if (type.IsAbstract || type.IsInterface || type.IsGenericTypeDefinition) throw new SerializerException($"Type {type} isn't a supported deserializer type"); - T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, stream, version); - if (!(ci?.IsSerializerConstructor() ?? false)) await res.DeserializeAsync(stream, version ?? StreamSerializer.Version, cancellationToken).DynamicContext(); + T res = StreamSerializer.CreateInstance(out ConstructorInfo? ci, context); + if (!(ci?.IsSerializerConstructor() ?? false)) await res.DeserializeAsync(context).DynamicContext(); if (!res.TryValidateObject(out List results)) throw new SerializerException( $"The deserialized object contains {results.Count} errors: {results[0].ErrorMessage} ({string.Join(',', results[0].MemberNames)})", @@ -219,31 +232,30 @@ public static Task ReadSerializedStructAsync(this Stream stream, int? vers /// /// Structure type /// Stream - /// Serializer version + /// Context /// Structure [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T? ReadSerializedStructNullable(this Stream stream, int? version = null) where T : struct, IStreamSerializer - => ReadBool(stream, version) ? ReadSerializedStruct(stream, version) : default(T?); + public static T? ReadSerializedStructNullable(this Stream stream, IDeserializationContext context) where T : struct, IStreamSerializer + => ReadBool(stream, context) ? ReadSerializedStruct(stream, context) : default(T?); /// /// Read /// /// Structure type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Structure [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadSerializedStructNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) + public static async Task ReadSerializedStructNullableAsync(this Stream stream, IDeserializationContext context) where T : struct, IStreamSerializer - => await ReadBoolAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() - ? await ReadSerializedStructAsync(stream, version, cancellationToken).DynamicContext() + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadSerializedStructAsync(stream, context).DynamicContext() : default(T?); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs index 2f8598c..45ddeae 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -13,30 +12,28 @@ public static partial class StreamExtensions /// /// Stream /// Target stream (the position won't be reset) - /// Serializer version - /// Array pool + /// Context /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes /// Target stream +#pragma warning disable IDE0060 // Remove unused argument public static Stream ReadStream( this Stream stream, Stream target, - int? version = null, - ArrayPool? pool = null, + IDeserializationContext context, int? maxBufferSize = null, long minLen = 0, long maxLen = long.MaxValue ) - => ReadStreamInt(stream, target, version, pool, maxBufferSize, minLen, maxLen, len: null); +#pragma warning restore IDE0060 // Remove unused argument + => ReadStreamInt(context, target, maxBufferSize, minLen, maxLen, len: null); /// /// Read a stream /// - /// Stream + /// Context /// Target stream (the position won't be reset) - /// Serializer version - /// Array pool /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes @@ -46,10 +43,8 @@ public static Stream ReadStream( [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif private static Stream ReadStreamInt( - this Stream stream, + IDeserializationContext context, Stream target, - int? version, - ArrayPool? pool, int? maxBufferSize, long minLen, long maxLen, @@ -61,7 +56,7 @@ private static Stream ReadStreamInt( if (maxBufferSize != null) ArgumentValidationHelper.EnsureValidArgument(nameof(maxBufferSize), 1, int.MaxValue, maxBufferSize.Value); ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, long.MaxValue, minLen); ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), minLen, long.MaxValue, maxLen); - len ??= stream.ReadNumber(version, pool); + len ??= context.Stream.ReadNumber(context); if (len == 0) { if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); @@ -74,11 +69,11 @@ private static Stream ReadStreamInt( if (len > int.MaxValue) throw new SerializerException($"Invalid chunk length {len}", new InvalidDataException()); if (len > (maxBufferSize ?? Settings.BufferSize)) throw new SerializerException($"Chunk length of {len} bytes exceeds max. buffer size of {maxBufferSize ?? Settings.BufferSize}", new InvalidDataException()); - using RentedArray buffer = new((int)len, pool ?? StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new((int)len, context.BufferPool, clean: false); long total = 0; for (int red = (int)len; red == len; total += red) { - red = stream.ReadBytes(version, buffer.Array, maxLen: buffer.Length).Length; + red = context.Stream.ReadBytes(context, maxLen: buffer.Length).Length; if (total + red > maxLen) throw new SerializerException($"The embedded stream length exceeds the maximum of {maxLen} bytes", new OverflowException()); if (red < 1) break; target.Write(buffer.Span[..red]); @@ -91,11 +86,11 @@ private static Stream ReadStreamInt( if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); if (len > maxLen) throw new SerializerException($"Embedded stream length of {len} bytes exceeds the maximum stream length of {maxLen} bytes", new OverflowException()); - using RentedArray buffer = new(maxBufferSize ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(maxBufferSize ?? Settings.BufferSize, context.BufferPool, clean: false); long total = 0; for (int red = buffer.Length; red == buffer.Length && total < len; total += red) { - red = stream.Read(buffer.Span[..(int)Math.Min(buffer.Length, len.Value - total)]); + red = context.Stream.Read(buffer.Span[..(int)Math.Min(buffer.Length, len.Value - total)]); if (red < 1) break; target.Write(buffer.Span[..red]); } @@ -109,8 +104,7 @@ private static Stream ReadStreamInt( /// /// Stream /// Target stream (the position won't be reset; will be disposed, if the value is ) - /// Serializer version - /// Array pool + /// Context /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes @@ -122,34 +116,33 @@ private static Stream ReadStreamInt( public static Stream? ReadStreamNullable( this Stream stream, Stream target, - int? version = null, - ArrayPool? pool = null, + IDeserializationContext context, int? maxBufferSize = null, long minLen = 0, long maxLen = long.MaxValue ) => SerializerException.Wrap(() => { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: { - if (!ReadBool(stream, version, pool)) + if (!ReadBool(stream, context)) { target.Dispose(); return null; } - return ReadStream(stream, target, version, pool, maxBufferSize, minLen, maxLen); + return ReadStream(stream, target, context, maxBufferSize, minLen, maxLen); } default: { - long len = ReadNumber(stream, version, pool); + long len = ReadNumber(stream, context); if (len == long.MinValue) { target.Dispose(); return null; } - return ReadStreamInt(stream, target, version, pool, maxBufferSize, minLen, maxLen, len); + return ReadStreamInt(context, target, maxBufferSize, minLen, maxLen, len); } } }); @@ -159,55 +152,47 @@ private static Stream ReadStreamInt( /// /// Stream /// Target stream (the position won't be reset) - /// Serializer version - /// Array pool + /// Context /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes - /// Cancellation token /// Target stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif +#pragma warning disable IDE0060 // Remove unused argument public static Task ReadStreamAsync( this Stream stream, Stream target, - int? version = null, - ArrayPool? pool = null, + IDeserializationContext context, int? maxBufferSize = null, long minLen = 0, - long maxLen = long.MaxValue, - CancellationToken cancellationToken = default + long maxLen = long.MaxValue ) - => ReadStreamIntAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, len: null, cancellationToken); +#pragma warning restore IDE0060 // Remove unused argument + => ReadStreamIntAsync(context, target, maxBufferSize, minLen, maxLen, len: null); /// /// Read a stream /// - /// Stream + /// Context /// Target stream (the position won't be reset) - /// Serializer version - /// Array pool /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes /// Stream/chunk length in bytes (chunk length is negative) - /// Cancellation token /// Target stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif private static Task ReadStreamIntAsync( - Stream stream, + IDeserializationContext context, Stream target, - int? version, - ArrayPool? pool, int? maxBufferSize, long minLen, long maxLen, - long? len, - CancellationToken cancellationToken + long? len ) => SerializerException.WrapAsync(async () => { @@ -215,7 +200,7 @@ CancellationToken cancellationToken if (maxBufferSize != null) ArgumentValidationHelper.EnsureValidArgument(nameof(maxBufferSize), 1, int.MaxValue, maxBufferSize.Value); ArgumentValidationHelper.EnsureValidArgument(nameof(minLen), 0, long.MaxValue, minLen); ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), minLen, long.MaxValue, maxLen); - len ??= await stream.ReadNumberAsync(version, pool, cancellationToken).DynamicContext(); + len ??= await context.Stream.ReadNumberAsync(context).DynamicContext(); if (len == 0) { if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); @@ -228,14 +213,14 @@ CancellationToken cancellationToken if (len > int.MaxValue) throw new SerializerException($"Invalid chunk length {len}", new InvalidDataException()); if (len > (maxBufferSize ?? Settings.BufferSize)) throw new SerializerException($"Chunk length of {len} bytes exceeds max. buffer size of {maxBufferSize ?? Settings.BufferSize}", new InvalidDataException()); - using RentedArray buffer = new((int)len, pool ?? StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new((int)len, context.BufferPool, clean: false); long total = 0; for (int red = (int)len; red == len; total += red) { - red = (await stream.ReadBytesAsync(version, buffer.Array, maxLen: buffer.Length, cancellationToken: cancellationToken).DynamicContext()).Length; + red = (await context.Stream.ReadBytesAsync(context, maxLen: buffer.Length).DynamicContext()).Length; if (total + red > maxLen) throw new SerializerException($"The embedded stream length exceeds the maximum of {maxLen} bytes", new OverflowException()); if (red < 1) break; - await target.WriteAsync(buffer.Memory[..red], cancellationToken).DynamicContext(); + await target.WriteAsync(buffer.Memory[..red], context.Cancellation).DynamicContext(); } if (total < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); } @@ -245,13 +230,13 @@ CancellationToken cancellationToken if (len < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); if (len > maxLen) throw new SerializerException($"Embedded stream length of {len} bytes exceeds the maximum stream length of {maxLen} bytes", new OverflowException()); - using RentedArray buffer = new(maxBufferSize ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(maxBufferSize ?? Settings.BufferSize, context.BufferPool, clean: false); long total = 0; for (int red = buffer.Length; red == buffer.Length && total < len; total += red) { - red = await stream.ReadAsync(buffer.Memory[..(int)Math.Min(buffer.Length, len.Value - total)], cancellationToken: cancellationToken).DynamicContext(); + red = await context.Stream.ReadAsync(buffer.Memory[..(int)Math.Min(buffer.Length, len.Value - total)], context.Cancellation).DynamicContext(); if (red < 1) break; - await target.WriteAsync(buffer.Memory[..red], cancellationToken).DynamicContext(); + await target.WriteAsync(buffer.Memory[..red], context.Cancellation).DynamicContext(); } if (total != len) throw new SerializerException($"Invalid stream length ({len} bytes proposed, {total} bytes red)", new IOException()); } @@ -263,12 +248,10 @@ CancellationToken cancellationToken /// /// Stream /// Target stream (the position won't be reset; will be disposed, if the value is ) - /// Serializer version - /// Array pool + /// Context /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes - /// Cancellation token /// Target stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -277,35 +260,33 @@ CancellationToken cancellationToken public static Task ReadStreamNullableAsync( this Stream stream, Stream target, - int? version = null, - ArrayPool? pool = null, + IDeserializationContext context, int? maxBufferSize = null, long minLen = 0, - long maxLen = long.MaxValue, - CancellationToken cancellationToken = default + long maxLen = long.MaxValue ) => SerializerException.WrapAsync(async () => { - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: { - if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) + if (!await ReadBoolAsync(stream, context).DynamicContext()) { await target.DisposeAsync().DynamicContext(); return null; } - return await ReadStreamAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, cancellationToken).DynamicContext(); + return await ReadStreamAsync(stream, target, context, maxBufferSize, minLen, maxLen).DynamicContext(); } default: { - long len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + long len = await ReadNumberAsync(stream, context).DynamicContext(); if (len == long.MinValue) { await target.DisposeAsync().DynamicContext(); return null; } - return await ReadStreamIntAsync(stream, target, version, pool, maxBufferSize, minLen, maxLen, len, cancellationToken).DynamicContext(); + return await ReadStreamIntAsync(context, target, maxBufferSize, minLen, maxLen, len).DynamicContext(); } } }); diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs index 7bfb740..caa4cae 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -11,364 +10,323 @@ public static partial class StreamExtensions /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value - public static string ReadString(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String()); +#pragma warning disable IDE0060 // Remove unused argument + public static string ReadString(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadString(context, minLen, maxLen, (data) => data.ToUtf8String()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value - public static Task ReadStringAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => ReadStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadStringAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadStringAsync(context, minLen, maxLen, (data) => data.ToUtf8String()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value - public static string? ReadStringNullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadNullableString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String()); +#pragma warning disable IDE0060 // Remove unused argument + public static string? ReadStringNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableString(context, minLen, maxLen, (data) => data.ToUtf8String()); /// /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value - public static Task ReadStringNullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => ReadNullableStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf8String(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadStringNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableStringAsync(context, minLen, maxLen, (data) => data.ToUtf8String()); /// /// Read UTF-16 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value - public static string ReadString16(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String()); +#pragma warning disable IDE0060 // Remove unused argument + public static string ReadString16(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadString(context, minLen, maxLen, (data) => data.ToUtf16String()); /// /// Read UTF-16 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value - public static Task ReadString16Async( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => ReadStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadString16Async(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadStringAsync(context, minLen, maxLen, (data) => data.ToUtf16String()); /// /// Read UTF-16 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value - public static string? ReadString16Nullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadNullableString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String()); +#pragma warning disable IDE0060 // Remove unused argument + public static string? ReadString16Nullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableString(context, minLen, maxLen, (data) => data.ToUtf16String()); /// /// Read UTF-16 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value - public static Task ReadString16NullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => ReadNullableStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf16String(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadString16NullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableStringAsync(context, minLen, maxLen, (data) => data.ToUtf16String()); /// /// Read UTF-32 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value - public static string ReadString32(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String()); +#pragma warning disable IDE0060 // Remove unused argument + public static string ReadString32(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadString(context, minLen, maxLen, (data) => data.ToUtf32String()); /// /// Read UTF-32 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value - public static Task ReadString32Async( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => ReadStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadString32Async(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadStringAsync(context, minLen, maxLen, (data) => data.ToUtf32String()); /// /// Read UTF-32 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes /// Value - public static string? ReadString32Nullable(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) - => ReadNullableString(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String()); +#pragma warning disable IDE0060 // Remove unused argument + public static string? ReadString32Nullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableString(context, minLen, maxLen, (data) => data.ToUtf32String()); /// /// Read UTF-32 (little endian) string /// /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token /// Value - public static Task ReadString32NullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => ReadNullableStringAsync(stream, version, minLen, maxLen, pool, (data, len) => data.AsSpan(0, len).ToUtf32String(), cancellationToken); +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadString32NullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) +#pragma warning restore IDE0060 // Remove unused argument + => ReadNullableStringAsync(context, minLen, maxLen, (data) => data.ToUtf32String()); /// /// Read a string /// - /// Stream - /// Serializer version + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Array pool /// Action to execute for decoding the resulting string /// String #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static string ReadString(Stream stream, int? version, int minLen, int maxLen, ArrayPool? pool, Func action) + [SkipLocalsInit] + private static string ReadString(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - version ??= StreamSerializer.Version; - pool ??= StreamSerializer.BufferPool; - int len = ReadNumber(stream, version, pool); + int len = ReadNumber(context.Stream, context); SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return string.Empty; - byte[] buffer = ReadSerializedData(stream, len, pool); - try + if (len <= Settings.StackAllocBorder) { - return action(buffer, len); + Span buffer = stackalloc byte[len]; + if (context.Stream.Read(buffer) != len) throw new SerializerException($"Failed to read {len} bytes serialized data", new IOException()); + return action(buffer); } - finally + else { - pool.Return(buffer); + byte[] buffer = ReadSerializedData(context.Stream, len, context); + try + { + return action(buffer.AsSpan(0, len)); + } + finally + { + context.BufferPool.Return(buffer); + } } } /// /// Read a string /// - /// Stream - /// Serializer version + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Array pool /// Action to execute for decoding the resulting string - /// Cancellation token /// String #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task ReadStringAsync( - Stream stream, - int? version, - int minLen, - int maxLen, - ArrayPool? pool, - Func action, - CancellationToken cancellationToken - ) + private static async Task ReadStringAsync(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - version ??= StreamSerializer.Version; - pool ??= StreamSerializer.BufferPool; - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(context.Stream, context).DynamicContext(); SerializerHelper.EnsureValidLength(len, minLen, maxLen); if (len == 0) return string.Empty; - byte[] buffer = await ReadSerializedDataAsync(stream, len, pool, cancellationToken).DynamicContext(); + byte[] buffer = await ReadSerializedDataAsync(context.Stream, len, context).DynamicContext(); try { - return action(buffer, len); + return action(buffer.AsSpan(0, len)); } finally { - pool.Return(buffer); + context.BufferPool.Return(buffer); } } /// /// Read a string /// - /// Stream - /// Serializer version + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Array pool /// Action to execute for decoding the resulting string /// String #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static string? ReadNullableString(Stream stream, int? version, int minLen, int maxLen, ArrayPool? pool, Func action) + [SkipLocalsInit] + private static string? ReadNullableString(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - pool ??= StreamSerializer.BufferPool; int? len; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - if (!ReadBool(stream, version, pool)) return null; - len = ReadNumber(stream, version, pool); + if (!ReadBool(context.Stream, context)) return null; + len = ReadNumber(context.Stream, context); } break; default: { - len = ReadNumberNullable(stream, version, pool); + len = ReadNumberNullable(context.Stream, context); if (len == null) return null; } break; } SerializerHelper.EnsureValidLength(len.Value, minLen, maxLen); if (len == 0) return string.Empty; - byte[] buffer = ReadSerializedData(stream, len.Value, pool); - try + if (len <= Settings.StackAllocBorder) { - return action(buffer, len.Value); + Span buffer = stackalloc byte[len.Value]; + if (context.Stream.Read(buffer) != len) throw new SerializerException($"Failed to read {len} bytes serialized data", new IOException()); + return action(buffer); } - finally + else { - pool.Return(buffer); + byte[] buffer = ReadSerializedData(context.Stream, len.Value, context); + try + { + return action(buffer.AsSpan(0, len.Value)); + } + finally + { + context.BufferPool.Return(buffer); + } } } /// /// Read a string /// - /// Stream - /// Serializer version + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Array pool /// Action to execute for decoding the resulting string - /// Cancellation token /// String #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task ReadNullableStringAsync( - Stream stream, - int? version, - int minLen, - int maxLen, - ArrayPool? pool, - Func action, - CancellationToken cancellationToken - ) + private static async Task ReadNullableStringAsync(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - pool ??= StreamSerializer.BufferPool; int? len; - switch ((version ??= StreamSerializer.Version) & byte.MaxValue)// Serializer version switch + switch (context.SerializerVersion)// Serializer version switch { case 1: case 2: { - if (!await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext()) return null; - len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + if (!await ReadBoolAsync(context.Stream, context).DynamicContext()) return null; + len = await ReadNumberAsync(context.Stream, context).DynamicContext(); } break; default: { - len = await ReadNumberNullableAsync(stream, version, pool, cancellationToken).DynamicContext(); + len = await ReadNumberNullableAsync(context.Stream, context).DynamicContext(); if (len == null) return null; } break; } SerializerHelper.EnsureValidLength(len.Value, minLen, maxLen); if (len == 0) return string.Empty; - byte[] buffer = await ReadSerializedDataAsync(stream, len.Value, pool, cancellationToken).DynamicContext(); + byte[] buffer = await ReadSerializedDataAsync(context.Stream, len.Value, context).DynamicContext(); try { - return action(buffer, len.Value); + return action(buffer.AsSpan(0, len.Value)); } finally { - pool.Return(buffer); + context.BufferPool.Return(buffer); } } + + /// + /// Delegate for a string reader + /// + /// Buffer + /// String + private delegate string StringReader_Delegate(Span buffer); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs index 44e6c96..96e5a9c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Struct.cs @@ -14,26 +14,19 @@ public static partial class StreamExtensions /// /// Struct type /// Stream - /// Serializer version - /// Buffer - /// Buffer pool + /// Contxt /// Struct [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T ReadStruct( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null - ) + public static T ReadStruct(this Stream stream, IDeserializationContext context) where T : struct => SerializerException.Wrap(() => { int len = Marshal.SizeOf(typeof(T)); - pool ??= StreamSerializer.BufferPool; - byte[] data = stream.ReadBytes(version, buffer, pool, len, len).Value; + byte[] data = context.BufferPool.Rent(len); + stream.ReadBytes(context, len, len); try { GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned); @@ -48,7 +41,7 @@ public static T ReadStruct( } finally { - if (buffer == null) pool.Return(data); + context.BufferPool.Return(data); } }); @@ -57,28 +50,18 @@ public static T ReadStruct( /// /// Struct type /// Stream - /// Serializer version - /// Buffer - /// Buffer pool - /// Cancellation token + /// Context /// Struct [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task ReadStructAsync( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) - where T : struct + public static Task ReadStructAsync(this Stream stream, IDeserializationContext context) where T : struct => SerializerException.WrapAsync(async () => { int len = Marshal.SizeOf(typeof(T)); - pool ??= StreamSerializer.BufferPool; - byte[] data = (await stream.ReadBytesAsync(version, buffer, pool, len, len, cancellationToken).DynamicContext()).Value; + byte[] data = context.BufferPool.Rent(len); + await stream.ReadBytesAsync(context, len, len).DynamicContext(); try { GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned); @@ -93,7 +76,7 @@ public static Task ReadStructAsync( } finally { - if (buffer == null) pool.Return(data); + context.BufferPool.Return(data); } }); @@ -102,47 +85,27 @@ public static Task ReadStructAsync( /// /// Struct type /// Stream - /// Serializer version - /// Buffer - /// Buffer pool + /// Context /// Struct [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static T? ReadStructNullable( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null - ) - where T : struct - => ReadBool(stream, version, pool) ? ReadStruct(stream, version, buffer, pool) : null; + public static T? ReadStructNullable(this Stream stream, IDeserializationContext context) where T : struct + => ReadBool(stream, context) ? ReadStruct(stream, context) : null; /// /// Read a struct /// /// Struct type /// Stream - /// Serializer version - /// Buffer - /// Buffer pool - /// Cancellation token + /// Context /// Struct [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadStructNullableAsync( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) - where T : struct - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadStructAsync(stream, version, buffer, pool, cancellationToken).DynamicContext() - : null; + public static async Task ReadStructNullableAsync(this Stream stream, IDeserializationContext context) where T : struct + => await ReadBoolAsync(stream, context).DynamicContext() ? await ReadStructAsync(stream, context).DynamicContext() : null; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs index db87cee..c6de626 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs @@ -1,5 +1,5 @@ -using System.Runtime.CompilerServices; -using System.Runtime; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -11,45 +11,44 @@ public static partial class StreamExtensions /// Read a type /// /// Stream - /// Serializer version + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Type ReadType(this Stream stream, int? version = null) => ReadSerialized(stream, version).ToClrType(); + public static Type ReadType(this Stream stream, IDeserializationContext context) => ReadSerialized(stream, context).ToClrType(); /// /// Read a type /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadTypeAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => (await ReadSerializedAsync(stream, version, cancellationToken).DynamicContext()).ToClrType(); + public static async Task ReadTypeAsync(this Stream stream, IDeserializationContext context) + => (await ReadSerializedAsync(stream, context).DynamicContext()).ToClrType(); /// /// Read a serializable type ( /// /// Stream - /// Serializer version + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Type ReadSerializableType(this Stream stream, int? version = null) => ReadSerialized(stream, version).ToSerializableType(); + public static Type ReadSerializableType(this Stream stream, IDeserializationContext context) + => ReadSerialized(stream, context).ToSerializableType(); /// /// Read a type /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadSerializableTypeAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => (await ReadSerializedAsync(stream, version, cancellationToken).DynamicContext()).ToSerializableType(); + public static async Task ReadSerializableTypeAsync(this Stream stream, IDeserializationContext context) + => (await ReadSerializedAsync(stream, context).DynamicContext()).ToSerializableType(); /// /// Read a type @@ -57,12 +56,14 @@ public static async Task ReadSerializableTypeAsync(this Stream stream, int /// Stream /// Pre-red object version /// Pre-red object type - /// Serializer version + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Type ReadType(this Stream stream, int objVersion, ObjectTypes objType, int? version = null) - => SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion, objType).ToClrType(); +#pragma warning disable IDE0060 // Remove unused argument + public static Type ReadType(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => SerializedTypeInfo.From(context, objVersion, objType).ToClrType(); /// /// Read a type @@ -70,13 +71,14 @@ public static Type ReadType(this Stream stream, int objVersion, ObjectTypes objT /// Stream /// Pre-red object version /// Pre-red object type - /// Serializer version - /// Cancellation token + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadTypeAsync(this Stream stream, int objVersion, ObjectTypes objType, int? version = null, CancellationToken cancellationToken = default) - => (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, objType, cancellationToken).DynamicContext()).ToClrType(); +#pragma warning disable IDE0060 // Remove unused argument + public static async Task ReadTypeAsync(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => (await SerializedTypeInfo.FromAsync(context, objVersion, objType).DynamicContext()).ToClrType(); /// /// Read a serializable type ( @@ -84,12 +86,14 @@ public static async Task ReadTypeAsync(this Stream stream, int objVersion, /// Stream /// Pre-red object version /// Pre-red object type - /// Serializer version + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Type ReadSerializableType(this Stream stream, int objVersion, ObjectTypes objType, int? version = null) - => SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion, objType).ToSerializableType(); +#pragma warning disable IDE0060 // Remove unused argument + public static Type ReadSerializableType(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => SerializedTypeInfo.From(context, objVersion, objType).ToSerializableType(); /// /// Read a type @@ -97,71 +101,69 @@ public static Type ReadSerializableType(this Stream stream, int objVersion, Obje /// Stream /// Pre-red object version /// Pre-red object type - /// Serializer version - /// Cancellation token + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadSerializableTypeAsync( - this Stream stream, - int objVersion, - ObjectTypes objType, - int? version = null, - CancellationToken cancellationToken = default - ) - => (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, objType, cancellationToken).DynamicContext()).ToSerializableType(); +#pragma warning disable IDE0060 // Remove unused argument + public static async Task ReadSerializableTypeAsync(this Stream stream, int objVersion, ObjectTypes objType, IDeserializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => (await SerializedTypeInfo.FromAsync(context, objVersion, objType).DynamicContext()).ToSerializableType(); /// /// Read a type /// /// Stream - /// Serializer version + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Type? ReadTypeNullable(this Stream stream, int? version = null) - => ReadNumberNullable(stream, version) is int objVersion ? SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion).ToClrType() : null; + public static Type? ReadTypeNullable(this Stream stream, IDeserializationContext context) + { + int objVersion = ReadOneByte(stream, context); + return objVersion != 0 ? SerializedTypeInfo.From(context, objVersion).ToClrType() : null; + } /// /// Read a type /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadTypeNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() is int objVersion - ? (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, cancellationToken: cancellationToken).DynamicContext()).ToClrType() - : null; + public static async Task ReadTypeNullableAsync(this Stream stream, IDeserializationContext context) + { + int objVersion = await ReadOneByteAsync(stream, context).DynamicContext(); + return objVersion != 0 ? (await SerializedTypeInfo.FromAsync(context, objVersion).DynamicContext()).ToClrType() : null; + } /// /// Read a serializable type ( /// /// Stream - /// Serializer version + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Type? ReadSerializableTypeNullable(this Stream stream, int? version = null) - => ReadNumberNullable(stream, version) is int objVersion - ? SerializedTypeInfo.From(stream, version ?? StreamSerializer.Version, objVersion).ToSerializableType() - : null; + public static Type? ReadSerializableTypeNullable(this Stream stream, IDeserializationContext context) + { + int objVersion = ReadOneByte(stream, context); + return objVersion != 0 ? SerializedTypeInfo.From(context, objVersion).ToSerializableType() : null; + } /// /// Read a type /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Type [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static async Task ReadSerializableTypeNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) - => await ReadNumberNullableAsync(stream, version, cancellationToken: cancellationToken).DynamicContext() is int objVersion - ? (await SerializedTypeInfo.FromAsync(stream, version ?? StreamSerializer.Version, objVersion, cancellationToken: cancellationToken).DynamicContext()) - .ToSerializableType() - : null; + public static async Task ReadSerializableTypeNullableAsync(this Stream stream, IDeserializationContext context) + { + int objVersion = await ReadOneByteAsync(stream, context).DynamicContext(); + return objVersion != 0 ? (await SerializedTypeInfo.FromAsync(context, objVersion).DynamicContext()).ToSerializableType() : null; + } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs index a15718c..23f854a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Reflection; +using System.Reflection; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -31,7 +30,7 @@ public static partial class StreamExtensions public static readonly MethodInfo ReadStructNullableAsyncMethod; /// - /// Require the attribute when using etc.? + /// Require the attribute when using etc.? /// public static bool AnyObjectAttributeRequired { get; set; } = true; @@ -39,14 +38,15 @@ public static partial class StreamExtensions /// Read the serializer version /// /// Steam + /// Context /// Serializer version [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static int ReadSerializerVersion(this Stream stream) + public static int ReadSerializerVersion(this Stream stream, IDeserializationContext context) { - int res = ReadNumber(stream, version: 1); + int res = ReadNumber(stream, context); if (res < 1 || (res & byte.MaxValue) > StreamSerializer.VERSION) throw new SerializerException($"Invalid or unsupported stream serializer version #{res}", new InvalidDataException()); return res; @@ -55,16 +55,16 @@ public static int ReadSerializerVersion(this Stream stream) /// /// Read the serializer version /// - /// Steam - /// Cancellation token + /// Stream + /// Context /// Serializer version [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) + public static async Task ReadSerializerVersionAsync(this Stream stream, IDeserializationContext context) { - int res = await ReadNumberAsync(stream, version: 1, cancellationToken: cancellationToken).DynamicContext(); + int res = await ReadNumberAsync(stream, context).DynamicContext(); if (res < 1 || (res & byte.MaxValue) > StreamSerializer.VERSION) throw new SerializerException($"Invalid or unsupported stream serializer version #{res}", new InvalidDataException()); return res; @@ -75,17 +75,15 @@ public static async Task ReadSerializerVersionAsync(this Stream stream, Can /// /// Stream /// Length in bytes - /// Array pool - /// Serialized data (a pool array which needs to be returned to the pool ( will be used per default) after use and might - /// be larger than the given length!) + /// Context + /// Serialized data (a pool array which needs to be returned to the context buffer pool after use and might be larger than the given length!) [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool? pool = null) + public static byte[] ReadSerializedData(this Stream stream, int len, IDeserializationContext context) { - pool ??= StreamSerializer.BufferPool; - byte[] res = pool.Rent(len); + byte[] res = context.BufferPool.Rent(len); try { return SerializerException.Wrap(() => @@ -97,7 +95,7 @@ public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool /// Stream /// Length in bytes - /// Array pool - /// Cancellation token - /// Serialized data (a pool array which needs to be returned to the pool ( will be used per default) after use and might - /// be larger than the given length!) + /// Context + /// Serialized data (a pool array which needs to be returned to the context buffer pool after use and might be larger than the given length!) [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task ReadSerializedDataAsync(this Stream stream, int len, ArrayPool? pool = null, CancellationToken cancellationToken = default) + public static async Task ReadSerializedDataAsync(this Stream stream, int len, IDeserializationContext context) { - pool ??= StreamSerializer.BufferPool; - byte[] res = pool.Rent(len); + byte[] res = context.BufferPool.Rent(len); try { return await SerializerException.WrapAsync(async () => { - int red = await stream.ReadAsync(res.AsMemory(0, len), cancellationToken).DynamicContext(); + int red = await stream.ReadAsync(res.AsMemory(0, len), context.Cancellation).DynamicContext(); if (red != len) throw new IOException($"Failed to read serialized data ({len} bytes expected, {red} bytes red)"); return res; }).DynamicContext(); } catch { - pool.Return(res, clearArray: false); + context.BufferPool.Return(res, clearArray: false); throw; } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs b/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs new file mode 100644 index 0000000..dfca80a --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs @@ -0,0 +1,39 @@ +using System.Runtime; +using System.Runtime.CompilerServices; + +namespace wan24.StreamSerializerExtensions +{ + // Serialization context + public static partial class StreamExtensions + { + /// + /// Create a serialization context for writing to the stream + /// + /// Stream (won't be disposed) + /// Cache size + /// Cancellation token + /// Context (don't forget to dispose!) + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ISerializationContext CreateSerializationContext(this Stream stream, int? cacheSize = null, CancellationToken cancellationToken = default) + => new SerializerContext(stream, cacheSize, cancellationToken); + + /// + /// Create a deserialization context for reading from the stream + /// + /// Stream (won't be disposed) + /// Serializer version + /// Cache size + /// Cancellation token + /// Context (don't forget to dispose!) + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static IDeserializationContext CreateDeserializationContext( + this Stream stream, + int? version = null, + int? cacheSize = null, + CancellationToken cancellationToken = default + ) + => new DeserializerContext(stream, version, cacheSize, cancellationToken); + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs index dbb282d..d69b4c7 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Any.cs @@ -12,10 +12,11 @@ public static partial class StreamExtensions /// /// Stream /// Object + /// Context /// Stream - [TargetedPatchingOptOut("Kust a method adapter")] + [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Stream WriteAny(this Stream stream, object obj) => WriteAny(stream, obj, objType: null, writeObject: true); + public static Stream WriteAny(this Stream stream, object obj, ISerializationContext context) => WriteAny(stream, obj, objType: null, writeObject: true, context); /// /// Write any object @@ -24,32 +25,33 @@ public static partial class StreamExtensions /// Object /// Object type (if not , no header will be written) /// Write the object? (may be overridden, if writing a header) + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteAny(this Stream stream, object obj, ObjectTypes? objType, bool writeObject) + public static Stream WriteAny(this Stream stream, object obj, ObjectTypes? objType, bool writeObject, ISerializationContext context) { if (objType == null) { (Type type, objType, bool writeType, writeObject) = obj.GetObjectSerializerInfo(); - Write(stream, (byte)objType); - if (writeType) WriteString(stream, type.ToString()); + Write(stream, (byte)objType, context); + if (writeType) Write(stream, type, context); } if (!writeObject) return stream; return objType.Value switch { - ObjectTypes.Byte => Write(stream, (sbyte)obj), - ObjectTypes.Byte | ObjectTypes.Unsigned => Write(stream, (byte)obj), - ObjectTypes.Short => Write(stream, (short)obj), - ObjectTypes.Short | ObjectTypes.Unsigned => Write(stream, (ushort)obj), - ObjectTypes.String16 => WriteString16(stream, (string)obj), - ObjectTypes.String32 => WriteString32(stream, (string)obj), - ObjectTypes.Serializable | ObjectTypes.CachedSerializable => Write(stream, obj.GetHashCode()), + ObjectTypes.Byte => Write(stream, (sbyte)obj, context), + ObjectTypes.Byte | ObjectTypes.Unsigned => Write(stream, (byte)obj, context), + ObjectTypes.Short => Write(stream, (short)obj, context), + ObjectTypes.Short | ObjectTypes.Unsigned => Write(stream, (ushort)obj, context), + ObjectTypes.String16 => WriteString16(stream, (string)obj, context), + ObjectTypes.String32 => WriteString32(stream, (string)obj, context), + ObjectTypes.Serializable | ObjectTypes.CachedSerializable => Write(stream, obj.GetHashCode(), context), _ => objType.Value.IsNumber() - ? WriteNumber(stream, obj) - : WriteObject(stream, obj) + ? WriteNumber(stream, obj, context) + : WriteObject(stream, obj, context) }; } @@ -58,16 +60,16 @@ public static Stream WriteAny(this Stream stream, object obj, ObjectTypes? objTy /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyAsync( this Stream stream, object obj, - CancellationToken cancellationToken = default + ISerializationContext context ) - => WriteAnyAsync(stream, obj, objType: null, writeObject: true, cancellationToken); + => WriteAnyAsync(stream, obj, objType: null, writeObject: true, context); /// /// Write any object @@ -76,7 +78,7 @@ public static Task WriteAnyAsync( /// Object /// Object type (if not , no header will be written) /// Write the object? (may be overridden, if writing a header) - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -87,28 +89,28 @@ public static async Task WriteAnyAsync( object obj, ObjectTypes? objType, bool writeObject, - CancellationToken cancellationToken = default + ISerializationContext context ) { if (objType == null) { (Type type, objType, bool writeType, writeObject) = obj.GetObjectSerializerInfo(); - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); - if (writeType) await WriteStringAsync(stream, type.ToString(), cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)objType, context).DynamicContext(); + if (writeType) await WriteAsync(stream, type, context).DynamicContext(); } if (!writeObject) return stream; return objType.Value switch { - ObjectTypes.Byte => await WriteAsync(stream, (sbyte)obj, cancellationToken).DynamicContext(), - ObjectTypes.Byte | ObjectTypes.Unsigned => await WriteAsync(stream, (byte)obj, cancellationToken).DynamicContext(), - ObjectTypes.Short => await WriteAsync(stream, (short)obj, cancellationToken).DynamicContext(), - ObjectTypes.Short | ObjectTypes.Unsigned => await WriteAsync(stream, (ushort)obj, cancellationToken).DynamicContext(), - ObjectTypes.String16 => await WriteString16Async(stream, (string)obj, cancellationToken).DynamicContext(), - ObjectTypes.String32 => await WriteString32Async(stream, (string)obj, cancellationToken).DynamicContext(), - ObjectTypes.Serializable | ObjectTypes.CachedSerializable => await WriteAsync(stream, obj.GetHashCode(), cancellationToken).DynamicContext(), + ObjectTypes.Byte => await WriteAsync(stream, (sbyte)obj, context).DynamicContext(), + ObjectTypes.Byte | ObjectTypes.Unsigned => await WriteAsync(stream, (byte)obj, context).DynamicContext(), + ObjectTypes.Short => await WriteAsync(stream, (short)obj, context).DynamicContext(), + ObjectTypes.Short | ObjectTypes.Unsigned => await WriteAsync(stream, (ushort)obj, context).DynamicContext(), + ObjectTypes.String16 => await WriteString16Async(stream, (string)obj, context).DynamicContext(), + ObjectTypes.String32 => await WriteString32Async(stream, (string)obj, context).DynamicContext(), + ObjectTypes.Serializable | ObjectTypes.CachedSerializable => await WriteAsync(stream, obj.GetHashCode(), context).DynamicContext(), _ => objType.Value.IsNumber() - ? await WriteNumberAsync(stream, obj, cancellationToken).DynamicContext() - : await WriteObjectAsync(stream, obj, cancellationToken).DynamicContext() + ? await WriteNumberAsync(stream, obj, context).DynamicContext() + : await WriteObjectAsync(stream, obj, context).DynamicContext() }; } @@ -117,16 +119,16 @@ public static async Task WriteAnyAsync( /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyAsync( this Task stream, object obj, - CancellationToken cancellationToken = default + ISerializationContext context ) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyAsync); + => AsyncHelper.FluentAsync(stream, obj, context, WriteAnyAsync); /// /// Write any object @@ -135,7 +137,7 @@ public static Task WriteAnyAsync( /// Object /// Object type (if not , no header will be written) /// Write the object? (may be overridden, if writing a header) - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -144,22 +146,23 @@ public static Task WriteAnyAsync( object obj, ObjectTypes? objType, bool writeObject, - CancellationToken cancellationToken = default + ISerializationContext context ) - => AsyncHelper.FluentAsync(stream, obj, objType, writeObject, cancellationToken, WriteAnyAsync); + => AsyncHelper.FluentAsync(stream, obj, objType, writeObject, context, WriteAnyAsync); /// /// Write any object /// /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteAnyNullable(this Stream stream, object? obj) - => obj == null ? Write(stream, (byte)ObjectTypes.Null) : WriteAny(stream, obj); + public static Stream WriteAnyNullable(this Stream stream, object? obj, ISerializationContext context) + => obj == null ? Write(stream, (byte)ObjectTypes.Null, context) : WriteAny(stream, obj, context); /// /// Write any object @@ -168,20 +171,21 @@ public static Stream WriteAnyNullable(this Stream stream, object? obj) /// Object /// Object type (if not , no header will be written) /// Write the object? (may be overridden, if writing a header) + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteAnyNullable(this Stream stream, object? obj, ObjectTypes? objType, bool writeObject) - => obj == null ? Write(stream, (byte)ObjectTypes.Null) : WriteAny(stream, obj, objType, writeObject); + public static Stream WriteAnyNullable(this Stream stream, object? obj, ObjectTypes? objType, bool writeObject, ISerializationContext context) + => obj == null ? Write(stream, (byte)ObjectTypes.Null, context) : WriteAny(stream, obj, objType, writeObject, context); /// /// Write any object /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -190,11 +194,11 @@ public static Stream WriteAnyNullable(this Stream stream, object? obj, ObjectTyp public static async Task WriteAnyNullableAsync( this Stream stream, object? obj, - CancellationToken cancellationToken = default + ISerializationContext context ) => obj == null - ? await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext() - : await WriteAnyAsync(stream, obj, cancellationToken).DynamicContext(); + ? await WriteAsync(stream, (byte)ObjectTypes.Null, context).DynamicContext() + : await WriteAnyAsync(stream, obj, context).DynamicContext(); /// /// Write any object @@ -203,7 +207,7 @@ public static async Task WriteAnyNullableAsync( /// Object /// Object type (if not , no header will be written) /// Write the object? (may be overridden, if writing a header) - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -214,27 +218,27 @@ public static async Task WriteAnyNullableAsync( object? obj, ObjectTypes? objType, bool writeObject, - CancellationToken cancellationToken = default + ISerializationContext context ) => obj == null - ? await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext() - : await WriteAnyAsync(stream, obj, objType, writeObject, cancellationToken).DynamicContext(); + ? await WriteAsync(stream, (byte)ObjectTypes.Null, context).DynamicContext() + : await WriteAnyAsync(stream, obj, objType, writeObject, context).DynamicContext(); /// /// Write any object /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteAnyNullableAsync( this Task stream, object? obj, - CancellationToken cancellationToken = default + ISerializationContext context ) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyNullableAsync); + => AsyncHelper.FluentAsync(stream, obj, context, WriteAnyNullableAsync); /// /// Write any object @@ -243,7 +247,7 @@ public static Task WriteAnyNullableAsync( /// Object /// Object type (if not , no header will be written) /// Write the object? (may be overridden, if writing a header) - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -252,8 +256,8 @@ public static Task WriteAnyNullableAsync( object? obj, ObjectTypes? objType, bool writeObject, - CancellationToken cancellationToken = default + ISerializationContext context ) - => AsyncHelper.FluentAsync(stream, obj, objType, writeObject, cancellationToken, WriteAnyNullableAsync); + => AsyncHelper.FluentAsync(stream, obj, objType, writeObject, context, WriteAnyNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs index f148f5e..2a639e1 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Array.cs @@ -12,17 +12,17 @@ public static partial class StreamExtensions /// /// Stream /// Value to write - /// Are values nullable? + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteArray(this Stream stream, Array value, bool valuesNullable = false) + public static Stream WriteArray(this Stream stream, Array value, ISerializationContext context) => SerializerException.Wrap(() => { - WriteNumber(stream, value.Length); - return value.Length == 0 ? stream : WriteFixedArray(stream, value, valuesNullable); + WriteNumber(stream, value.Length, context); + return value.Length == 0 ? stream : WriteFixedArray(stream, value, context); }); /// @@ -30,18 +30,17 @@ public static Stream WriteArray(this Stream stream, Array value, bool valuesNull /// /// Stream /// Value to write - /// Are values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteArrayAsync(this Stream stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) + public static Task WriteArrayAsync(this Stream stream, Array value, ISerializationContext context) => SerializerException.WrapAsync(async () => { - await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); - return value.Length == 0 ? stream : await WriteFixedArrayAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, value.Length, context).DynamicContext(); + return value.Length == 0 ? stream : await WriteFixedArrayAsync(stream, value, context).DynamicContext(); }); /// @@ -49,54 +48,51 @@ public static Task WriteArrayAsync(this Stream stream, Array value, bool /// /// Stream /// Value to write - /// Are values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteArrayAsync(this Task stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteArrayAsync); + public static Task WriteArrayAsync(this Task stream, Array value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteArrayAsync); /// /// Write /// /// Stream /// Value to write - /// Are values nullable? + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteArrayNullable(this Stream stream, Array? value, bool valuesNullable = false) - => WriteNullableCount(stream, value?.Length, () => WriteFixedArray(stream, value!, valuesNullable)); + public static Stream WriteArrayNullable(this Stream stream, Array? value, ISerializationContext context) + => WriteNullableCount(context, value?.Length, () => WriteFixedArray(stream, value!, context)); /// /// Write /// /// Stream /// Value to write - /// Are values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteArrayNullableAsync(this Stream stream, Array? value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => WriteNullableCountAsync(stream, value?.Length, () => WriteFixedArrayAsync(stream, value!, valuesNullable, cancellationToken), cancellationToken); + public static Task WriteArrayNullableAsync(this Stream stream, Array? value, ISerializationContext context) + => WriteNullableCountAsync(context, value?.Length, () => WriteFixedArrayAsync(stream, value!, context)); /// /// Write /// /// Stream /// Value to write - /// Are values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteArrayNullableAsync(this Task stream, Array? value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteArrayNullableAsync); + public static Task WriteArrayNullableAsync(this Task stream, Array? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteArrayNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs index 6acfb06..7ce4ef2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Basic.cs @@ -13,16 +13,18 @@ public static partial class StreamExtensions /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, bool value) +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, bool value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument { - byte[] buffer = StreamSerializer.BufferPool.Rent(minimumLength: 1); - buffer[0] = (byte)(value ? 1 : 0); - return WriteSerializedData(stream, buffer, len: 1); + stream.WriteByte((byte)(value ? 1 : 0)); + return stream; } /// @@ -30,17 +32,16 @@ public static Stream Write(this Stream stream, bool value) /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = default) + public static Task WriteAsync(this Stream stream, bool value, ISerializationContext context) { - byte[] buffer = StreamSerializer.BufferPool.Rent(minimumLength: 1); - buffer[0] = (byte)(value ? 1 : 0); - return await WriteSerializedDataAsync(stream, buffer, len: 1, cancellationToken: cancellationToken).DynamicContext(); + stream.WriteByte((byte)(value ? 1 : 0)); + return Task.FromResult(stream); } /// @@ -48,24 +49,27 @@ public static async Task WriteAsync(this Stream stream, bool value, Canc /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, bool value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, bool value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteNullable(this Stream stream, bool? value) +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteNullable(this Stream stream, bool? value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument { ObjectTypes type; if (value == null) @@ -80,7 +84,8 @@ public static Stream WriteNullable(this Stream stream, bool? value) { type = ObjectTypes.False; } - return Write(stream, (byte)type); + stream.WriteByte((byte)type); + return stream; } /// @@ -88,13 +93,13 @@ public static Stream WriteNullable(this Stream stream, bool? value) /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, bool? value, ISerializationContext context) { ObjectTypes type; if (value == null) @@ -109,7 +114,8 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, C { type = ObjectTypes.False; } - return WriteAsync(stream, (byte)type, cancellationToken); + stream.WriteByte((byte)type); + return Task.FromResult(stream); } /// @@ -117,89 +123,94 @@ public static Task WriteNullableAsync(this Stream stream, bool? value, C /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, bool? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, bool? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Stream Write(this Stream stream, sbyte value) => Write(stream, (byte)value); + public static Stream Write(this Stream stream, sbyte value, ISerializationContext context) => Write(stream, (byte)value, context); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Stream stream, sbyte value, CancellationToken cancellationToken = default) - => WriteAsync(stream, (byte)value, cancellationToken); + public static Task WriteAsync(this Stream stream, sbyte value, ISerializationContext context) + => WriteAsync(stream, (byte)value, context); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, sbyte value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, sbyte value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, sbyte? value) - => WriteNullableNumeric(stream, value, sbyte.MinValue, sbyte.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, sbyte? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(sbyte), value, sbyte.MinValue, sbyte.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, sbyte? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, sbyte.MinValue, sbyte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, sbyte? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(sbyte), value, sbyte.MinValue, sbyte.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, sbyte? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, sbyte? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, byte value) +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, byte value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument => SerializerException.Wrap(() => { stream.WriteByte(value); @@ -211,696 +222,754 @@ public static Stream Write(this Stream stream, byte value) /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = default) - { - await Task.Yield(); - return Write(stream, value); - } + public static Task WriteAsync(this Stream stream, byte value, ISerializationContext context) + => SerializerException.Wrap(() => + { + stream.WriteByte(value); + return Task.FromResult(stream); + }); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, byte value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, byte value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, byte? value) - => WriteNullableNumeric(stream, value, byte.MinValue, byte.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, byte? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(byte), value, byte.MinValue, byte.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, byte? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, byte.MinValue, byte.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, byte? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(byte), value, byte.MinValue, byte.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, byte? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, byte? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, short value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short)); +#pragma warning disable // Remove unused argument + public static Stream Write(this Stream stream, short value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(short)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, short value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, short value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(short))), sizeof(short)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, short value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, short value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, short? value) - => WriteNullableNumeric(stream, value, short.MinValue, short.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, short? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(short), value, short.MinValue, short.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, short? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, short.MinValue, short.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, short? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(short), value, short.MinValue, short.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, short? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, short? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, ushort value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, ushort value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(ushort)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, ushort value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, ushort value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ushort))), sizeof(ushort)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, ushort value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, ushort value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, ushort? value) - => WriteNullableNumeric(stream, value, ushort.MinValue, ushort.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, ushort? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(ushort), value, ushort.MinValue, ushort.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, ushort? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, ushort.MinValue, ushort.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, ushort? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(ushort), value, ushort.MinValue, ushort.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, ushort? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, ushort? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, int value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, int value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(int)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, int value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, int value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(int))), sizeof(int)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, int value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, int value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, int? value) - => WriteNullableNumeric(stream, value, int.MinValue, int.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, int? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(int), value, int.MinValue, int.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, int? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, int.MinValue, int.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, int? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(int), value, int.MinValue, int.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, int? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, int? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, uint value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, uint value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(uint)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, uint value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, uint value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(uint))), sizeof(uint)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, uint value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, uint value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, uint? value) - => WriteNullableNumeric(stream, value, uint.MinValue, uint.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, uint? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(uint), value, uint.MinValue, uint.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, uint? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, uint.MinValue, uint.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, uint? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(uint), value, uint.MinValue, uint.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, uint? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, uint? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, long value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, long value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(long)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, long value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, long value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(long))), sizeof(long)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, long value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, long value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, long? value) - => WriteNullableNumeric(stream, value, long.MinValue, long.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, long? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(long), value, long.MinValue, long.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, long? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, long.MinValue, long.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, long? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(long), value, long.MinValue, long.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, long? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, long? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, ulong value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, ulong value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(ulong)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, ulong value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, ulong value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(ulong))), sizeof(ulong)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, ulong value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, ulong value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, ulong? value) - => WriteNullableNumeric(stream, value, ulong.MinValue, ulong.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, ulong? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(ulong), value, ulong.MinValue, ulong.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, ulong? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, ulong.MinValue, ulong.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, ulong? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(ulong), value, ulong.MinValue, ulong.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, ulong? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, ulong? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, float value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, float value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(float)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, float value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, float value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(float))), sizeof(float)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, float value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, float value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, float? value) - => WriteNullableNumeric(stream, value, float.MinValue, float.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, float? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(float), value, float.MinValue, float.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, float? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, float.MinValue, float.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, float? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(float), value, float.MinValue, float.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, float? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, float? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, double value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, double value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(double)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, double value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, double value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(double))), sizeof(double)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, double value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, double value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, double? value) - => WriteNullableNumeric(stream, value, double.MinValue, double.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, double? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(double), value, double.MinValue, double.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, double? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, double.MinValue, double.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, double? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(double), value, double.MinValue, double.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, double? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, double? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream Write(this Stream stream, decimal value) - => WriteSerializedData(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream Write(this Stream stream, decimal value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumeric(context, (buffer) => value.GetBytes(buffer), sizeof(decimal)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAsync(this Stream stream, decimal value, CancellationToken cancellationToken = default) - => WriteSerializedDataAsync(stream, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal), cancellationToken: cancellationToken); + public static Task WriteAsync(this Stream stream, decimal value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, decimal value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, decimal value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNullable(this Stream stream, decimal? value) - => WriteNullableNumeric(stream, value, decimal.MinValue, decimal.MaxValue, () => Write(stream, value!.Value)); + public static Stream WriteNullable(this Stream stream, decimal? value, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(decimal), value, decimal.MinValue, decimal.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNullableAsync(this Stream stream, decimal? value, CancellationToken cancellationToken = default) - => WriteNullableNumericAsync(stream, value, decimal.MinValue, decimal.MaxValue, () => WriteAsync(stream, value!.Value, cancellationToken), cancellationToken); + public static Task WriteNullableAsync(this Stream stream, decimal? value, ISerializationContext context) + => WriteNullableNumericAsync(context, sizeof(decimal), value, decimal.MinValue, decimal.MaxValue, () => WriteAsync(stream, value!.Value, context)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, decimal? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, decimal? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); + + /// + /// Write a numeric value + /// + /// Context + /// Action to write the values bytes into a buffer + /// Type size in bytes + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [SkipLocalsInit] + private static Stream WriteNumeric(ISerializationContext context, NumericWriter_Delegate action, int size) + { + Span buffer = stackalloc byte[size]; + action(buffer); + context.Stream.Write(buffer); + return context.Stream; + } /// /// Write a nullable numeric value /// /// Numeric type - /// Stream + /// Context + /// Type size in bytes /// Value /// Minimum /// Maximum @@ -909,45 +978,65 @@ public static Task WriteNullableAsync(this Task stream, decimal? #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Stream WriteNullableNumeric(Stream stream, T? value, T min, T max, Action action) where T:struct, IConvertible + private static Stream WriteNullableNumeric(ISerializationContext context, int size, T? value, T min, T max, NullableNumericWriter_Delegate action) + where T : struct, IConvertible { NumberTypes type; - if (value == null) type = NumberTypes.Null; + if (value == null) type = NumberTypes.IsNull; else if (value.Equals(default(T))) type = NumberTypes.Zero; else if (value.Equals(min)) type = NumberTypes.MinValue; else if (value.Equals(max)) type = NumberTypes.MaxValue; else type = NumberTypes.Default; - Write(stream, (byte)type); + if (size > 2 && context.TryWriteCached(value, type)) return context.Stream; + if (size < 3) Write(context.Stream, (byte)type, context); if (type == NumberTypes.Default) action(); - return stream; + return context.Stream; } /// /// Write a nullable numeric value /// /// Numeric type - /// Stream + /// Context + /// Type size in bytes /// Value /// Minimum /// Maximum /// Action to execute if the value can't be handled using a default handler - /// Cancellation token /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task WriteNullableNumericAsync(Stream stream, T? value, T min, T max, Func action, CancellationToken cancellationToken) + private static async Task WriteNullableNumericAsync(ISerializationContext context, int size, T? value, T min, T max, AsyncNullableNumericWriter_Delegate action) where T : struct, IConvertible { NumberTypes type; - if (value == null) type = NumberTypes.Null; + if (value == null) type = NumberTypes.IsNull; else if (value.Equals(default(T))) type = NumberTypes.Zero; else if (value.Equals(min)) type = NumberTypes.MinValue; else if (value.Equals(max)) type = NumberTypes.MaxValue; else type = NumberTypes.Default; - await WriteAsync(stream, (byte)type, cancellationToken).DynamicContext(); + if (size > 2 && await context.TryWriteCachedAsync(value, type).DynamicContext()) return context.Stream; + if (size < 3) await WriteAsync(context.Stream, (byte)type, context).DynamicContext(); if (type == NumberTypes.Default) await action().DynamicContext(); - return stream; + return context.Stream; } + + /// + /// Delegate for a numeric writer + /// + /// Buffer + private delegate void NumericWriter_Delegate(Span buffer); + + /// + /// Delegate for a nullable numeric writer + /// + private delegate void NullableNumericWriter_Delegate(); + + /// + /// Delegate for a nullable numeric writer + /// + /// + private delegate Task AsyncNullableNumericWriter_Delegate(); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs index 9c1bf56..e281b14 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Bytes.cs @@ -12,26 +12,28 @@ public static partial class StreamExtensions /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Stream WriteBytes(this Stream stream, Span value) => WriteBytes(stream, (ReadOnlySpan)value); + public static Stream WriteBytes(this Stream stream, Span value, ISerializationContext context) => WriteBytes(stream, (ReadOnlySpan)value, context); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) + public static Stream WriteBytes(this Stream stream, ReadOnlySpan value, ISerializationContext context) { try { - WriteNumber(stream, value.Length); + WriteNumber(stream, value.Length, context); if (value.Length > 0) stream.Write(value); return stream; } @@ -50,41 +52,41 @@ public static Stream WriteBytes(this Stream stream, ReadOnlySpan value) /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteBytesAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) - => WriteBytesAsync(stream, (ReadOnlyMemory)value, cancellationToken); + public static Task WriteBytesAsync(this Stream stream, Memory value, ISerializationContext context) + => WriteBytesAsync(stream, (ReadOnlyMemory)value, context); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteBytesAsync(this Task stream, Memory value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteBytesAsync); + public static Task WriteBytesAsync(this Task stream, Memory value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteBytesAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) + public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, ISerializationContext context) => SerializerException.WrapAsync(async () => { - await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); - if (value.Length > 0) await stream.WriteAsync(value, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, value.Length, context).DynamicContext(); + if (value.Length > 0) await stream.WriteAsync(value, context.Cancellation).DynamicContext(); return stream; }); @@ -93,43 +95,43 @@ public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteBytesAsync(this Task stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteBytesAsync); + public static Task WriteBytesAsync(this Task stream, ReadOnlyMemory value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteBytesAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteBytesNullable(this Stream stream, byte[]? value) - => WriteNullableCount(stream, value?.Length, () => SerializerException.Wrap(() => stream.Write(value))); + public static Stream WriteBytesNullable(this Stream stream, byte[]? value, ISerializationContext context) + => WriteNullableCount(context, value?.Length, () => SerializerException.Wrap(() => stream.Write(value))); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteBytesNullableAsync(this Stream stream, byte[]? value, CancellationToken cancellationToken = default) + public static Task WriteBytesNullableAsync(this Stream stream, byte[]? value, ISerializationContext context) => WriteNullableCountAsync( - stream, + context, value?.Length, - () => SerializerException.WrapAsync(() => stream.WriteAsync(value, cancellationToken).AsTask()), - cancellationToken + () => SerializerException.WrapAsync(() => stream.WriteAsync(value, context.Cancellation).AsTask()) ); /// @@ -137,11 +139,11 @@ public static Task WriteBytesNullableAsync(this Stream stream, byte[]? v /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteBytesNullableAsync(this Task stream, byte[]? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteBytesNullableAsync); + public static Task WriteBytesNullableAsync(this Task stream, byte[]? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteBytesNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs index 9ddd4ac..1b62c7b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -15,17 +15,17 @@ public static partial class StreamExtensions /// /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteDict(this Stream stream, IDictionary value, bool valuesNullable = false) + public static Stream WriteDict(this Stream stream, IDictionary value, ISerializationContext context) { - WriteNumber(stream, value.Count); + WriteNumber(stream, value.Count, context); if (value.Count == 0) return stream; - WriteDictInt(stream, value, valuesNullable); + WriteDictInt(stream, value, context); return stream; } @@ -34,18 +34,17 @@ public static Stream WriteDict(this Stream stream, IDictionary value, bool value /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteDictAsync(this Stream stream, IDictionary value, bool valuesNullable = false, CancellationToken cancellationToken = default) + public static async Task WriteDictAsync(this Stream stream, IDictionary value, ISerializationContext context) { - await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, value.Count, context).DynamicContext(); if (value.Count == 0) return stream; - await WriteDictIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); + await WriteDictIntAsync(stream, value, context).DynamicContext(); return stream; } @@ -54,30 +53,29 @@ public static async Task WriteDictAsync(this Stream stream, IDictionary /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteDictAsync(this Task stream, IDictionary value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteDictAsync); + public static Task WriteDictAsync(this Task stream, IDictionary value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteDictAsync); /// /// Write /// /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteDictNullable(this Stream stream, IDictionary? value, bool valuesNullable = false) - => WriteNullableCount(stream, value?.Count, () => + public static Stream WriteDictNullable(this Stream stream, IDictionary? value, ISerializationContext context) + => WriteNullableCount(context, value?.Count, () => { if (value!.Count == 0) return; - WriteDictInt(stream, value, valuesNullable); + WriteDictInt(stream, value, context); }); /// @@ -85,177 +83,95 @@ public static Stream WriteDictNullable(this Stream stream, IDictionary? value, b /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => WriteNullableCountAsync(stream, value?.Count, async () => + public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, ISerializationContext context) + => WriteNullableCountAsync(context, value?.Count, async () => { if (value!.Count == 0) return; - await WriteDictIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); - }, cancellationToken); + await WriteDictIntAsync(stream, value, context).DynamicContext(); + }); /// /// Write /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteDictNullableAsync); + public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteDictNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void WriteDictInt(Stream stream, IDictionary value, bool valuesNullable) + private static void WriteDictInt(Stream stream, IDictionary value, ISerializationContext context) { + using ContextRecursion cr = new(context); Type valueType = value.GetType(), keyType = valueType.GenericTypeArguments[0], - itemType = valueType.GenericTypeArguments[1], - keyItemType, - valueItemType; - (SerializerTypes keySerializer, StreamSerializer.Serialize_Delegate? keySyncSerializer, _) = keyType.GetItemSerializerInfo(isAsync: false); - (SerializerTypes itemSerializer, StreamSerializer.Serialize_Delegate? itemSyncSerializer, _) = itemType.GetItemSerializerInfo(isAsync: false); - ObjectTypes keyObjType = default, - valueObjType = default; - Type? lastKeyItemType = null, - lastValueItemType = null; + itemType = valueType.GenericTypeArguments[1]; + using ItemSerializerContext keyContext = new(context, objectCache: false); + using ItemSerializerContext valueContext = new(context); + (keyContext.ItemSerializer, keyContext.ItemSyncSerializer, _) = keyType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); + (valueContext.ItemSerializer, valueContext.ItemSyncSerializer, _) = itemType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); object key; object? item; - SerializerTypes keyItemSerializer = default, - valueItemSerializer = default; - StreamSerializer.Serialize_Delegate? keyItemSyncSerializer = null, - valueItemSyncSerializer = null; - bool writeKey = false, - writeValue = false, - isComplete; object[] keys = value.Keys.Cast().ToArray(); - int[] cache; - if (keySerializer == SerializerTypes.Any && itemSerializer == SerializerTypes.Any) - { - cache = ArrayPool.Shared.RentClean(byte.MaxValue * 3); - } - else if (keySerializer == SerializerTypes.Any) - { - cache = ArrayPool.Shared.RentClean(byte.MaxValue); - } - else if (itemSerializer == SerializerTypes.Any) - { - cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - } - else - { - cache = Array.Empty(); - } - try + for (int i = 0, len = value.Count; i < len; i++) { - Span keyTypeCache, - keyObjectCache, - typeCache, - objectCache; - if (keySerializer == SerializerTypes.Any) - { - keyTypeCache = cache.AsSpan(0, byte.MaxValue); - keyObjectCache = cache.AsSpan(0, 0); - } - else + if (keyContext.ItemSerializer == SerializerTypes.Any) { - keyTypeCache = keyObjectCache = cache.AsSpan(0, 0); - } - if (itemSerializer == SerializerTypes.Any) - { - typeCache = cache.AsSpan(keySerializer == SerializerTypes.Any ? byte.MaxValue : 0, byte.MaxValue); - objectCache = cache.AsSpan(keySerializer == SerializerTypes.Any ? byte.MaxValue << 1 : byte.MaxValue, byte.MaxValue); + key = keys[i]; + if (WriteAnyItemHeader(keyContext, key, key.GetType())) continue; + if (keyContext.WriteObject) + if (keyContext.ItemSerializer == SerializerTypes.Serializer) + { + WriteItem(keyContext, key); + } + else + { + WriteAny(context.Stream, key, keyContext.ObjectType, keyContext.WriteObject, context); + } } else { - typeCache = objectCache = cache.AsSpan(0, 0); + WriteItem(keyContext, keys[i]); } - for (int i = 0, len = value.Count; i < len; i++) + if (valueContext.ItemSerializer == SerializerTypes.Any) { - if (keySerializer == SerializerTypes.Any) - { - key = keys[i]; - keyItemType = key.GetType(); - isComplete = WriteAnyItemHeader( - stream, - key, - keyItemType, - keyTypeCache, - keyObjectCache, - ref lastKeyItemType, - ref keyItemSerializer, - ref keyItemSyncSerializer, - ref keyObjType, - ref writeKey - ); - if (!isComplete && writeKey) - if (keyItemSerializer == SerializerTypes.Serializer) - { - WriteItem(stream, key, nullable: false, keyItemSerializer, keyItemSyncSerializer); - } - else - { - WriteAny(stream, key, keyObjType, writeKey); - } - } - else + item = value[keys[i]]; + if (item == null) { - WriteItem(stream, keys[i], nullable: false, keySerializer, keySyncSerializer); + Write(stream, (byte)ObjectTypes.Null, context); + continue; } - if (keySerializer == SerializerTypes.Any) - { - item = value[keys[i]]; - if (item == null) + if (WriteAnyItemHeader(valueContext, item, item.GetType())) continue; + if (valueContext.WriteObject) + if (valueContext.ItemSerializer == SerializerTypes.Serializer) { - Write(stream, (byte)ObjectTypes.Null); - continue; + WriteItem(valueContext, item); + } + else + { + WriteAny(context.Stream, item, valueContext.ObjectType, valueContext.WriteObject, context); } - valueItemType = value.GetType(); - isComplete = WriteAnyItemHeader( - stream, - item, - valueItemType, - typeCache, - objectCache, - ref lastValueItemType, - ref valueItemSerializer, - ref valueItemSyncSerializer, - ref valueObjType, - ref writeValue - ); - if (!isComplete && writeValue) - if (valueItemSerializer == SerializerTypes.Serializer) - { - WriteItem(stream, item, nullable: false, valueItemSerializer, valueItemSyncSerializer); - } - else - { - WriteAny(stream, item, valueObjType, writeValue); - } - } - else - { - WriteItem(stream, value[keys[i]]!, valuesNullable, itemSerializer, itemSyncSerializer); - } } - } - finally - { - ArrayPool.Shared.Return(cache); + else + { + WriteItem(valueContext, value[keys[i]]!); + } } } @@ -264,158 +180,67 @@ ref writeValue /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static async Task WriteDictIntAsync(Stream stream, IDictionary value, bool valuesNullable, CancellationToken cancellationToken) + private static async Task WriteDictIntAsync(Stream stream, IDictionary value, ISerializationContext context) { + using ContextRecursion cr = new(context); Type valueType = value.GetType(), keyType = valueType.GenericTypeArguments[0], - itemType = valueType.GenericTypeArguments[1], - keyItemType, - valueItemType; - (SerializerTypes keySerializer, StreamSerializer.Serialize_Delegate? keySyncSerializer, StreamSerializer.AsyncSerialize_Delegate? keyAsyncSerializer) = - keyType.GetItemSerializerInfo(isAsync: true); - (SerializerTypes itemSerializer, StreamSerializer.Serialize_Delegate? itemSyncSerializer, StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer) = - itemType.GetItemSerializerInfo(isAsync: true); - ObjectTypes keyObjType = default, - valueObjType = default; - Type? lastKeyItemType = null, - lastValueItemType = null; + itemType = valueType.GenericTypeArguments[1]; + using ItemSerializerContext keyContext = new(context, objectCache: false); + using ItemSerializerContext valueContext = new(context); + (keyContext.ItemSerializer, keyContext.ItemSyncSerializer, keyContext.ItemAsyncSerializer) = + keyType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); + (valueContext.ItemSerializer, valueContext.ItemSyncSerializer, valueContext.ItemAsyncSerializer) = + itemType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); object key; object? item; - SerializerTypes keyItemSerializer = default, - valueItemSerializer = default; - StreamSerializer.Serialize_Delegate? keyItemSyncSerializer = null, - valueItemSyncSerializer = null; - StreamSerializer.AsyncSerialize_Delegate? keyItemAsyncSerializer = null, - valueItemAsyncSerializer = null; - bool writeKey = false, - writeValue = false, - isComplete; object[] keys = value.Keys.Cast().ToArray(); - int[] cache; - if (keySerializer == SerializerTypes.Any && itemSerializer == SerializerTypes.Any) + for (int i = 0, len = value.Count; i < len; i++) { - cache = ArrayPool.Shared.RentClean(byte.MaxValue * 3); - } - else if (keySerializer == SerializerTypes.Any) - { - cache = ArrayPool.Shared.RentClean(byte.MaxValue); - } - else if (itemSerializer == SerializerTypes.Any) - { - cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - } - else - { - cache = Array.Empty(); - } - try - { - Memory keyTypeCache, - keyObjectCache, - typeCache, - objectCache; - if (keySerializer == SerializerTypes.Any) + if (keyContext.ItemSerializer == SerializerTypes.Any) { - keyTypeCache = cache.AsMemory(0, byte.MaxValue); - keyObjectCache = cache.AsMemory(0, 0); - } - else - { - keyTypeCache = keyObjectCache = cache.AsMemory(0, 0); - } - if (itemSerializer == SerializerTypes.Any) - { - typeCache = cache.AsMemory(keySerializer == SerializerTypes.Any ? byte.MaxValue : 0, byte.MaxValue); - objectCache = cache.AsMemory(keySerializer == SerializerTypes.Any ? byte.MaxValue << 1 : byte.MaxValue, byte.MaxValue); + key = keys[i]; + if (await WriteAnyItemHeaderAsync(keyContext, key, key.GetType()).DynamicContext()) continue; + if (keyContext.WriteObject) + if (keyContext.ItemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(keyContext, key).DynamicContext(); + } + else + { + await WriteAnyAsync(context.Stream, key, keyContext.ObjectType, keyContext.WriteObject, context).DynamicContext(); + } } else { - typeCache = objectCache = cache.AsMemory(0, 0); + await WriteItemAsync(keyContext, keys[i]).DynamicContext(); } - for (int i = 0, len = value.Count; i < len; i++) + if (valueContext.ItemSerializer == SerializerTypes.Any) { - if (keySerializer == SerializerTypes.Any) - { - key = keys[i]; - keyItemType = key.GetType(); - (isComplete, lastKeyItemType, keyItemSerializer, keyItemSyncSerializer, keyItemAsyncSerializer, keyObjType, writeKey) = - await WriteAnyItemHeaderAsync( - stream, - key, - keyItemType, - keyTypeCache, - keyObjectCache, - lastKeyItemType, - keyItemSerializer, - keyItemSyncSerializer, - keyItemAsyncSerializer, - keyObjType, - writeKey, - cancellationToken - ).DynamicContext(); - if (!isComplete && writeKey) - if (keyItemSerializer == SerializerTypes.Serializer) - { - await WriteItemAsync(stream, key, nullable: false, keyItemSerializer, keyItemSyncSerializer, keyItemAsyncSerializer, cancellationToken) - .DynamicContext(); - } - else - { - await WriteAnyAsync(stream, key, keyObjType, writeKey, cancellationToken).DynamicContext(); - } - } - else + item = value[keys[i]]; + if (item == null) { - await WriteItemAsync(stream, keys[i], nullable: false, keySerializer, keySyncSerializer, keyAsyncSerializer, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)ObjectTypes.Null, context).DynamicContext(); + continue; } - if (keySerializer == SerializerTypes.Any) - { - item = value[keys[i]]; - if (item == null) + if (await WriteAnyItemHeaderAsync(valueContext, item, item.GetType()).DynamicContext()) continue; + if (valueContext.WriteObject) + if (valueContext.ItemSerializer == SerializerTypes.Serializer) { - await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); - continue; + await WriteItemAsync(valueContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(context.Stream, item, valueContext.ObjectType, valueContext.WriteObject, context).DynamicContext(); } - valueItemType = value.GetType(); - (isComplete, lastKeyItemType, keyItemSerializer, keyItemSyncSerializer, keyItemAsyncSerializer, keyObjType, writeKey) = - await WriteAnyItemHeaderAsync( - stream, - item, - valueItemType, - typeCache, - objectCache, - lastValueItemType, - valueItemSerializer, - valueItemSyncSerializer, - valueItemAsyncSerializer, - valueObjType, - writeValue, - cancellationToken - ).DynamicContext(); - if (!isComplete && writeValue) - if (valueItemSerializer == SerializerTypes.Serializer) - { - await WriteItemAsync(stream, item, nullable: false, valueItemSerializer, valueItemSyncSerializer, valueItemAsyncSerializer, cancellationToken) - .DynamicContext(); - } - else - { - await WriteAnyAsync(stream, item, valueObjType, writeValue, cancellationToken).DynamicContext(); - } - } - else - { - await WriteItemAsync(stream, value[keys[i]]!, valuesNullable, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); - } } - } - finally - { - ArrayPool.Shared.Return(cache); + else + { + await WriteItemAsync(valueContext, value[keys[i]]!).DynamicContext(); + } } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs index 6f6924a..4812c84 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Enum.cs @@ -13,15 +13,16 @@ public static partial class StreamExtensions /// Enumeration type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteEnum(this Stream stream, T value) where T : struct, Enum + public static Stream WriteEnum(this Stream stream, T value, ISerializationContext context) where T : struct, Enum { - if (ObjectHelper.AreEqual(value, default(T))) return Write(stream, (byte)NumberTypes.Default); - return WriteNumber(stream, Convert.ChangeType(value, typeof(T).GetEnumUnderlyingType())); + if (ObjectHelper.AreEqual(value, default(T))) return Write(stream, (byte)NumberTypes.Default, context); + return WriteNumber(stream, Convert.ChangeType(value, typeof(T).GetEnumUnderlyingType()), context); } /// @@ -29,17 +30,18 @@ public static Stream WriteEnum(this Stream stream, T value) where T : struct, /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteEnum(this Stream stream, object value) + public static Stream WriteEnum(this Stream stream, object value, ISerializationContext context) { Type enumType = value.GetType(); SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, () => "Not an enumeration value")); - if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) return Write(stream, (byte)NumberTypes.Default); - return WriteNumber(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType())); + if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) return Write(stream, (byte)NumberTypes.Default, context); + return WriteNumber(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), context); } /// @@ -48,21 +50,21 @@ public static Stream WriteEnum(this Stream stream, object value) /// Enumeration type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum + public static async Task WriteEnumAsync(this Stream stream, T value, ISerializationContext context) where T : struct, Enum { if (ObjectHelper.AreEqual(value, default(T))) { - await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)NumberTypes.Default, context).DynamicContext(); } else { - await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), context).DynamicContext(); } return stream; } @@ -73,35 +75,35 @@ public static async Task WriteEnumAsync(this Stream stream, T value, /// Enumeration type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteEnumAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, Enum - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumAsync); + public static Task WriteEnumAsync(this Task stream, T value, ISerializationContext context) where T : struct, Enum + => AsyncHelper.FluentAsync(stream, value, context, WriteEnumAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteEnumAsync(this Stream stream, object value, CancellationToken cancellationToken = default) + public static async Task WriteEnumAsync(this Stream stream, object value, ISerializationContext context) { Type enumType = value.GetType(); SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(value), enumType.IsEnum, () => "Not an enumeration value")); if (ObjectHelper.AreEqual(value, Activator.CreateInstance(enumType))) { - await WriteAsync(stream, (byte)NumberTypes.Default, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)NumberTypes.Default, context).DynamicContext(); } else { - await WriteNumberAsync(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), context).DynamicContext(); } return stream; } @@ -111,12 +113,12 @@ public static async Task WriteEnumAsync(this Stream stream, object value /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteEnumAsync(this Task stream, object value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumAsync); + public static Task WriteEnumAsync(this Task stream, object value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteEnumAsync); /// /// Write @@ -124,26 +126,28 @@ public static Task WriteEnumAsync(this Task stream, object value /// Enumeration type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteEnumNullable(this Stream stream, T? value) where T : struct, Enum - => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteEnum(stream, value.Value); + public static Stream WriteEnumNullable(this Stream stream, T? value, ISerializationContext context) where T : struct, Enum + => value == null ? Write(stream, (byte)NumberTypes.IsNull, context) : WriteEnum(stream, value.Value, context); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteEnumNullable(this Stream stream, object? value) - => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteEnum(stream, value); + public static Stream WriteEnumNullable(this Stream stream, object? value, ISerializationContext context) + => value == null ? Write(stream, (byte)NumberTypes.IsNull, context) : WriteEnum(stream, value, context); /// /// Write @@ -151,16 +155,16 @@ public static Stream WriteEnumNullable(this Stream stream, object? value) /// Enumeration type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteEnumNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum + public static Task WriteEnumNullableAsync(this Stream stream, T? value, ISerializationContext context) where T : struct, Enum => value == null - ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) - : WriteEnumAsync(stream, value.Value, cancellationToken); + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteEnumAsync(stream, value.Value, context); /// /// Write @@ -168,39 +172,39 @@ public static Task WriteEnumNullableAsync(this Stream stream, T? valu /// Enumeration type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteEnumNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) where T : struct, Enum - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumNullableAsync); + public static Task WriteEnumNullableAsync(this Task stream, T? value, ISerializationContext context) where T : struct, Enum + => AsyncHelper.FluentAsync(stream, value, context, WriteEnumNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteEnumNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) + public static Task WriteEnumNullableAsync(this Stream stream, object? value, ISerializationContext context) => value == null - ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) - : WriteEnumAsync(stream, value, cancellationToken); + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteEnumAsync(stream, value, context); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteEnumNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteEnumNullableAsync); + public static Task WriteEnumNullableAsync(this Task stream, object? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteEnumNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs index 6a47118..7d7668e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -14,12 +13,12 @@ public static partial class StreamExtensions /// Element type /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Stream WriteFixedArray(this Stream stream, Span value, bool valuesNullable = false) - => WriteFixedArray(stream, (ReadOnlySpan)value, valuesNullable); + public static Stream WriteFixedArray(this Stream stream, Span value, ISerializationContext context) + => WriteFixedArray(stream, (ReadOnlySpan)value, context); /// /// Write @@ -27,71 +26,48 @@ public static Stream WriteFixedArray(this Stream stream, Span value, bool /// Element type /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteFixedArray(this Stream stream, ReadOnlySpan value, bool valuesNullable = false) + public static Stream WriteFixedArray(this Stream stream, ReadOnlySpan value, ISerializationContext context) { try { + using ContextRecursion cr = new(context); Type elementType = typeof(T); - (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, _) = elementType.GetItemSerializerInfo(isAsync: false); - if (serializer == SerializerTypes.Any) + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, _) = elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - ObjectTypes objType = default; - Type? lastItemType = null; - Type itemType; T? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - bool writeObject = false; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) { - Span typeCache = cache.AsSpan(0, byte.MaxValue), - objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); - for (int i = 0, len = value.Length; i < len; i++) + item = value[i]; + if (item == null) { - item = value[i]; - if (item == null) + if (!context.Nullable) throw new SerializerException($"Found NULL item at #{i}", new InvalidDataException()); + Write(context.Stream, (byte)ObjectTypes.Null, context); + continue; + } + itemType = item.GetType(); + WriteAnyItemHeader(itemContext, item, itemType); + if (itemContext.WriteObject && itemContext.ObjectType != ObjectTypes.Cached) + if (itemContext.ItemSerializer == SerializerTypes.Serializer) { - Write(stream, (byte)ObjectTypes.Null); - continue; + WriteItem(itemContext, item); + } + else + { + WriteAny(stream, item, itemContext.ObjectType, itemContext.WriteObject, context); } - itemType = item!.GetType(); - WriteAnyItemHeader( - stream, - item, - itemType, - typeCache, - objectCache, - ref lastItemType, - ref itemSerializer, - ref itemSyncSerializer, - ref objType, - ref writeObject - ); - if (writeObject && objType != ObjectTypes.Cached) - if (itemSerializer == SerializerTypes.Serializer) - { - WriteItem(stream, item, nullable: false, itemSerializer, itemSyncSerializer); - } - else - { - WriteAny(stream, item, objType, writeObject); - } - } - } - finally - { - ArrayPool.Shared.Return(cache); } } else { - for (int i = 0, len = value.Length; i < len; WriteItem(stream, value[i]!, valuesNullable, serializer, syncSerializer), i++) ; + for (int i = 0, len = value.Length; i < len; WriteItem(itemContext, value[i]!), i++) ; } return stream; } @@ -110,75 +86,47 @@ ref writeObject /// /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteFixedArray(this Stream stream, Array value, bool valuesNullable = false) + public static Stream WriteFixedArray(this Stream stream, Array value, ISerializationContext context) => SerializerException.Wrap(() => { + using ContextRecursion cr = new(context); Type elementType = value.GetType().GetElementType()!; - (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, _) = elementType.GetItemSerializerInfo(isAsync: false); - if (serializer == SerializerTypes.Any) + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, _) = elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - ObjectTypes objType = default; - Type? lastItemType = null; - Type itemType; object? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - bool writeObject = false, - isComplete; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) { - Span typeCache = cache.AsSpan(0, byte.MaxValue), - objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); - for (int i = 0, len = value.Length; i < len; i++) + item = value.GetValue(i); + if (item == null) { - item = value.GetValue(i); - if (item == null) + if (!context.Nullable) throw new SerializerException($"Found NULL item at #{i}", new InvalidDataException()); + Write(context.Stream, (byte)ObjectTypes.Null, context); + continue; + } + itemType = item.GetType(); + WriteAnyItemHeader(itemContext, item, itemType); + if (itemContext.WriteObject && itemContext.ObjectType != ObjectTypes.Cached) + if (itemContext.ItemSerializer == SerializerTypes.Serializer) { - Write(stream, (byte)ObjectTypes.Null); - continue; + WriteItem(itemContext, item); } - itemType = item.GetType(); - isComplete = WriteAnyItemHeader( - stream, - item, - itemType, - typeCache, - objectCache, - ref lastItemType, - ref itemSerializer, - ref itemSyncSerializer, - ref objType, - ref writeObject - ); - Logging.WriteInfo($"WRITE {i} {stream.Position} {objType} {(int)objType} {itemType}"); - if (!isComplete) + else { - if (itemSerializer == SerializerTypes.Serializer) - { - WriteItem(stream, item, nullable: false, itemSerializer, itemSyncSerializer); - } - else - { - WriteAny(stream, item, objType, writeObject); - } - Logging.WriteInfo($"\t\tWROTE {stream.Position}"); + WriteAny(stream, item, itemContext.ObjectType, itemContext.WriteObject, context); } - } - } - finally - { - ArrayPool.Shared.Return(cache); } } else { - for (int i = 0, len = value.Length; i < len; WriteItem(stream, value.GetValue(i)!, valuesNullable, serializer, syncSerializer), i++) ; + for (int i = 0, len = value.Length; i < len; WriteItem(itemContext, value.GetValue(i)!), i++) ; } return stream; }); @@ -189,13 +137,12 @@ ref writeObject /// Element type /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Stream stream, Memory value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => WriteFixedArrayAsync(stream, (ReadOnlyMemory)value, valuesNullable, cancellationToken); + public static Task WriteFixedArrayAsync(this Stream stream, Memory value, ISerializationContext context) + => WriteFixedArrayAsync(stream, (ReadOnlyMemory)value, context); /// /// Write @@ -203,13 +150,12 @@ public static Task WriteFixedArrayAsync(this Stream stream, Memory /// Element type /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Task stream, Memory value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteFixedArrayAsync); + public static Task WriteFixedArrayAsync(this Task stream, Memory value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteFixedArrayAsync); /// /// Write @@ -217,80 +163,48 @@ public static Task WriteFixedArrayAsync(this Task stream, Mem /// Element type /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, bool valuesNullable = false, CancellationToken cancellationToken = default) + public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, ISerializationContext context) => SerializerException.WrapAsync(async () => { + using ContextRecursion cr = new(context); Type elementType = typeof(T); - (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = - elementType.GetItemSerializerInfo(isAsync: true); - if (serializer == SerializerTypes.Any) + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, itemContext.ItemAsyncSerializer) = + elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - ObjectTypes objType = default; - Type? lastItemType = null; - Type itemType; T? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; - bool writeObject = false, - isComplete; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) { - Memory typeCache = cache.AsMemory(0, byte.MaxValue), - objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); - for (int i = 0, len = value.Length; i < len; i++) + item = value.Span[i]; + if (item == null) { - item = value.Span[i]; - if (item == null) + if (!context.Nullable) throw new SerializerException($"Found NULL item at #{i}", new InvalidDataException()); + await WriteAsync(context.Stream, (byte)ObjectTypes.Null, context).DynamicContext(); + continue; + } + itemType = item.GetType(); + await WriteAnyItemHeaderAsync(itemContext, item, itemType).DynamicContext(); + if (itemContext.WriteObject && itemContext.ObjectType != ObjectTypes.Cached) + if (itemContext.ItemSerializer == SerializerTypes.Serializer) { - await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); - continue; + await WriteItemAsync(itemContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); } - itemType = item.GetType(); - (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( - stream, - item, - itemType, - typeCache, - objectCache, - lastItemType, - itemSerializer, - itemSyncSerializer, - itemAsyncSerializer, - objType, - writeObject, - cancellationToken - ).DynamicContext(); - if (!isComplete && writeObject) - if (itemSerializer == SerializerTypes.Serializer) - { - await WriteItemAsync(stream, item, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, item, objType, writeObject, cancellationToken).DynamicContext(); - } - } - } - finally - { - ArrayPool.Shared.Return(cache); } } else { - for ( - int i = 0, len = value.Length; - i < len; - await WriteItemAsync(stream, value.Span[i]!, valuesNullable, serializer, syncSerializer, asyncSerializer, cancellationToken).DynamicContext(), i++ - ) ; + for (int i = 0, len = value.Length; i < len; await WriteItemAsync(itemContext, value.Span[i]!).DynamicContext(), i++) ; } return stream; }); @@ -301,98 +215,64 @@ await WriteItemAsync(stream, value.Span[i]!, valuesNullable, serializer, syncSer /// Element type /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteFixedArrayAsync( this Task stream, ReadOnlyMemory value, - bool valuesNullable = false, - CancellationToken cancellationToken = default + ISerializationContext context ) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteFixedArrayAsync); + => AsyncHelper.FluentAsync(stream, value, context, WriteFixedArrayAsync); /// /// Write /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteFixedArrayAsync(this Stream stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) + public static Task WriteFixedArrayAsync(this Stream stream, Array value, ISerializationContext context) => SerializerException.WrapAsync(async () => { + using ContextRecursion cr = new(context); Type elementType = value.GetType().GetElementType()!; - (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = - elementType.GetItemSerializerInfo(isAsync: true); - if (serializer == SerializerTypes.Any) + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, itemContext.ItemAsyncSerializer) = + elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - ObjectTypes objType = default; - Type? lastItemType = null; - Type itemType; object? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; - bool writeObject = false, - isComplete; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) { - Memory typeCache = cache.AsMemory(0, byte.MaxValue), - objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); - for (int i = 0, len = value.Length; i < len; i++) + item = value.GetValue(i); + if (item == null) { - item = value.GetValue(i); - if (item == null) + if (!context.Nullable) throw new SerializerException($"Found NULL item at #{i}", new InvalidDataException()); + await WriteAsync(context.Stream, (byte)ObjectTypes.Null, context).DynamicContext(); + continue; + } + itemType = item.GetType(); + await WriteAnyItemHeaderAsync(itemContext, item, itemType).DynamicContext(); + if (itemContext.WriteObject && itemContext.ObjectType != ObjectTypes.Cached) + if (itemContext.ItemSerializer == SerializerTypes.Serializer) { - await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); - continue; + await WriteItemAsync(itemContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); } - itemType = item.GetType(); - (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( - stream, - item, - itemType, - typeCache, - objectCache, - lastItemType, - itemSerializer, - itemSyncSerializer, - itemAsyncSerializer, - objType, - writeObject, - cancellationToken - ).DynamicContext(); - if (!isComplete && writeObject) - if (itemSerializer == SerializerTypes.Serializer) - { - await WriteItemAsync(stream, item, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, item, objType, writeObject, cancellationToken).DynamicContext(); - } - } - } - finally - { - ArrayPool.Shared.Return(cache); } } else { - for ( - int i = 0, len = value.Length; - i < len; - await WriteItemAsync(stream, value.GetValue(i)!, valuesNullable, serializer, syncSerializer, asyncSerializer, cancellationToken).DynamicContext(), i++ - ) ; + for (int i = 0, len = value.Length; i < len; await WriteItemAsync(itemContext, value.GetValue(i)!).DynamicContext(), i++) ; } return stream; }); @@ -402,12 +282,11 @@ await WriteItemAsync(stream, value.GetValue(i)!, valuesNullable, serializer, syn /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteFixedArrayAsync(this Task stream, Array value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteFixedArrayAsync); + public static Task WriteFixedArrayAsync(this Task stream, Array value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteFixedArrayAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs index b7ed17c..517da26 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs @@ -10,369 +10,298 @@ public static partial class StreamExtensions /// /// Write an item using a specified serializer /// - /// Stream + /// Context /// Item - /// Nullable? - /// Serializer type - /// Synchronous serializer /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteItem( - Stream stream, - dynamic item, - bool nullable, - SerializerTypes serializer, - StreamSerializer.Serialize_Delegate? syncSerializer = null - ) + public static Stream WriteItem(ItemSerializerContext context, dynamic item) { - if (!nullable) + ISerializationContext sc = context.Context; + if (!context.Nullable) { - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return WriteSerialized(stream, (IStreamSerializer)item); + case SerializerTypes.StreamSerializer: return WriteSerialized(sc.Stream, (IStreamSerializer)item, sc); case SerializerTypes.Serializer: { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); + SerializerException.Wrap(() => + ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous serializer") + ); object obj = item; - SerializerException.Wrap(() => syncSerializer!(stream, obj)); - return stream; + SerializerException.Wrap(() => context.ItemSyncSerializer!(sc, obj)); + return sc.Stream; } - case SerializerTypes.Any: return WriteAny(stream, item); - case SerializerTypes.AnyObject: return WriteAnyObject(stream, item); - case SerializerTypes.Bool: return Write(stream, (bool)item); - case SerializerTypes.Number: return WriteNumber(stream, item); - case SerializerTypes.Enum: return WriteEnum(stream, (Enum)item); - case SerializerTypes.String: return WriteString(stream, (string)item); - case SerializerTypes.String16: return WriteString16(stream, (string)item); - case SerializerTypes.String32: return WriteString32(stream, (string)item); - case SerializerTypes.Bytes: return WriteBytes(stream, (byte[])item); - case SerializerTypes.Array: return WriteArray(stream, (Array)item); - case SerializerTypes.List: return WriteList(stream, (IList)item); - case SerializerTypes.Dictionary: return WriteDict(stream, (IDictionary)item); - case SerializerTypes.Struct: return WriteStruct(stream, item); - case SerializerTypes.Stream: return WriteStream(stream, (Stream)item); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Any: return WriteAny(sc.Stream, item, sc); + case SerializerTypes.AnyObject: return WriteAnyObject(sc.Stream, item, sc); + case SerializerTypes.Bool: return Write(sc.Stream, (bool)item, sc); + case SerializerTypes.Number: return WriteNumber(sc.Stream, item, sc); + case SerializerTypes.Enum: return WriteEnum(sc.Stream, (Enum)item, sc); + case SerializerTypes.String: return WriteString(sc.Stream, (string)item, sc); + case SerializerTypes.String16: return WriteString16(sc.Stream, (string)item, sc); + case SerializerTypes.String32: return WriteString32(sc.Stream, (string)item, sc); + case SerializerTypes.Bytes: return WriteBytes(sc.Stream, (byte[])item, sc); + case SerializerTypes.Array: return WriteArray(sc.Stream, (Array)item, sc); + case SerializerTypes.List: return WriteList(sc.Stream, (IList)item, sc); + case SerializerTypes.Dictionary: return WriteDict(sc.Stream, (IDictionary)item, sc); + case SerializerTypes.Struct: return WriteStruct(sc.Stream, item, sc); + case SerializerTypes.Stream: return WriteStream(sc.Stream, (Stream)item, sc); + case SerializerTypes.Type: return Write(sc.Stream, (Type)item, sc); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return WriteSerializedNullable(stream, (IStreamSerializer?)item); + case SerializerTypes.StreamSerializer: return WriteSerializedNullable(sc.Stream, (IStreamSerializer?)item, sc); case SerializerTypes.Serializer: { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous serializer")); object? obj = item; - return WriteIfNotNull(stream, obj, () => syncSerializer!(stream, obj)); + return WriteIfNotNull(sc.Stream, obj, () => context.ItemSyncSerializer!(sc, obj), sc); } - case SerializerTypes.Any: return WriteAnyNullable(stream, item); - case SerializerTypes.AnyObject: return WriteAnyObjectNullable(stream, item); - case SerializerTypes.Bool: return WriteNullable(stream, (bool?)item); - case SerializerTypes.Number: return WriteNumberNullable(stream, item); - case SerializerTypes.Enum: return WriteEnumNullable(stream, (Enum?)item); - case SerializerTypes.String: return WriteStringNullable(stream, (string?)item); - case SerializerTypes.String16: return WriteString16Nullable(stream, (string?)item); - case SerializerTypes.String32: return WriteString32Nullable(stream, (string?)item); - case SerializerTypes.Bytes: return WriteBytesNullable(stream, (byte[]?)item); - case SerializerTypes.Array: return WriteArrayNullable(stream, (Array?)item); - case SerializerTypes.List: return WriteListNullable(stream, (IList?)item); - case SerializerTypes.Dictionary: return WriteDictNullable(stream, (IDictionary?)item); - case SerializerTypes.Struct: return WriteStructNullable(stream, item); - case SerializerTypes.Stream: return WriteStreamNullable(stream, (Stream?)item); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Any: return WriteAnyNullable(sc.Stream, item, sc); + case SerializerTypes.AnyObject: return WriteAnyObjectNullable(sc.Stream, item, sc); + case SerializerTypes.Bool: return WriteNullable(sc.Stream, (bool?)item, sc); + case SerializerTypes.Number: return WriteNumberNullable(sc.Stream, item, sc); + case SerializerTypes.Enum: return WriteEnumNullable(sc.Stream, (Enum?)item, sc); + case SerializerTypes.String: return WriteStringNullable(sc.Stream, (string?)item, sc); + case SerializerTypes.String16: return WriteString16Nullable(sc.Stream, (string?)item, sc); + case SerializerTypes.String32: return WriteString32Nullable(sc.Stream, (string?)item, sc); + case SerializerTypes.Bytes: return WriteBytesNullable(sc.Stream, (byte[]?)item, sc); + case SerializerTypes.Array: return WriteArrayNullable(sc.Stream, (Array?)item, sc); + case SerializerTypes.List: return WriteListNullable(sc.Stream, (IList?)item, sc); + case SerializerTypes.Dictionary: return WriteDictNullable(sc.Stream, (IDictionary?)item, sc); + case SerializerTypes.Struct: return WriteStructNullable(sc.Stream, item, sc); + case SerializerTypes.Stream: return WriteStreamNullable(sc.Stream, (Stream?)item, sc); + case SerializerTypes.Type: return WriteNullable(sc.Stream, (Type)item, sc); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } /// /// Write an item using a specified serializer /// - /// Stream + /// Context /// Item - /// Nullable? - /// Serializer type - /// Synchronous serializer - /// Asynchronous serializer - /// Cancellation token /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteItemAsync( - Stream stream, - dynamic item, - bool nullable, - SerializerTypes serializer, - StreamSerializer.Serialize_Delegate? syncSerializer = null, - StreamSerializer.AsyncSerialize_Delegate? asyncSerializer = null, - CancellationToken cancellationToken = default - ) + public static async Task WriteItemAsync(ItemSerializerContext context, dynamic item) { - if (!nullable) + ISerializationContext sc = context.Context; + if (!context.Nullable) { - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return await WriteSerializedAsync(stream, (IStreamSerializer)item, cancellationToken).DynamicContext(); + case SerializerTypes.StreamSerializer: return await WriteSerializedAsync(sc.Stream, (IStreamSerializer)item, sc).DynamicContext(); case SerializerTypes.Serializer: { object obj = item; - if (asyncSerializer == null) + if (context.ItemAsyncSerializer == null) { await Task.Yield(); - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); - SerializerException.Wrap(() => syncSerializer!(stream, obj)); + SerializerException.Wrap(() => + ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous erializer") + ); + SerializerException.Wrap(() => context.ItemSyncSerializer!(sc, obj)); } else { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(asyncSerializer), asyncSerializer)); - await SerializerException.WrapAsync(() => asyncSerializer(stream, obj, cancellationToken)).DynamicContext(); + await SerializerException.WrapAsync(() => context.ItemAsyncSerializer(sc, obj)).DynamicContext(); } - return stream; + return sc.Stream; } - case SerializerTypes.Any: return await WriteAnyAsync(stream, (object)item, cancellationToken).DynamicContext(); - case SerializerTypes.AnyObject: return await WriteAnyObjectAsync(stream, (object)item, cancellationToken).DynamicContext(); - case SerializerTypes.Bool: return await WriteAsync(stream, (bool)item, cancellationToken).DynamicContext(); - case SerializerTypes.Number: return await WriteNumberAsync(stream, (object)item, cancellationToken).DynamicContext(); - case SerializerTypes.Enum: return await WriteEnumAsync(stream, (Enum)item, cancellationToken).DynamicContext(); - case SerializerTypes.String: return await WriteStringAsync(stream, (string)item, cancellationToken).DynamicContext(); - case SerializerTypes.String16: return await WriteString16Async(stream, (string)item, cancellationToken).DynamicContext(); - case SerializerTypes.String32: return await WriteString32Async(stream, (string)item, cancellationToken).DynamicContext(); - case SerializerTypes.Bytes: return await WriteBytesAsync(stream, (byte[])item, cancellationToken).DynamicContext(); - case SerializerTypes.Array: return await WriteArrayAsync(stream, (Array)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.List: return await WriteListAsync(stream, (IList)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Dictionary: return await WriteDictAsync(stream, (IDictionary)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Struct: return await WriteStructAsync(stream, (object)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Stream: return await WriteStreamAsync(stream, (Stream)item, cancellationToken: cancellationToken).DynamicContext(); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Any: return await WriteAnyAsync(sc.Stream, (object)item, sc).DynamicContext(); + case SerializerTypes.AnyObject: return await WriteAnyObjectAsync(sc.Stream, (object)item, sc).DynamicContext(); + case SerializerTypes.Bool: return await WriteAsync(sc.Stream, (bool)item, sc).DynamicContext(); + case SerializerTypes.Number: return await WriteNumberAsync(sc.Stream, (object)item, sc).DynamicContext(); + case SerializerTypes.Enum: return await WriteEnumAsync(sc.Stream, (Enum)item, sc).DynamicContext(); + case SerializerTypes.String: return await WriteStringAsync(sc.Stream, (string)item, sc).DynamicContext(); + case SerializerTypes.String16: return await WriteString16Async(sc.Stream, (string)item, sc).DynamicContext(); + case SerializerTypes.String32: return await WriteString32Async(sc.Stream, (string)item, sc).DynamicContext(); + case SerializerTypes.Bytes: return await WriteBytesAsync(sc.Stream, (byte[])item, sc).DynamicContext(); + case SerializerTypes.Array: return await WriteArrayAsync(sc.Stream, (Array)item, sc).DynamicContext(); + case SerializerTypes.List: return await WriteListAsync(sc.Stream, (IList)item, sc).DynamicContext(); + case SerializerTypes.Dictionary: return await WriteDictAsync(sc.Stream, (IDictionary)item, sc).DynamicContext(); + case SerializerTypes.Struct: return await WriteStructAsync(sc.Stream, (object)item, sc).DynamicContext(); + case SerializerTypes.Stream: return await WriteStreamAsync(sc.Stream, (Stream)item, sc).DynamicContext(); + case SerializerTypes.Type: return await WriteAsync(sc.Stream, (Type)item, sc).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } - switch (serializer) + switch (context.ItemSerializer) { - case SerializerTypes.StreamSerializer: return await WriteSerializedNullableAsync(stream, (IStreamSerializer?)item, cancellationToken).DynamicContext(); + case SerializerTypes.StreamSerializer: return await WriteSerializedNullableAsync(sc.Stream, (IStreamSerializer?)item, sc).DynamicContext(); case SerializerTypes.Serializer: { object? obj = item!; - if (asyncSerializer == null) + if (context.ItemAsyncSerializer == null) { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(syncSerializer), syncSerializer)); + SerializerException.Wrap(() => + ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous serializer") + ); Task action() { - syncSerializer!(stream, obj); + context.ItemSyncSerializer!(sc, obj); return Task.CompletedTask; } - return await WriteIfNotNullAsync(stream, obj, action, cancellationToken).DynamicContext(); + return await WriteIfNotNullAsync(sc.Stream, obj, action, sc).DynamicContext(); } else { - SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(asyncSerializer), asyncSerializer)); - return await WriteIfNotNullAsync(stream, obj, () => asyncSerializer!(stream, obj, cancellationToken), cancellationToken).DynamicContext(); + return await WriteIfNotNullAsync(sc.Stream, obj, () => context.ItemAsyncSerializer!(sc, obj), sc).DynamicContext(); } } - case SerializerTypes.Any: return await WriteAnyNullableAsync(stream, (object?)item, cancellationToken).DynamicContext(); - case SerializerTypes.AnyObject: return await WriteAnyObjectNullableAsync(stream, (object?)item, cancellationToken).DynamicContext(); - case SerializerTypes.Bool: return await WriteNullableAsync(stream, (bool?)item, cancellationToken).DynamicContext(); - case SerializerTypes.Number: return await WriteNumberNullableAsync(stream, (object?)item, cancellationToken).DynamicContext(); - case SerializerTypes.Enum: return await WriteEnumNullableAsync(stream, (Enum?)item, cancellationToken).DynamicContext(); - case SerializerTypes.String: return await WriteStringNullableAsync(stream, (string?)item, cancellationToken).DynamicContext(); - case SerializerTypes.String16: return await WriteString16NullableAsync(stream, (string?)item, cancellationToken).DynamicContext(); - case SerializerTypes.String32: return await WriteString32NullableAsync(stream, (string?)item, cancellationToken).DynamicContext(); - case SerializerTypes.Bytes: return await WriteBytesNullableAsync(stream, (byte[]?)item, cancellationToken).DynamicContext(); - case SerializerTypes.Array: return await WriteArrayNullableAsync(stream, (Array?)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.List: return await WriteListNullableAsync(stream, (IList?)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Dictionary: return await WriteDictNullableAsync(stream, (IDictionary?)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Struct: return await WriteStructNullableAsync(stream, (object?)item, cancellationToken: cancellationToken).DynamicContext(); - case SerializerTypes.Stream: return await WriteStreamNullableAsync(stream, (Stream?)item, cancellationToken: cancellationToken).DynamicContext(); - default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {serializer}", nameof(serializer))); + case SerializerTypes.Any: return await WriteAnyNullableAsync(sc.Stream, (object?)item, sc).DynamicContext(); + case SerializerTypes.AnyObject: return await WriteAnyObjectNullableAsync(sc.Stream, (object?)item, sc).DynamicContext(); + case SerializerTypes.Bool: return await WriteNullableAsync(sc.Stream, (bool?)item, sc).DynamicContext(); + case SerializerTypes.Number: return await WriteNumberNullableAsync(sc.Stream, (object?)item, sc).DynamicContext(); + case SerializerTypes.Enum: return await WriteEnumNullableAsync(sc.Stream, (Enum?)item, sc).DynamicContext(); + case SerializerTypes.String: return await WriteStringNullableAsync(sc.Stream, (string?)item, sc).DynamicContext(); + case SerializerTypes.String16: return await WriteString16NullableAsync(sc.Stream, (string?)item, sc).DynamicContext(); + case SerializerTypes.String32: return await WriteString32NullableAsync(sc.Stream, (string?)item, sc).DynamicContext(); + case SerializerTypes.Bytes: return await WriteBytesNullableAsync(sc.Stream, (byte[]?)item, sc).DynamicContext(); + case SerializerTypes.Array: return await WriteArrayNullableAsync(sc.Stream, (Array?)item, sc).DynamicContext(); + case SerializerTypes.List: return await WriteListNullableAsync(sc.Stream, (IList?)item, sc).DynamicContext(); + case SerializerTypes.Dictionary: return await WriteDictNullableAsync(sc.Stream, (IDictionary?)item, sc).DynamicContext(); + case SerializerTypes.Struct: return await WriteStructNullableAsync(sc.Stream, (object?)item, sc).DynamicContext(); + case SerializerTypes.Stream: return await WriteStreamNullableAsync(sc.Stream, (Stream?)item, sc).DynamicContext(); + case SerializerTypes.Type: return await WriteNullableAsync(sc.Stream, (Type)item, sc).DynamicContext(); + default: throw SerializerException.From(new ArgumentException($"Unknown serializer type {context.ItemSerializer}", nameof(context))); } } /// /// Write an item header, if the used item type isn't specified /// - /// Stream + /// Item type + /// Context /// Item /// Item type - /// Type cache - /// Object cache - /// Last item type - /// Item serializer type - /// Item synchronous serializer - /// Object type - /// Write the object? /// All information written? - public static bool WriteAnyItemHeader( - Stream stream, - dynamic item, - Type itemType, - Span typeCache, - Span objectCache, - ref Type? lastItemType, - ref SerializerTypes itemSerializer, - ref StreamSerializer.Serialize_Delegate? itemSyncSerializer, - ref ObjectTypes objType, - ref bool writeObject - ) + public static bool WriteAnyItemHeader(ItemSerializerContext context, T item, Type itemType) { + ISerializationContext sc = context.Context; // Use the object cache - var info = ((object)item).GetObjectSerializerInfo(); - Logging.WriteInfo($"\tWRITE ITEM {info.Type} {info.ObjectType} {info.WriteType} {info.WriteObject}"); + var info = item!.GetObjectSerializerInfo(); if (info.WriteObject) { - Logging.WriteInfo("\t\tUSING CACHE"); - int ohc = item.GetHashCode()^info.Type.GetHashCode(), - objIndex = objectCache.IndexOf(ohc); - if (objIndex != -1) + int idx = context.GetObjectCacheIndex(item); + if (idx != -1) { - Logging.WriteInfo($"\t\tUSING CACHED OBJECT {objIndex}"); - Write(stream, (byte)ObjectTypes.Cached); - Write(stream, (byte)objIndex); - objType = info.ObjectType; - writeObject = info.WriteObject; - (itemSerializer, itemSyncSerializer, _) = itemType.GetItemSerializerInfo(isAsync: false); - lastItemType = writeObject ? itemType : null; + Write(sc.Stream, (byte)ObjectTypes.Cached, sc); + Write(sc.Stream, (byte)idx, sc); + context.ObjectType = info.ObjectType; + context.WriteObject = info.WriteObject; + (context.ItemSerializer, context.ItemSyncSerializer, _) = itemType.GetItemSerializerInfo(info.ObjectType, isAsync: false); + context.LastItemType = context.WriteObject ? itemType : null; return true; } else { - objIndex = objectCache.IndexOf(0); - Logging.WriteInfo($"\t\tCACHE {info.Type} {item} TO {objIndex}"); - if (objIndex != -1) objectCache[objIndex] = ohc; + context.AddObject(item); } } // Write the type information - if (itemType == lastItemType) + if (itemType == context.LastItemType) { - Logging.WriteInfo($"\t\tUSE LAST ITEM TYPE {lastItemType}"); // Use the last object type - Write(stream, (byte)ObjectTypes.LastItemType); + Write(sc.Stream, (byte)ObjectTypes.LastItemType, sc); } else { - Logging.WriteInfo("\t\tWRITE DETAILS"); // Write object type details - objType = info.ObjectType; - writeObject = info.WriteObject; - (itemSerializer, itemSyncSerializer, _) = itemType.GetItemSerializerInfo(isAsync: false); + context.ObjectType = info.ObjectType; + context.WriteObject = info.WriteObject; + (context.ItemSerializer, context.ItemSyncSerializer, _) = itemType.GetItemSerializerInfo(info.ObjectType, isAsync: false); if (info.WriteType) { - Logging.WriteInfo("\t\tWRITE TYPE INFO"); - //TODO Use the type cache only, if the type information can't be written in a single byte //TODO For array/list/dictionary write the key/value type(s) only - when reading, use them to construct the target type // Write type detail informations SerializedTypeInfo ti = itemType; if (ti.IsBasicType) { // Don't use the type cache - Logging.WriteInfo($"WRITE BASIC TYPE INFO TO THE CACHE"); - Write(stream, (byte)(objType | ObjectTypes.BasicTypeInfo)); - Write(stream, (byte)ti.ObjectType); + Write(sc.Stream, (byte)(context.ObjectType | ObjectTypes.BasicTypeInfo), sc); + Write(sc.Stream, (byte)ti.ObjectType, sc); } else { - int thc = itemType.GetHashCode(), - typeIndex = typeCache.IndexOf(thc); - if (typeIndex != -1) + int idx = context.GetTypeCacheIndex(itemType); + if (idx != -1) { - Logging.WriteInfo($"\t\tUSE CACHED TYPE {typeIndex}"); // Use the cached type - objType |= ObjectTypes.Cached; - Write(stream, (byte)objType); - Write(stream, (byte)typeIndex); + context.ObjectType |= ObjectTypes.Cached; + Write(sc.Stream, (byte)context.ObjectType, sc); + Write(sc.Stream, (byte)idx, sc); } else { // Update the cache - typeIndex = typeCache.IndexOf(0); - Logging.WriteInfo($"WRITE TO CACHE {typeIndex}"); - if (typeIndex != -1) typeCache[typeIndex] = thc; + context.AddType(itemType); // Write the type informations - Write(stream, (byte)objType); - Write(stream, itemType); + Write(sc.Stream, (byte)context.ObjectType, sc); + Write(sc.Stream, itemType, sc); } } } else { // Write the type informations - Write(stream, (byte)objType); - itemSerializer = SerializerTypes.Any; + Write(sc.Stream, (byte)context.ObjectType, sc); + context.ItemSerializer = SerializerTypes.Any; } - lastItemType = writeObject ? itemType : null; + context.LastItemType = context.WriteObject ? itemType : null; } - return !writeObject; + return !context.WriteObject; } /// /// Write an item header, if the used item type isn't specified /// - /// Stream + /// Item type + /// Context /// Item /// Item type - /// Type cache - /// Object cache - /// Last item type - /// Item serializer type - /// Item synchronous serializer - /// Item asynchronous serializer - /// Object type - /// Write the object? - /// Cancellation token - public static async Task<( - bool Complete, - Type? LastItemType, - SerializerTypes ItemSerializer, - StreamSerializer.Serialize_Delegate? ItemSyncSerializer, - StreamSerializer.AsyncSerialize_Delegate? ItemAsyncSerializer, - ObjectTypes ObjType, - bool WriteObject - )> WriteAnyItemHeaderAsync( - Stream stream, - dynamic item, - Type itemType, - Memory typeCache, - Memory objectCache, - Type? lastItemType, - SerializerTypes itemSerializer, - StreamSerializer.Serialize_Delegate? itemSyncSerializer, - StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer, - ObjectTypes objType, - bool writeObject, - CancellationToken cancellationToken - ) + public static async Task WriteAnyItemHeaderAsync(ItemSerializerContext context, T item, Type itemType) { + ISerializationContext sc = context.Context; // Use the object cache - var info = ((object)item).GetObjectSerializerInfo(); + var info = item!.GetObjectSerializerInfo(); if (info.WriteObject) { - int ohc = item.GetHashCode() ^ info.Type.GetHashCode(), - objIndex = objectCache.IndexOf(ohc); - if (objIndex != -1) + int idx = context.GetObjectCacheIndex(item); + if (idx != -1) { - await WriteAsync(stream, (byte)ObjectTypes.Cached, cancellationToken).DynamicContext(); - await WriteAsync(stream, (byte)objIndex, cancellationToken).DynamicContext(); - objType = info.ObjectType; - writeObject = info.WriteObject; - (itemSerializer, itemSyncSerializer, itemAsyncSerializer) = itemType.GetItemSerializerInfo(isAsync: true); - lastItemType = writeObject ? itemType : null; - return (Complete: true, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject); + await WriteAsync(sc.Stream, (byte)ObjectTypes.Cached, sc).DynamicContext(); + await WriteAsync(sc.Stream, (byte)idx, sc).DynamicContext(); + context.ObjectType = info.ObjectType; + context.WriteObject = info.WriteObject; + (context.ItemSerializer, context.ItemSyncSerializer, context.ItemAsyncSerializer) = + itemType.GetItemSerializerInfo(context.ObjectType, isAsync: true); + context.LastItemType = context.WriteObject ? itemType : null; + return true; } else { - objIndex = objectCache.Span.IndexOf(0); - if (objIndex != -1) objectCache.Span[objIndex] = ohc; + context.AddObject(item); } } // Write the type information - if (itemType == lastItemType) + if (itemType == context.LastItemType) { // Use the last object type - await WriteAsync(stream, (byte)ObjectTypes.LastItemType, cancellationToken).DynamicContext(); + await WriteAsync(sc.Stream, (byte)ObjectTypes.LastItemType, sc).DynamicContext(); } else { // Write object type details - objType = info.ObjectType; - writeObject = info.WriteObject; - (itemSerializer, itemSyncSerializer, itemAsyncSerializer) = itemType.GetItemSerializerInfo(isAsync: true); + context.ObjectType = info.ObjectType; + context.WriteObject = info.WriteObject; + (context.ItemSerializer, context.ItemSyncSerializer, context.ItemAsyncSerializer) = + itemType.GetItemSerializerInfo(context.ObjectType, isAsync: true); if (info.WriteType) { // Write type detail informations @@ -380,41 +309,38 @@ CancellationToken cancellationToken if (ti.IsBasicType) { // Don't use the type cache - Logging.WriteInfo($"WRITE BASIC TYPE INFO TO THE CACHE"); - await WriteAsync(stream, (byte)(objType | ObjectTypes.BasicTypeInfo), cancellationToken).DynamicContext(); - await WriteAsync(stream, (byte)ti.ObjectType, cancellationToken).DynamicContext(); + await WriteAsync(sc.Stream, (byte)(context.ObjectType | ObjectTypes.BasicTypeInfo), sc).DynamicContext(); + await WriteAsync(sc.Stream, (byte)ti.ObjectType, sc).DynamicContext(); } else { - int thc = itemType.GetHashCode(), - typeIndex = typeCache.Span.IndexOf(thc); - if (typeIndex != -1) + int idx = context.GetTypeCacheIndex(itemType); + if (idx != -1) { // Use the cached type - objType |= ObjectTypes.Cached; - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); - await WriteAsync(stream, (byte)typeIndex, cancellationToken).DynamicContext(); + context.ObjectType |= ObjectTypes.Cached; + await WriteAsync(sc.Stream, (byte)context.ObjectType, sc).DynamicContext(); + await WriteAsync(sc.Stream, (byte)idx, sc).DynamicContext(); } else { // Update the cache - typeIndex = typeCache.Span.IndexOf(0); - if (typeIndex != -1) typeCache.Span[typeIndex] = thc; + context.AddType(itemType); // Write the type informations - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); - await WriteAsync(stream, itemType, cancellationToken).DynamicContext(); + await WriteAsync(sc.Stream, (byte)context.ObjectType, sc).DynamicContext(); + await WriteAsync(sc.Stream, itemType, sc).DynamicContext(); } } } else { // Write the type informations - await WriteAsync(stream, (byte)objType, cancellationToken).DynamicContext(); - itemSerializer = SerializerTypes.Any; + await WriteAsync(sc.Stream, (byte)context.ObjectType, sc).DynamicContext(); + context.ItemSerializer = SerializerTypes.Any; } - lastItemType = writeObject ? itemType : null; + context.LastItemType = context.WriteObject ? itemType : null; } - return (Complete: !writeObject, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject); + return !context.WriteObject; } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index 25a1537..4dc105a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Collections; +using System.Collections; using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -14,13 +13,13 @@ public static partial class StreamExtensions /// /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteList(this Stream stream, IList value, bool valuesNullable = false) + public static Stream WriteList(this Stream stream, IList value, ISerializationContext context) { Type type = value.GetType(); SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -28,9 +27,9 @@ public static Stream WriteList(this Stream stream, IList value, bool valuesNulla type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); - WriteNumber(stream, value.Count); + WriteNumber(stream, value.Count, context); if (value.Count == 0) return stream; - WriteListInt(stream, value, valuesNullable); + WriteListInt(stream, value, context); return stream; } @@ -39,14 +38,13 @@ public static Stream WriteList(this Stream stream, IList value, bool valuesNulla /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteListAsync(this Stream stream, IList value, bool valuesNullable = false, CancellationToken cancellationToken = default) + public static async Task WriteListAsync(this Stream stream, IList value, ISerializationContext context) { Type type = value.GetType(); SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -54,9 +52,9 @@ public static async Task WriteListAsync(this Stream stream, IList value, type.IsGenericType || type.IsGenericTypeDefinition || !typeof(List<>).IsAssignableFrom(type.GetGenericTypeDefinition()), () => "Not a list type" )); - await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, value.Count, context).DynamicContext(); if (value.Count == 0) return stream; - await WriteListIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); + await WriteListIntAsync(stream, value, context).DynamicContext(); return stream; } @@ -65,27 +63,26 @@ public static async Task WriteListAsync(this Stream stream, IList value, /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteListAsync(this Task stream, IList value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteListAsync); + public static Task WriteListAsync(this Task stream, IList value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteListAsync); /// /// Write /// /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteListNullable(this Stream stream, IList? value, bool valuesNullable = false) - => WriteNullableCount(stream, value?.Count, () => + public static Stream WriteListNullable(this Stream stream, IList? value, ISerializationContext context) + => WriteNullableCount(context, value?.Count, () => { Type type = value!.GetType(); SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -94,7 +91,7 @@ public static Stream WriteListNullable(this Stream stream, IList? value, bool va () => "Not a list type" )); if (value!.Count == 0) return; - WriteListInt(stream, value, valuesNullable); + WriteListInt(stream, value, context); }); /// @@ -102,15 +99,14 @@ public static Stream WriteListNullable(this Stream stream, IList? value, bool va /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteListNullableAsync(this Stream stream, IList? value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => WriteNullableCountAsync(stream, value?.Count, async () => + public static Task WriteListNullableAsync(this Stream stream, IList? value, ISerializationContext context) + => WriteNullableCountAsync(context, value?.Count, async () => { Type type = value!.GetType(); SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument( @@ -119,92 +115,67 @@ public static Task WriteListNullableAsync(this Stream stream, IList? val () => "Not a list type" )); if (value!.Count == 0) return; - await WriteListIntAsync(stream, value, valuesNullable, cancellationToken).DynamicContext(); - }, cancellationToken); + await WriteListIntAsync(stream, value, context).DynamicContext(); + }); /// /// Write /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteListNullableAsync(this Task stream, IList? value, bool valuesNullable = false, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, valuesNullable, cancellationToken, WriteListNullableAsync); + public static Task WriteListNullableAsync(this Task stream, IList? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteListNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Are the values nullable? + /// Context /// Stream [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void WriteListInt(Stream stream, IList value, bool valuesNullable) + private static void WriteListInt(Stream stream, IList value, ISerializationContext context) { + using ContextRecursion cr = new(context); Type valueType = value.GetType(), elementType = valueType.IsGenericType && valueType.GenericTypeArguments.Length == 1 ? valueType.GenericTypeArguments[0] : typeof(object); - (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, _) = elementType.GetItemSerializerInfo(isAsync: false); - if (serializer == SerializerTypes.Any) + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, _) = elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - ObjectTypes objType = default; - Type? lastItemType = null; - Type itemType; object? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - bool writeObject = false, - isComplete; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + Type itemType; + for (int i = 0, len = value.Count; i < len; i++) { - Span typeCache = cache.AsSpan(0, byte.MaxValue), - objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); - for (int i = 0, len = value.Count; i < len; i++) + item = value[i]; + if (item == null) { - item = value[i]; - if (item == null) + if (!context.Nullable) throw new SerializerException($"Found NULL item at #{i}", new InvalidDataException()); + Write(context.Stream, (byte)ObjectTypes.Null, context); + continue; + } + itemType = item.GetType(); + WriteAnyItemHeader(itemContext, item, itemType); + if (itemContext.WriteObject && itemContext.ObjectType != ObjectTypes.Cached) + if (itemContext.ItemSerializer == SerializerTypes.Serializer) { - Write(stream, (byte)ObjectTypes.Null); - continue; + WriteItem(itemContext, item); + } + else + { + WriteAny(stream, item, itemContext.ObjectType, itemContext.WriteObject, context); } - itemType = item.GetType(); - isComplete = WriteAnyItemHeader( - stream, - item, - itemType, - typeCache, - objectCache, - ref lastItemType, - ref itemSerializer, - ref itemSyncSerializer, - ref objType, - ref writeObject - ); - if (!isComplete && writeObject) - if (itemSerializer == SerializerTypes.Serializer) - { - WriteItem(stream, item, nullable: false, itemSerializer, itemSyncSerializer); - } - else - { - WriteAny(stream, item, objType, writeObject); - } - } - } - finally - { - ArrayPool.Shared.Return(cache); } } else { - for (int i = 0, len = value.Count; i < len; WriteItem(stream, value[i]!, valuesNullable, serializer, syncSerializer), i++) ; + for (int i = 0, len = value.Count; i < len; WriteItem(itemContext, value[i]!), i++) ; } } @@ -213,80 +184,48 @@ ref writeObject /// /// Stream /// Value to write - /// Are the values nullable? - /// Cancellation token + /// Context /// Stream [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static async Task WriteListIntAsync(Stream stream, IList value, bool valuesNullable, CancellationToken cancellationToken) + private static async Task WriteListIntAsync(Stream stream, IList value, ISerializationContext context) { + using ContextRecursion cr = new(context); Type valueType = value.GetType(), elementType = valueType.IsGenericType && valueType.GenericTypeArguments.Length == 1 ? valueType.GenericTypeArguments[0] : typeof(object); - (SerializerTypes serializer, StreamSerializer.Serialize_Delegate? syncSerializer, StreamSerializer.AsyncSerialize_Delegate? asyncSerializer) = - elementType.GetItemSerializerInfo(isAsync: true); - if (serializer == SerializerTypes.Any) + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, itemContext.ItemAsyncSerializer) = + elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) { - ObjectTypes objType = default; - Type? lastItemType = null; - Type itemType; object? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; - bool writeObject = false, - isComplete; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + Type itemType; + for (int i = 0, len = value.Count; i < len; i++) { - Memory typeCache = cache.AsMemory(0, byte.MaxValue), - objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); - for (int i = 0, len = value.Count; i < len; i++) + item = value[i]; + if (item == null) { - item = value[i]; - if (item == null) + if (!context.Nullable) throw new SerializerException($"Found NULL item at #{i}", new InvalidDataException()); + await WriteAsync(context.Stream, (byte)ObjectTypes.Null, context).DynamicContext(); + continue; + } + itemType = item.GetType(); + await WriteAnyItemHeaderAsync(itemContext, item, itemType).DynamicContext(); + if (itemContext.WriteObject && itemContext.ObjectType != ObjectTypes.Cached) + if (itemContext.ItemSerializer == SerializerTypes.Serializer) { - await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); - continue; + await WriteItemAsync(itemContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); } - itemType = item.GetType(); - (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( - stream, - item, - itemType, - typeCache, - objectCache, - lastItemType, - itemSerializer, - itemSyncSerializer, - itemAsyncSerializer, - objType, - writeObject, - cancellationToken - ).DynamicContext(); - if (!isComplete && writeObject) - if (itemSerializer == SerializerTypes.Serializer) - { - await WriteItemAsync(stream, item, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, item, objType, writeObject, cancellationToken).DynamicContext(); - } - } - } - finally - { - ArrayPool.Shared.Return(cache); } } else { - for ( - int i = 0, len = value.Count; - i < len; - await WriteItemAsync(stream, value[i]!, valuesNullable, serializer, syncSerializer, asyncSerializer, cancellationToken).DynamicContext(), i++ - ) ; + for (int i = 0, len = value.Count; i < len; await WriteItemAsync(itemContext, value[i]!).DynamicContext(), i++) ; } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs index 6823a07..be60b2a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -13,72 +13,81 @@ public static partial class StreamExtensions /// Number type /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNumber(this Stream stream, T value) where T : struct, IConvertible - => WriteNumberInt(stream, value, type: null); +#pragma warning disable // Remove unused argument + public static Stream WriteNumber(this Stream stream, T value, ISerializationContext context) where T : struct, IConvertible +#pragma warning restore IDE0060 // Remove unused argument + => WriteNumberInt(context, value, type: null); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteNumber(this Stream stream, object value) => WriteNumberInt(stream, value, type: null); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteNumber(this Stream stream, object value, ISerializationContext context) => WriteNumberInt(context, value, type: null); +#pragma warning restore IDE0060 // Remove unused argument /// /// Write /// - /// Stream + /// Context /// Value to write /// Number type /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Stream WriteNumberInt(Stream stream, object value, NumberTypes? type) + public static Stream WriteNumberInt(ISerializationContext context, object value, NumberTypes? type, bool writeType = true) => SerializerException.Wrap(() => { if (type == null) (_, type) = value.GetNumberAndType(); - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)type; - stream.Write(poolData.Span); + using RentedArrayStruct poolData = new(1, clean: false); + if (writeType) + { + poolData[0] = (byte)type; + context.Stream.Write(poolData.Span); + } if (!type.Value.IsZero() && !type.Value.HasValueFlags()) switch (type) { case NumberTypes.Byte: case NumberTypes.Byte | NumberTypes.Unsigned: poolData[0] = value.ConvertType(); - stream.Write(poolData.Span); + context.Stream.Write(poolData.Span);// Compatibility with serializer version 2 break; case NumberTypes.Short: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context);// Compatibility with serializer version 2 break; case NumberTypes.Short | NumberTypes.Unsigned: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context);// Compatibility with serializer version 2 break; case NumberTypes.Int: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context); break; case NumberTypes.Int | NumberTypes.Unsigned: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context); break; case NumberTypes.Long: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context); break; case NumberTypes.Long | NumberTypes.Unsigned: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context); break; case NumberTypes.Float: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context); break; case NumberTypes.Double: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context); break; case NumberTypes.Decimal: - Write(stream, value.ConvertType()); + Write(context.Stream, value.ConvertType(), context); break; } - return stream; + return context.Stream; }); /// @@ -87,10 +96,10 @@ private static Stream WriteNumberInt(Stream stream, object value, NumberTypes? t /// Number type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNumberAsync(this Stream stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible - => WriteNumberIntAsync(stream, value, type: null, cancellationToken); + public static Task WriteNumberAsync(this Stream stream, T value, ISerializationContext context) where T : struct, IConvertible + => WriteNumberIntAsync(context, value, type: null); /// /// Write @@ -98,90 +107,92 @@ public static Task WriteNumberAsync(this Stream stream, T value, Canc /// Number type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNumberAsync(this Task stream, T value, CancellationToken cancellationToken = default) where T : struct, IConvertible - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberAsync); + public static Task WriteNumberAsync(this Task stream, T value, ISerializationContext context) where T : struct, IConvertible + => AsyncHelper.FluentAsync(stream, value, context, WriteNumberAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteNumberAsync(this Stream stream, object value, CancellationToken cancellationToken = default) - => WriteNumberIntAsync(stream, value, type: null, cancellationToken); + public static Task WriteNumberAsync(this Stream stream, object value, ISerializationContext context) + => WriteNumberIntAsync(context, value, type: null); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNumberAsync(this Task stream, object value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberAsync); + public static Task WriteNumberAsync(this Task stream, object value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNumberAsync); /// /// Write /// - /// Stream + /// Context /// Value to write /// Number type - /// Cancellation token /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Task WriteNumberIntAsync(Stream stream, object value, NumberTypes? type, CancellationToken cancellationToken) + public static Task WriteNumberIntAsync(ISerializationContext context, object value, NumberTypes? type, bool writeType = true) => SerializerException.WrapAsync(async () => { if (type == null) (_, type) = value.GetNumberAndType(); - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)type; - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); + using RentedArrayStruct poolData = new(1, clean: false); + if (writeType) + { + poolData[0] = (byte)type; + await context.Stream.WriteAsync(poolData.Memory, context.Cancellation).DynamicContext(); + } if (!type.Value.IsZero() && !type.Value.HasValueFlags()) switch (type) { case NumberTypes.Byte: case NumberTypes.Byte | NumberTypes.Unsigned: poolData[0] = value.ConvertType(); - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); + await context.Stream.WriteAsync(poolData.Memory, context.Cancellation).DynamicContext();// Compatibility with serializer version 2 break; case NumberTypes.Short: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext();// Compatibility with serializer version 2 break; case NumberTypes.Short | NumberTypes.Unsigned: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext();// Compatibility with serializer version 2 break; case NumberTypes.Int: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); break; case NumberTypes.Int | NumberTypes.Unsigned: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); break; case NumberTypes.Long: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); break; case NumberTypes.Long | NumberTypes.Unsigned: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); break; case NumberTypes.Float: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); break; case NumberTypes.Double: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); break; case NumberTypes.Decimal: - await WriteAsync(stream, value.ConvertType(), cancellationToken).DynamicContext(); + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); break; } - return stream; + return context.Stream; }); /// @@ -190,26 +201,28 @@ private static Task WriteNumberIntAsync(Stream stream, object value, Num /// Number type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteNumberNullable(this Stream stream, T? value) where T : struct, IConvertible - => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteNumber(stream, value.Value); + public static Stream WriteNumberNullable(this Stream stream, T? value, ISerializationContext context) where T : struct, IConvertible + => value == null ? Write(stream, (byte)NumberTypes.IsNull, context) : WriteNumber(stream, value.Value, context); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteNumberNullable(this Stream stream, object? value) - => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteNumber(stream, value); + public static Stream WriteNumberNullable(this Stream stream, object? value, ISerializationContext context) + => value == null ? Write(stream, (byte)NumberTypes.IsNull, context) : WriteNumber(stream, value, context); /// /// Write @@ -217,17 +230,17 @@ public static Stream WriteNumberNullable(this Stream stream, object? value) /// Number type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) + public static Task WriteNumberNullableAsync(this Stream stream, T? value, ISerializationContext context) where T : struct, IConvertible => value == null - ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) - : WriteNumberAsync(stream, value.Value, cancellationToken); + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteNumberAsync(stream, value.Value, context); /// /// Write @@ -235,40 +248,40 @@ public static Task WriteNumberNullableAsync(this Stream stream, T? va /// Number type /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNumberNullableAsync(this Task stream, T? value, CancellationToken cancellationToken = default) + public static Task WriteNumberNullableAsync(this Task stream, T? value, ISerializationContext context) where T : struct, IConvertible - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberNullableAsync); + => AsyncHelper.FluentAsync(stream, value, context, WriteNumberNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteNumberNullableAsync(this Stream stream, object? value, CancellationToken cancellationToken = default) + public static Task WriteNumberNullableAsync(this Stream stream, object? value, ISerializationContext context) => value == null - ? WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken) - : WriteNumberAsync(stream, value, cancellationToken); + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteNumberAsync(stream, value, context); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNumberNullableAsync(this Task stream, object? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteNumberNullableAsync); + public static Task WriteNumberNullableAsync(this Task stream, object? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNumberNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs index aad6c73..4906040 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Object.cs @@ -1,5 +1,4 @@ using System.Buffers; -using System.Reflection; using System.Runtime; using System.Runtime.CompilerServices; using System.Text; @@ -15,20 +14,21 @@ public static partial class StreamExtensions /// /// Stream /// Object to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteObject(this Stream stream, object obj) + public static Stream WriteObject(this Stream stream, object obj, ISerializationContext context) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj)); if (obj is IStreamSerializer streamSerializer) - return WriteSerialized(stream, streamSerializer); - else if (StreamSerializer.FindSerializer(obj.GetType()) is not StreamSerializer.Serialize_Delegate serializer) - return WriteAnyObject(stream, obj); + return WriteSerialized(stream, streamSerializer, context); + else if (StreamSerializer.FindSerializer(obj.GetType()) is not StreamSerializer.Serializer_Delegate serializer) + return WriteAnyObject(stream, obj, context); else - SerializerException.Wrap(() => serializer(stream, obj)); + SerializerException.Wrap(() => serializer(context, obj)); return stream; } @@ -37,21 +37,21 @@ public static Stream WriteObject(this Stream stream, object obj) /// /// Stream /// Object to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + public static async Task WriteObjectAsync(this Stream stream, object obj, ISerializationContext context) { SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj)); if (obj is IStreamSerializer streamSerializer) - await WriteSerializedAsync(stream, streamSerializer, cancellationToken).DynamicContext(); - else if (StreamSerializer.FindAsyncSerializer(obj.GetType()) is not StreamSerializer.AsyncSerialize_Delegate serializer) - await WriteAnyObjectAsync(stream, obj, cancellationToken).DynamicContext(); + await WriteSerializedAsync(stream, streamSerializer, context).DynamicContext(); + else if (StreamSerializer.FindAsyncSerializer(obj.GetType()) is not StreamSerializer.AsyncSerializer_Delegate serializer) + await WriteAnyObjectAsync(stream, obj, context).DynamicContext(); else - await SerializerException.WrapAsync(async () => await serializer(stream, obj, cancellationToken).DynamicContext()).DynamicContext(); + await SerializerException.WrapAsync(async () => await serializer(context, obj).DynamicContext()).DynamicContext(); return stream; } @@ -60,115 +60,91 @@ public static async Task WriteObjectAsync(this Stream stream, object obj /// /// Stream /// Object to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteObjectAsync(this Task stream, object obj, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteObjectAsync); + public static Task WriteObjectAsync(this Task stream, object obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteObjectAsync); /// /// Write /// /// Stream /// Object to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteObjectNullable(this Stream stream, object? obj) - => WriteIfNotNull(stream, obj, () => WriteObject(stream, obj!)); + public static Stream WriteObjectNullable(this Stream stream, object? obj, ISerializationContext context) + => WriteIfNotNull(stream, obj, () => WriteObject(stream, obj!, context), context); /// /// Write /// /// Stream /// Object to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); + public static Task WriteObjectNullableAsync(this Stream stream, object? obj, ISerializationContext context) + => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, context), context); /// /// Write /// /// Stream /// Object to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteObjectNullableAsync); + public static Task WriteObjectNullableAsync(this Task stream, object? obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteObjectNullableAsync); /// /// Write any object /// /// Stream /// Object + /// Context /// Stream - public static Stream WriteAnyObject(this Stream stream, object obj) + public static Stream WriteAnyObject(this Stream stream, object obj, ISerializationContext context) { - if (obj is IStreamSerializer serializable) return WriteSerialized(stream, serializable); + if (obj is IStreamSerializer serializable) return WriteSerialized(stream, serializable, context); + using ContextRecursion cr = new(context); Type type = obj.GetType(); PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - WriteNumberNullable(stream, attr?.Version); - WriteNumber(stream, pis.Length); - ObjectTypes objType = default; - Type? lastItemType = null; + WriteNumberNullable(stream, attr?.Version, context); + WriteNumber(stream, pis.Length, context); + using ItemSerializerContext itemContext = new(context); object? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - bool writeObject = false, - isComplete; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + foreach (PropertyInfoExt pi in pis) { - Span typeCache = cache.AsSpan(0, byte.MaxValue), - objectCache = cache.AsSpan(byte.MaxValue, byte.MaxValue); - foreach (PropertyInfoExt pi in pis) + if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) + Write(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), context); + item = pi.Getter!(obj); + if (item == null) { - if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) - Write(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b))); - item = pi.Getter!(obj); - if (item == null) - { - Write(stream, (byte)ObjectTypes.Null); - continue; - } - isComplete = WriteAnyItemHeader( - stream, - item!, - pi.Property.PropertyType, - typeCache, - objectCache, - ref lastItemType, - ref itemSerializer, - ref itemSyncSerializer, - ref objType, - ref writeObject - ); - if (!isComplete && writeObject) - if (itemSerializer == SerializerTypes.Serializer) - { - WriteItem(stream, item!, nullable: false, itemSerializer, itemSyncSerializer); - } - else - { - WriteAny(stream, item!, objType, writeObject); - } + Write(stream, (byte)ObjectTypes.Null, context); + continue; + } + if (WriteAnyItemHeader(itemContext, item!, pi.Property.PropertyType) || !itemContext.WriteObject) continue; + if (itemContext.ItemSerializer == SerializerTypes.Serializer) + { + WriteItem(itemContext, item!); + } + else + { + WriteAny(context.Stream, item!, itemContext.ObjectType, itemContext.WriteObject, context); } - } - finally - { - ArrayPool.Shared.Return(cache); } return stream; } @@ -178,68 +154,39 @@ ref writeObject /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream - public static async Task WriteAnyObjectAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + public static async Task WriteAnyObjectAsync(this Stream stream, object obj, ISerializationContext context) { - if (obj is IStreamSerializer serializable) return await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); + if (obj is IStreamSerializer serializable) return await WriteSerializedAsync(stream, serializable, context).DynamicContext(); + using ContextRecursion cr = new(context); Type type = obj.GetType(); PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - await WriteNumberNullableAsync(stream, attr?.Version, cancellationToken).DynamicContext(); - await WriteNumberAsync(stream, pis.Length, cancellationToken).DynamicContext(); - ObjectTypes objType = default; - Type? lastItemType = null; + await WriteNumberNullableAsync(stream, attr?.Version, context).DynamicContext(); + await WriteNumberAsync(stream, pis.Length, context).DynamicContext(); + using ItemSerializerContext itemContext = new(context); object? item; - SerializerTypes itemSerializer = default; - StreamSerializer.Serialize_Delegate? itemSyncSerializer = null; - StreamSerializer.AsyncSerialize_Delegate? itemAsyncSerializer = null; - bool writeObject = false, - isComplete; - int[] cache = ArrayPool.Shared.RentClean(byte.MaxValue << 1); - try + foreach (PropertyInfoExt pi in pis) { - Memory typeCache = cache.AsMemory(0, byte.MaxValue), - objectCache = cache.AsMemory(byte.MaxValue, byte.MaxValue); - foreach (PropertyInfoExt pi in pis) + if (useChecksum && !(pi.Property.GetCustomAttributeCached()?.SkipPropertyNameChecksum ?? false)) + await WriteAsync(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), context).DynamicContext(); + item = pi.Getter!(obj); + if (item == null) { - if (useChecksum && !(pi.Property.GetCustomAttribute()?.SkipPropertyNameChecksum ?? false)) - await WriteAsync(stream, pi.Property.Name.GetBytes().Aggregate((c, b) => (byte)(c ^ b)), cancellationToken).DynamicContext(); - item = pi.Getter!(obj); - if (item == null) - { - await WriteAsync(stream, (byte)ObjectTypes.Null, cancellationToken).DynamicContext(); - continue; - } - (isComplete, lastItemType, itemSerializer, itemSyncSerializer, itemAsyncSerializer, objType, writeObject) = await WriteAnyItemHeaderAsync( - stream, - item!, - pi.Property.PropertyType, - typeCache, - objectCache, - lastItemType, - itemSerializer, - itemSyncSerializer, - itemAsyncSerializer, - objType, - writeObject, - cancellationToken - ).DynamicContext(); - if (!isComplete && writeObject) - if (itemSerializer == SerializerTypes.Serializer) - { - await WriteItemAsync(stream, item!, nullable: false, itemSerializer, itemSyncSerializer, itemAsyncSerializer, cancellationToken).DynamicContext(); - } - else - { - await WriteAnyAsync(stream, item!, objType, writeObject, cancellationToken).DynamicContext(); - } + await WriteAsync(stream, (byte)ObjectTypes.Null, context).DynamicContext(); + continue; + } + if (await WriteAnyItemHeaderAsync(itemContext, item!, pi.Property.PropertyType).DynamicContext() || !itemContext.WriteObject) continue; + if (itemContext.ItemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(itemContext, item!).DynamicContext(); + } + else + { + await WriteAnyAsync(context.Stream, item!, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); } - } - finally - { - ArrayPool.Shared.Return(cache); } return stream; } @@ -249,50 +196,51 @@ public static async Task WriteAnyObjectAsync(this Stream stream, object /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAnyObjectAsync(this Task stream, object obj, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyObjectAsync); + public static Task WriteAnyObjectAsync(this Task stream, object obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteAnyObjectAsync); /// /// Write any object /// /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteAnyObjectNullable(this Stream stream, object? obj) - => WriteIfNotNull(stream, obj, () => WriteAnyObject(stream, obj!)); + public static Stream WriteAnyObjectNullable(this Stream stream, object? obj, ISerializationContext context) + => WriteIfNotNull(stream, obj, () => WriteAnyObject(stream, obj!, context), context); /// /// Write any object /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteAnyObjectNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, cancellationToken), cancellationToken); + public static Task WriteAnyObjectNullableAsync(this Stream stream, object? obj, ISerializationContext context) + => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, context), context); /// /// Write any object /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAnyObjectNullableAsync(this Task stream, object? obj, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteAnyObjectNullableAsync); + public static Task WriteAnyObjectNullableAsync(this Task stream, object? obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteAnyObjectNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs index f6d5036..0b764bd 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Serialized.cs @@ -12,15 +12,17 @@ public static partial class StreamExtensions /// /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj) + public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj, ISerializationContext context) => SerializerException.Wrap(() => { - obj.Serialize(stream); + using ContextRecursion cr = new(context); + obj.Serialize(context); return stream; }); @@ -30,15 +32,17 @@ public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj) /// Object type /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerialized(this Stream stream, T obj) where T : class, IStreamSerializer + public static Stream WriteSerialized(this Stream stream, T obj, ISerializationContext context) where T : class, IStreamSerializer => SerializerException.Wrap(() => { - obj.Serialize(stream); + using ContextRecursion cr = new(context); + obj.Serialize(context); return stream; }); @@ -48,15 +52,17 @@ public static Stream WriteSerialized(this Stream stream, T obj) where T : cla /// Structure type /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerializedStruct(this Stream stream, T obj) where T : struct, IStreamSerializer + public static Stream WriteSerializedStruct(this Stream stream, T obj, ISerializationContext context) where T : struct, IStreamSerializer => SerializerException.Wrap(() => { - obj.Serialize(stream); + using ContextRecursion cr = new(context); + obj.Serialize(context); return stream; }); @@ -65,16 +71,17 @@ public static Stream WriteSerializedStruct(this Stream stream, T obj) where T /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = default) + public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, ISerializationContext context) => SerializerException.Wrap(async () => { - await obj.SerializeAsync(stream, cancellationToken).DynamicContext(); + using ContextRecursion cr = new(context); + await obj.SerializeAsync(context).DynamicContext(); return stream; }); @@ -83,12 +90,12 @@ public static Task WriteSerializedAsync(this Stream stream, IStreamSeria /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializedAsync(this Task stream, IStreamSerializer obj, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedAsync); + public static Task WriteSerializedAsync(this Task stream, IStreamSerializer obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedAsync); /// /// Write @@ -96,16 +103,17 @@ public static Task WriteSerializedAsync(this Task stream, IStrea /// Object type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer + public static Task WriteSerializedAsync(this Stream stream, T obj, ISerializationContext context) where T : class, IStreamSerializer => SerializerException.Wrap(async () => { - await obj.SerializeAsync(stream, cancellationToken).DynamicContext(); + using ContextRecursion cr = new(context); + await obj.SerializeAsync(context).DynamicContext(); return stream; }); @@ -115,12 +123,12 @@ public static Task WriteSerializedAsync(this Stream stream, T obj, Ca /// Object type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializedAsync(this Task stream, T obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedAsync); + public static Task WriteSerializedAsync(this Task stream, T obj, ISerializationContext context) where T : class, IStreamSerializer + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedAsync); /// /// Write @@ -128,16 +136,17 @@ public static Task WriteSerializedAsync(this Task stream, T o /// Structure type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedStructAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer + public static Task WriteSerializedStructAsync(this Stream stream, T obj, ISerializationContext context) where T : struct, IStreamSerializer => SerializerException.Wrap(async () => { - await obj.SerializeAsync(stream, cancellationToken).DynamicContext(); + using ContextRecursion cr = new(context); + await obj.SerializeAsync(context).DynamicContext(); return stream; }); @@ -147,25 +156,26 @@ public static Task WriteSerializedStructAsync(this Stream stream, T o /// Structure type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializedStructAsync(this Task stream, T obj, CancellationToken cancellationToken = default) where T : struct, IStreamSerializer - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedStructAsync); + public static Task WriteSerializedStructAsync(this Task stream, T obj, ISerializationContext context) where T : struct, IStreamSerializer + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedStructAsync); /// /// Write /// /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer? obj) - => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!)); + public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer? obj, ISerializationContext context) + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!, context), context); /// /// Write @@ -173,13 +183,14 @@ public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializ /// Object type /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerializedNullable(this Stream stream, T? obj) where T : class, IStreamSerializer - => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!)); + public static Stream WriteSerializedNullable(this Stream stream, T? obj, ISerializationContext context) where T : class, IStreamSerializer + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!, context), context); /// /// Write @@ -187,39 +198,40 @@ public static Stream WriteSerializedNullable(this Stream stream, T? obj) wher /// Structure type /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerializedNullableStruct(this Stream stream, T? obj) where T : struct, IStreamSerializer - => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!.Value)); + public static Stream WriteSerializedNullableStruct(this Stream stream, T? obj, ISerializationContext context) where T : struct, IStreamSerializer + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!.Value, context), context); /// /// Write /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) - => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); + public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, ISerializationContext context) + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, context), context); /// /// Write /// /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializedNullableAsync(this Task stream, IStreamSerializer? obj, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedNullableAsync); + public static Task WriteSerializedNullableAsync(this Task stream, IStreamSerializer? obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedNullableAsync); /// /// Write @@ -227,14 +239,14 @@ public static Task WriteSerializedNullableAsync(this Task stream /// Object type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) where T : class, IStreamSerializer - => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, cancellationToken), cancellationToken); + public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, ISerializationContext context) where T : class, IStreamSerializer + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, context), context); /// /// Write @@ -242,13 +254,13 @@ public static Task WriteSerializedNullableAsync(this Stream stream, T /// Object type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializedNullableAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) + public static Task WriteSerializedNullableAsync(this Task stream, T? obj, ISerializationContext context) where T : class, IStreamSerializer - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedNullableAsync); + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedNullableAsync); /// /// Write @@ -256,15 +268,15 @@ public static Task WriteSerializedNullableAsync(this Task str /// Structure type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteSerializedNullableStructAsync(this Stream stream, T? obj, CancellationToken cancellationToken = default) + public static Task WriteSerializedNullableStructAsync(this Stream stream, T? obj, ISerializationContext context) where T : struct, IStreamSerializer - => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!.Value, cancellationToken), cancellationToken); + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!.Value, context), context); /// /// Write @@ -272,12 +284,12 @@ public static Task WriteSerializedNullableStructAsync(this Stream str /// Structure type /// Stream /// Object - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializedNullableStructAsync(this Task stream, T? obj, CancellationToken cancellationToken = default) + public static Task WriteSerializedNullableStructAsync(this Task stream, T? obj, ISerializationContext context) where T : struct, IStreamSerializer - => AsyncHelper.FluentAsync(stream, obj, cancellationToken, WriteSerializedNullableStructAsync); + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedNullableStructAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs index 9402ae2..7783393 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; using System.Runtime.CompilerServices; using wan24.Core; @@ -13,15 +12,15 @@ public static partial class StreamExtensions /// /// Stream /// Source stream - /// Array pool + /// Context /// Chunk length in bytes /// Stream - public static Stream WriteStream(this Stream stream, Stream source, ArrayPool? pool = null, int? chunkLength = null) + public static Stream WriteStream(this Stream stream, Stream source, ISerializationContext context, int? chunkLength = null) => SerializerException.Wrap(() => { if (chunkLength != null) ArgumentValidationHelper.EnsureValidArgument(nameof(chunkLength), 1, int.MaxValue, chunkLength.Value); long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); - WriteNumber(stream, len); + WriteNumber(stream, len, context); if (len != 0) if (source.CanSeek) { @@ -29,16 +28,16 @@ public static Stream WriteStream(this Stream stream, Stream source, ArrayPool buffer = new(len: chunkLength ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(len: chunkLength ?? Settings.BufferSize, StreamSerializer.BufferPool, clean: false); for (int red = buffer.Length; red == buffer.Length;) { red = stream.Read(buffer.Span); if (red < 1) { - stream.WriteBytes(Array.Empty()); + stream.WriteBytes(Array.Empty(), context); break; } - stream.WriteBytes(buffer.Span); + stream.WriteBytes(buffer.Span, context); } } return stream; @@ -49,54 +48,52 @@ public static Stream WriteStream(this Stream stream, Stream source, ArrayPool /// Stream /// Source stream - /// Array pool + /// Context /// Chunk length in bytes /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteStreamNullable(this Stream stream, Stream? source, ArrayPool? pool = null, int? chunkLength = null) - => source == null ? WriteNumber(stream, long.MinValue) : WriteStream(stream, source, pool, chunkLength); + public static Stream WriteStreamNullable(this Stream stream, Stream? source, ISerializationContext context, int? chunkLength = null) + => source == null ? WriteNumber(stream, long.MinValue, context) : WriteStream(stream, source, context, chunkLength); /// /// Write a stream /// /// Stream /// Source stream - /// Array pool + /// Context /// Chunk length in bytes - /// Cancellation token /// Stream public static Task WriteStreamAsync( this Stream stream, Stream source, - ArrayPool? pool = null, - int? chunkLength = null, - CancellationToken cancellationToken = default + ISerializationContext context, + int? chunkLength = null ) => SerializerException.WrapAsync(async () => { if (chunkLength != null) ArgumentValidationHelper.EnsureValidArgument(nameof(chunkLength), 1, int.MaxValue, chunkLength.Value); long len = source.CanSeek ? source.Length - source.Position : 0 - (chunkLength ?? Settings.BufferSize); - await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, len, context).DynamicContext(); if (len != 0) if (source.CanSeek) { - await source.CopyToAsync(stream, bufferSize: chunkLength ?? Settings.BufferSize, cancellationToken).DynamicContext(); + await source.CopyToAsync(stream, bufferSize: chunkLength ?? Settings.BufferSize, context.Cancellation).DynamicContext(); } else { - using RentedArray buffer = new(len: chunkLength ?? Settings.BufferSize, pool ?? StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(len: chunkLength ?? Settings.BufferSize, StreamSerializer.BufferPool, clean: false); for (int red = buffer.Length; red == buffer.Length;) { - red = await stream.ReadAsync(buffer.Memory, cancellationToken).DynamicContext(); + red = await stream.ReadAsync(buffer.Memory, context.Cancellation).DynamicContext(); if (red < 1) { - await stream.WriteBytesAsync(Array.Empty(), cancellationToken).DynamicContext(); + await stream.WriteBytesAsync(Array.Empty(), context).DynamicContext(); break; } - await stream.WriteBytesAsync(buffer.Memory, cancellationToken).DynamicContext(); + await stream.WriteBytesAsync(buffer.Memory, context).DynamicContext(); } } return stream; @@ -107,29 +104,26 @@ public static Task WriteStreamAsync( /// /// Stream /// Source stream - /// Array pool + /// Context /// Chunk length in bytes - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStreamAsync( this Task stream, Stream source, - ArrayPool? pool = null, - int? chunkLength = null, - CancellationToken cancellationToken = default + ISerializationContext context, + int? chunkLength = null ) - => AsyncHelper.FluentAsync(stream, source, pool, chunkLength, cancellationToken, WriteStreamAsync); + => AsyncHelper.FluentAsync(stream, source, context, chunkLength, WriteStreamAsync); /// /// Write a stream /// /// Stream /// Source stream - /// Array pool + /// Context /// Chunk length in bytes - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -138,32 +132,29 @@ public static Task WriteStreamAsync( public static Task WriteStreamNullableAsync( this Stream stream, Stream? source, - ArrayPool? pool = null, - int? chunkLength = null, - CancellationToken cancellationToken = default + ISerializationContext context, + int? chunkLength = null ) => source == null - ? WriteNumberAsync(stream, long.MinValue, cancellationToken) - : WriteStreamAsync(stream, source, pool, chunkLength, cancellationToken); + ? WriteNumberAsync(stream, long.MinValue, context) + : WriteStreamAsync(stream, source, context, chunkLength); /// /// Write a stream /// /// Stream /// Source stream - /// Array pool + /// Context /// Chunk length in bytes - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStreamNullableAsync( this Task stream, Stream? source, - ArrayPool? pool = null, - int? chunkLength = null, - CancellationToken cancellationToken = default + ISerializationContext context, + int? chunkLength = null ) - => AsyncHelper.FluentAsync(stream, source, pool, chunkLength, cancellationToken, WriteStreamNullableAsync); + => AsyncHelper.FluentAsync(stream, source, context, chunkLength, WriteStreamNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index dbc035f..98d1d5c 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -13,191 +13,209 @@ public static partial class StreamExtensions /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteString(this Stream stream, string value) - => WriteString(stream, value, lenShift: 2, (buffer) => value.GetBytes(buffer)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteString(this Stream stream, string value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteString(context, value, lenShift: 2, (buffer) => value.GetBytes(buffer)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) - => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes(buffer), cancellationToken); + public static Task WriteStringAsync(this Stream stream, string value, ISerializationContext context) + => WriteStringAsync(context, value, lenShift: 2, (buffer) => value.GetBytes(buffer)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteStringAsync(this Task stream, string value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteStringAsync); + public static Task WriteStringAsync(this Task stream, string value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteStringAsync); /// /// Write /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteStringNullable(this Stream stream, string? value) - => WriteNullableString(stream, value, lenShift: 2, (buffer) => value!.GetBytes(buffer)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteStringNullable(this Stream stream, string? value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNullableString(context, value, lenShift: 2, (buffer) => value!.GetBytes(buffer)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteStringNullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes(buffer), cancellationToken); + public static Task WriteStringNullableAsync(this Stream stream, string? value, ISerializationContext context) + => WriteNullableStringAsync(context, value, lenShift: 2, (buffer) => value!.GetBytes(buffer)); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteStringNullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteStringNullableAsync); + public static Task WriteStringNullableAsync(this Task stream, string? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteStringNullableAsync); /// /// Write UTF-16 (little endian) string /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteString16(this Stream stream, string value) - => WriteString(stream, value, lenShift: 1, (buffer) => value.GetBytes16(buffer)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteString16(this Stream stream, string value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteString(context, value, lenShift: 1, (buffer) => value.GetBytes16(buffer)); /// /// Write UTF-16 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) - => WriteStringAsync(stream, value, lenShift: 1, (buffer) => value.GetBytes16(buffer), cancellationToken); + public static Task WriteString16Async(this Stream stream, string value, ISerializationContext context) + => WriteStringAsync(context, value, lenShift: 1, (buffer) => value.GetBytes16(buffer)); /// /// Write UTF-16 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteString16Async(this Task stream, string value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString16Async); + public static Task WriteString16Async(this Task stream, string value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteString16Async); /// /// Write UTF-16 (little endian) string /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteString16Nullable(this Stream stream, string? value) - => WriteNullableString(stream, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteString16Nullable(this Stream stream, string? value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNullableString(context, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer)); /// /// Write UTF-16 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteString16NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - => WriteNullableStringAsync(stream, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer), cancellationToken); + public static Task WriteString16NullableAsync(this Stream stream, string? value, ISerializationContext context) + => WriteNullableStringAsync(context, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer)); /// /// Write UTF-16 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteString16NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString16NullableAsync); + public static Task WriteString16NullableAsync(this Task stream, string? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteString16NullableAsync); /// /// Write UTF-32 (little endian) string /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteString32(this Stream stream, string value) - => WriteString(stream, value, lenShift: 2, (buffer) => value.GetBytes32(buffer)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteString32(this Stream stream, string value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteString(context, value, lenShift: 2, (buffer) => value.GetBytes32(buffer)); /// /// Write UTF-32 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) - => WriteStringAsync(stream, value, lenShift: 2, (buffer) => value.GetBytes32(buffer), cancellationToken); + public static Task WriteString32Async(this Stream stream, string value, ISerializationContext context) + => WriteStringAsync(context, value, lenShift: 2, (buffer) => value.GetBytes32(buffer)); /// /// Write UTF-32 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteString32Async(this Task stream, string value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString32Async); + public static Task WriteString32Async(this Task stream, string value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteString32Async); /// /// Write UTF-32 (little endian) string /// /// Stream /// Value to write + /// Context /// Stream - public static Stream WriteString32Nullable(this Stream stream, string? value) - => WriteNullableString(stream, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer)); +#pragma warning disable IDE0060 // Remove unused argument + public static Stream WriteString32Nullable(this Stream stream, string? value, ISerializationContext context) +#pragma warning restore IDE0060 // Remove unused argument + => WriteNullableString(context, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer)); /// /// Write UTF-32 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream - public static Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) - => WriteNullableStringAsync(stream, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer), cancellationToken); + public static Task WriteString32NullableAsync(this Stream stream, string? value, ISerializationContext context) + => WriteNullableStringAsync(context, value, lenShift: 2, (buffer) => value!.GetBytes32(buffer)); /// /// Write UTF-32 (little endian) string /// /// Stream /// Value to write - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteString32NullableAsync(this Task stream, string? value, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, cancellationToken, WriteString32NullableAsync); + public static Task WriteString32NullableAsync(this Task stream, string? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteString32NullableAsync); /// /// Write a string /// - /// Stream + /// Context /// Value /// Buffer length bit-shifting value /// Writing action to execute @@ -205,61 +223,71 @@ public static Task WriteString32NullableAsync(this Task stream, #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Stream WriteString(Stream stream, string value, int lenShift, Func action) + [SkipLocalsInit] + private static Stream WriteString(ISerializationContext context, string value, int lenShift, StringWriter_Delegate action) { if (value.Length == 0) { - Write(stream, (byte)NumberTypes.Zero); - return stream; + Write(context.Stream, (byte)NumberTypes.Zero, context); + return context.Stream; } - byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); - try + int len = value.Length << lenShift; + if (len <= Settings.StackAllocBorder) { - int len = action(data); - WriteNumber(stream, len); - return WriteSerializedData(stream, data, len); + Span buffer = stackalloc byte[len]; + context.Stream.Write(buffer[..action(buffer)]); + return context.Stream; } - catch + else { - StreamSerializer.BufferPool.Return(data); - throw; + byte[] data = StreamSerializer.BufferPool.Rent(len); + try + { + len = action(data); + WriteNumber(context.Stream, len, context); + return WriteSerializedData(context, data, len); + } + catch + { + StreamSerializer.BufferPool.Return(data); + throw; + } } } /// /// Write a string /// - /// Stream + /// Context /// Value /// Buffer length bit-shifting value /// Writing action to execut - /// Cancellation token /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task WriteStringAsync(Stream stream, string value, int lenShift, Func action, CancellationToken cancellationToken) + private static async Task WriteStringAsync(ISerializationContext context, string value, int lenShift, StringWriter_Delegate action) { - if (value.Length == 0) return await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); + if (value.Length == 0) return await WriteAsync(context.Stream, (byte)NumberTypes.Zero, context).DynamicContext(); byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); try { int len = action(data); - await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); - await WriteSerializedDataAsync(stream, data, len, cancellationToken: cancellationToken).DynamicContext(); + await WriteNumberAsync(context.Stream, len, context).DynamicContext(); + await WriteSerializedDataAsync(context, data, len).DynamicContext(); } catch { StreamSerializer.BufferPool.Return(data); throw; } - return stream; + return context.Stream; } /// /// Write a nullable string /// - /// Stream + /// Context /// Value /// Buffer length bit-shifting value /// Writing action to execute if the string isn't @@ -267,61 +295,77 @@ private static async Task WriteStringAsync(Stream stream, string value, #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static Stream WriteNullableString(Stream stream, string? value, int lenShift, Func action) + [SkipLocalsInit] + private static Stream WriteNullableString(ISerializationContext context, string? value, int lenShift, StringWriter_Delegate action) { if (value == null) { - Write(stream, (byte)NumberTypes.Null); - return stream; + Write(context.Stream, (byte)NumberTypes.IsNull, context); + return context.Stream; } if (value.Length == 0) { - Write(stream, (byte)NumberTypes.Zero); - return stream; + Write(context.Stream, (byte)NumberTypes.Zero, context); + return context.Stream; } - byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); - try + int len = value.Length << lenShift; + if (len <= Settings.StackAllocBorder) { - int len = action(data); - WriteNumber(stream, len); - return WriteSerializedData(stream, data, action(data), StreamSerializer.BufferPool); + Span buffer = stackalloc byte[len]; + context.Stream.Write(buffer[..action(buffer)]); + return context.Stream; } - catch + else { - StreamSerializer.BufferPool.Return(data); - throw; + byte[] data = StreamSerializer.BufferPool.Rent(len); + try + { + WriteNumber(context.Stream, len, context); + return WriteSerializedData(context, data, action(data)); + } + catch + { + StreamSerializer.BufferPool.Return(data); + throw; + } } } /// /// Write a nullable string /// - /// Stream + /// Context /// Value /// Buffer length bit-shifting value /// Writing action to execute if the string isn't - /// Cancellation token /// Stream #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - private static async Task WriteNullableStringAsync(Stream stream, string? value, int lenShift, Func action, CancellationToken cancellationToken) + private static async Task WriteNullableStringAsync(ISerializationContext context, string? value, int lenShift, StringWriter_Delegate action) { - if (value == null) return await WriteAsync(stream, (byte)NumberTypes.Null, cancellationToken).DynamicContext(); - if (value.Length == 0) return await WriteAsync(stream, (byte)NumberTypes.Zero, cancellationToken).DynamicContext(); + if (value == null) return await WriteAsync(context.Stream, (byte)NumberTypes.IsNull, context).DynamicContext(); + if (value.Length == 0) return await WriteAsync(context.Stream, (byte)NumberTypes.Zero, context).DynamicContext(); byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); try { int len = action(data); - await WriteNumberAsync(stream, len, cancellationToken).DynamicContext(); - await WriteSerializedDataAsync(stream, data, action(data), StreamSerializer.BufferPool, cancellationToken).DynamicContext(); + await WriteNumberAsync(context.Stream, len, context).DynamicContext(); + await WriteSerializedDataAsync(context, data, len).DynamicContext(); } catch { StreamSerializer.BufferPool.Return(data); throw; } - return stream; + return context.Stream; } + + /// + /// Delegate for a string writer + /// + /// Buffer + /// Number of used bytes + private delegate int StringWriter_Delegate(Span buffer); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs index 4ce31af..91390aa 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Struct.cs @@ -14,18 +14,19 @@ public static partial class StreamExtensions /// /// Stream /// Struct + /// Context /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteStruct(this Stream stream, object value, bool forceLittleEndian = true) + public static Stream WriteStruct(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true) => SerializerException.Wrap(() => { Type structType = value.GetType(); ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); - using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try { @@ -37,7 +38,7 @@ public static Stream WriteStruct(this Stream stream, object value, bool forceLit } if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) ConvertStructureEndianess(structType, buffer.Memory, attr); - return WriteBytes(stream, buffer.Span); + return WriteBytes(stream, buffer.Span, context); }); /// @@ -46,18 +47,19 @@ public static Stream WriteStruct(this Stream stream, object value, bool forceLit /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteStruct(this Stream stream, T value, bool forceLittleEndian = true) where T : struct + public static Stream WriteStruct(this Stream stream, T value, ISerializationContext context, bool forceLittleEndian = true) where T : struct => SerializerException.Wrap(() => { Type structType = typeof(T); ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); - using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try { @@ -69,7 +71,7 @@ public static Stream WriteStruct(this Stream stream, T value, bool forceLittl } if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) ConvertStructureEndianess(structType, buffer.Memory, attr); - return WriteBytes(stream, buffer.Span); + return WriteBytes(stream, buffer.Span, context); }); /// @@ -77,14 +79,15 @@ public static Stream WriteStruct(this Stream stream, T value, bool forceLittl /// /// Stream /// Struct + /// Context /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteStructNullable(this Stream stream, object? value, bool forceLittleEndian = true) - => WriteIfNotNull(stream, value, () => WriteStruct(stream, value!, forceLittleEndian)); + public static Stream WriteStructNullable(this Stream stream, object? value, ISerializationContext context, bool forceLittleEndian = true) + => WriteIfNotNull(stream, value, () => WriteStruct(stream, value!, context, forceLittleEndian), context); /// /// Write a struct @@ -92,33 +95,34 @@ public static Stream WriteStructNullable(this Stream stream, object? value, bool /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteStructNullable(this Stream stream, T? value, bool forceLittleEndian = true) where T : struct - => WriteIfNotNull(stream, value, () => WriteStruct(stream, value!.Value, forceLittleEndian)); + public static Stream WriteStructNullable(this Stream stream, T? value, ISerializationContext context, bool forceLittleEndian = true) where T : struct + => WriteIfNotNull(stream, value, () => WriteStruct(stream, value!.Value, context, forceLittleEndian), context); /// /// Write a struct /// /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteStructAsync(this Stream stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) + public static Task WriteStructAsync(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true) => SerializerException.WrapAsync(() => { Type structType = value.GetType(); ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); - using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try { @@ -130,7 +134,7 @@ public static Task WriteStructAsync(this Stream stream, object value, bo } if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) ConvertStructureEndianess(structType, buffer.Memory, attr); - return WriteBytesAsync(stream, buffer.Memory, cancellationToken); + return WriteBytesAsync(stream, buffer.Memory, context); }); /// @@ -138,13 +142,13 @@ public static Task WriteStructAsync(this Stream stream, object value, bo /// /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteStructAsync(this Task stream, object value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructAsync); + public static Task WriteStructAsync(this Task stream, object value, ISerializationContext context, bool forceLittleEndian = true) + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructAsync); /// /// Write a struct @@ -152,19 +156,19 @@ public static Task WriteStructAsync(this Task stream, object val /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Task WriteStructAsync(this Stream stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) where T : struct + public static Task WriteStructAsync(this Stream stream, T value, ISerializationContext context, bool forceLittleEndian = true) where T : struct => SerializerException.WrapAsync(() => { Type structType = typeof(T); ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); - using RentedArray buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); + using RentedArrayStruct buffer = new(Marshal.SizeOf(value), StreamSerializer.BufferPool, clean: false); GCHandle gch = GCHandle.Alloc(buffer.Array, GCHandleType.Pinned); try { @@ -176,7 +180,7 @@ public static Task WriteStructAsync(this Stream stream, T value, bool } if (forceLittleEndian && !BitConverter.IsLittleEndian && structType.GetCustomAttributeCached() is StreamSerializerAttribute attr) ConvertStructureEndianess(structType, buffer.Memory, attr); - return WriteBytesAsync(stream, buffer.Memory, cancellationToken); + return WriteBytesAsync(stream, buffer.Memory, context); }); /// @@ -185,22 +189,22 @@ public static Task WriteStructAsync(this Stream stream, T value, bool /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteStructAsync(this Task stream, T value, bool forceLittleEndian = true, CancellationToken cancellationToken = default) + public static Task WriteStructAsync(this Task stream, T value, ISerializationContext context, bool forceLittleEndian = true) where T : struct - => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructAsync); + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructAsync); /// /// Write a struct /// /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -209,28 +213,28 @@ public static Task WriteStructAsync(this Task stream, T value public static Task WriteStructNullableAsync( this Stream stream, object? value, - bool forceLittleEndian = true, - CancellationToken cancellationToken = default + ISerializationContext context, + bool forceLittleEndian = true ) - => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!, forceLittleEndian, cancellationToken), cancellationToken); + => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!, context, forceLittleEndian), context); /// /// Write a struct /// /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructNullableAsync( this Task stream, object? value, - bool forceLittleEndian = true, - CancellationToken cancellationToken = default + ISerializationContext context, + bool forceLittleEndian = true ) - => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructNullableAsync); + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructNullableAsync); /// /// Write a struct @@ -238,8 +242,8 @@ public static Task WriteStructNullableAsync( /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE @@ -248,11 +252,11 @@ public static Task WriteStructNullableAsync( public static Task WriteStructNullableAsync( this Stream stream, T? value, - bool forceLittleEndian = true, - CancellationToken cancellationToken = default + ISerializationContext context, + bool forceLittleEndian = true ) where T : struct - => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!.Value, forceLittleEndian, cancellationToken), cancellationToken); + => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!.Value, context, forceLittleEndian), context); /// /// Write a struct @@ -260,19 +264,19 @@ public static Task WriteStructNullableAsync( /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task WriteStructNullableAsync( this Task stream, T? value, - bool forceLittleEndian = true, - CancellationToken cancellationToken = default + ISerializationContext context, + bool forceLittleEndian = true ) where T : struct - => AsyncHelper.FluentAsync(stream, value, forceLittleEndian, cancellationToken, WriteStructNullableAsync); + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructNullableAsync); /// /// Convert the endianess of structure fields diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs index cee47e4..887a344 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs @@ -12,66 +12,72 @@ public static partial class StreamExtensions /// /// Stream /// Type + /// Context /// Stream - public static Stream Write(this Stream stream, Type type) => WriteSerialized(stream, SerializedTypeInfo.From(type)); + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream Write(this Stream stream, Type type, ISerializationContext context) => WriteSerialized(stream, SerializedTypeInfo.From(type), context); /// /// Write /// /// Stream /// Type - /// Cancellation token + /// Context /// Stream - public static Task WriteAsync(this Stream stream, Type type, CancellationToken cancellationToken = default) - => WriteSerializedAsync(stream, SerializedTypeInfo.From(type), cancellationToken); + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Stream stream, Type type, ISerializationContext context) + => WriteSerializedAsync(stream, SerializedTypeInfo.From(type), context); /// /// Write /// /// Stream /// Type - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteAsync(this Task stream, Type type, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, type, cancellationToken, WriteAsync); + public static Task WriteAsync(this Task stream, Type type, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, type, context, WriteAsync); /// /// Write /// /// Stream /// Type + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Stream WriteNullable(this Stream stream, Type? type) - => type == null ? WriteNumberNullable(stream, (int?)null) : Write(stream, type); + public static Stream WriteNullable(this Stream stream, Type? type, ISerializationContext context) + => type == null ? Write(stream, (byte)0, context) : Write(stream, type, context); /// /// Write /// /// Stream /// Type - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Stream stream, Type? type, CancellationToken cancellationToken = default) + public static Task WriteNullableAsync(this Stream stream, Type? type, ISerializationContext context) => type == null - ? WriteNumberNullableAsync(stream, (int?)null, cancellationToken) - : WriteAsync(stream, type, cancellationToken); + ? WriteAsync(stream, (byte)0, context) + : WriteAsync(stream, type, context); /// /// Write /// /// Stream /// Type - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteNullableAsync(this Task stream, Type? type, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, type, cancellationToken, WriteNullableAsync); + public static Task WriteNullableAsync(this Task stream, Type? type, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, type, context, WriteNullableAsync); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index 49243a1..e905a94 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -1,5 +1,4 @@ -using System.Buffers; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Runtime; using System.Runtime.CompilerServices; @@ -33,22 +32,23 @@ static StreamExtensions() /// Write the serializer version /// /// Stream + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerializerVersion(this Stream stream) + public static Stream WriteSerializerVersion(this Stream stream, ISerializationContext context) { (object n, NumberTypes nt) = StreamSerializer.Version.GetNumberAndType(); - Write(stream, (byte)nt); + Write(stream, (byte)nt, context); switch (n) { - case sbyte sb: Write(stream, sb); break; - case byte b: Write(stream, b); break; - case short s: Write(stream, s); break; - case ushort us: Write(stream, us); break; - case int i: Write(stream, i); break; + case sbyte sb: Write(stream, sb, context); break; + case byte b: Write(stream, b, context); break; + case short s: Write(stream, s, context); break; + case ushort us: Write(stream, us, context); break; + case int i: Write(stream, i, context); break; default: throw new SerializerException($"Invalid numeric type {nt} for serializer version {StreamSerializer.Version}"); } return stream; @@ -58,23 +58,23 @@ public static Stream WriteSerializerVersion(this Stream stream) /// Write the serializer version /// /// Stream - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) + public static async Task WriteSerializerVersionAsync(this Stream stream, ISerializationContext context) { (object n, NumberTypes nt) = StreamSerializer.Version.GetNumberAndType(); - await WriteAsync(stream, (byte)nt, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)nt, context).DynamicContext(); switch (n) { - case sbyte sb: await WriteAsync(stream, sb, cancellationToken).DynamicContext(); break; - case byte b: await WriteAsync(stream, b, cancellationToken).DynamicContext(); break; - case short s: await WriteAsync(stream, s, cancellationToken).DynamicContext(); break; - case ushort us: await WriteAsync(stream, us, cancellationToken).DynamicContext(); break; - case int i: await WriteAsync(stream, i, cancellationToken).DynamicContext(); break; + case sbyte sb: await WriteAsync(stream, sb, context).DynamicContext(); break; + case byte b: await WriteAsync(stream, b, context).DynamicContext(); break; + case short s: await WriteAsync(stream, s, context).DynamicContext(); break; + case ushort us: await WriteAsync(stream, us, context).DynamicContext(); break; + case int i: await WriteAsync(stream, i, context).DynamicContext(); break; default: throw new SerializerException($"Invalid numeric type {nt} for serializer version {StreamSerializer.Version}"); } return stream; @@ -84,12 +84,12 @@ public static async Task WriteSerializerVersionAsync(this Stream stream, /// Write the serializer version /// /// Stream - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteSerializerVersionAsync(this Task stream, CancellationToken cancellationToken = default) - => AsyncHelper.FluentAsync(stream, cancellationToken, WriteSerializerVersionAsync); + public static Task WriteSerializerVersionAsync(this Task stream, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, context, WriteSerializerVersionAsync); /// /// Write a boolean flag if an object is not @@ -97,15 +97,16 @@ public static Task WriteSerializerVersionAsync(this Task stream, /// Object type /// Stream /// Object + /// Context /// Is not ? [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static bool WriteIfNotNull(this Stream stream, [NotNullWhen(true)] T? obj) + public static bool WriteIfNotNull(this Stream stream, [NotNullWhen(true)] T? obj, ISerializationContext context) { bool isNotNull = obj != null; - Write(stream, isNotNull); + Write(stream, isNotNull, context); return isNotNull; } @@ -115,51 +116,50 @@ public static bool WriteIfNotNull(this Stream stream, [NotNullWhen(true)] T? /// Object type /// Stream /// Object - /// Cancellation token + /// Context /// Is not ? [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteIfNotNullAsync(this Stream stream, [NotNullWhen(true)] T? obj, CancellationToken cancellationToken = default) + public static async Task WriteIfNotNullAsync(this Stream stream, [NotNullWhen(true)] T? obj, ISerializationContext context) { //TODO NotNullWhen seems not to work with a task result https://github.com/dotnet/roslyn/issues/45228 bool isNotNull = obj != null; - await WriteAsync(stream, isNotNull, cancellationToken).DynamicContext(); + await WriteAsync(stream, isNotNull, context).DynamicContext(); return isNotNull; } /// /// Write a nullable count /// - /// Stream + /// Context /// Count /// Is not ? [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static bool WriteNullableCount(this Stream stream, [NotNullWhen(true)] long? count) + public static bool WriteNullableCount(this ISerializationContext context, [NotNullWhen(true)] long? count) { - WriteNumberNullable(stream, count); + WriteNumberNullable(context.Stream, count, context); return count != null; } /// /// Write a nullable count /// - /// Stream + /// Context /// Count - /// Cancellation token /// Is not ? [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteNullableCountAsync(this Stream stream, [NotNullWhen(true)] long? count, CancellationToken cancellationToken = default) + public static async Task WriteNullableCountAsync(this ISerializationContext context, [NotNullWhen(true)] long? count) { //TODO NotNullWhen seems not to work with a task result https://github.com/dotnet/roslyn/issues/45228 - await WriteNumberNullableAsync(stream, count, cancellationToken).DynamicContext(); + await WriteNumberNullableAsync(context.Stream, count, context).DynamicContext(); return count != null; } @@ -170,14 +170,15 @@ public static async Task WriteNullableCountAsync(this Stream stream, [NotN /// Stream /// Object /// Write action to execute, if the object isn't + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteIfNotNull(this Stream stream, T? obj, Action action) + public static Stream WriteIfNotNull(this Stream stream, T? obj, NullableWriter_Delegate action, ISerializationContext context) { - if (WriteIfNotNull(stream, obj)) action(); + if (WriteIfNotNull(stream, obj, context)) action(); return stream; } @@ -188,15 +189,15 @@ public static Stream WriteIfNotNull(this Stream stream, T? obj, Action action /// Stream /// Object /// Write action to execute, if the object isn't - /// Cancellation token + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteIfNotNullAsync(this Stream stream, T? obj, Func action, CancellationToken cancellationToken = default) + public static async Task WriteIfNotNullAsync(this Stream stream, T? obj, AsyncNullableWriter_Delegate action, ISerializationContext context) { - if (await WriteIfNotNullAsync(stream, obj, cancellationToken).DynamicContext()) + if (await WriteIfNotNullAsync(stream, obj, context).DynamicContext()) await action().DynamicContext(); return stream; } @@ -204,7 +205,7 @@ public static async Task WriteIfNotNullAsync(this Stream stream, T? o /// /// Write a nullable count /// - /// Stream + /// Context /// Count /// Write action to execute, if the count isn't /// Stream @@ -212,88 +213,112 @@ public static async Task WriteIfNotNullAsync(this Stream stream, T? o #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteNullableCount(this Stream stream, long? count, Action action) + public static Stream WriteNullableCount(this ISerializationContext context, long? count, NullableWriter_Delegate action) { - if (WriteNullableCount(stream, count)) action(); - return stream; + if (WriteNullableCount(context, count)) action(); + return context.Stream; } /// /// Write a nullable count /// - /// Stream + /// Context /// Count /// Write action to execute, if the count isn't - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteNullableCountAsync(this Stream stream, long? count, Func action, CancellationToken cancellationToken = default) + public static async Task WriteNullableCountAsync(this ISerializationContext context, long? count, AsyncNullableWriter_Delegate action) { - if (await WriteNullableCountAsync(stream, count, cancellationToken).DynamicContext()) + if (await WriteNullableCountAsync(context, count).DynamicContext()) await action().DynamicContext(); - return stream; + return context.Stream; } /// /// Write serialized Data /// - /// Stream + /// Context /// Serialized data (will be returned to pool) /// Data length in bytes - /// Array pool (data will returned to that pool) /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteSerializedData(this Stream stream, byte[] data, int len, ArrayPool? pool = null) + public static Stream WriteSerializedData(this ISerializationContext context, byte[] data, int len) => SerializerException.Wrap(() => { try { - stream.Write(data.AsSpan(0, len)); + context.Stream.Write(data.AsSpan(0, len)); + return context.Stream; } finally { - (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + StreamSerializer.BufferPool.Return(data); } - return stream; }); /// /// Write serialized Data /// - /// Stream + /// Context + /// Serialized data (will be returned to pool) + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerializedData(this ISerializationContext context, Memory data) + => SerializerException.Wrap(() => + { + context.Stream.Write(data.Span); + return context.Stream; + }); + + /// + /// Write serialized Data + /// + /// Context /// Serialized data (will be returned to pool) /// Data length in bytes - /// Array pool (data will returned to that pool) - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static async Task WriteSerializedDataAsync( - this Stream stream, - byte[] data, - int len, - ArrayPool? pool = null, - CancellationToken cancellationToken = default - ) + public static async Task WriteSerializedDataAsync(this ISerializationContext context, byte[] data, int len) => await SerializerException.WrapAsync(async () => { try { - await stream.WriteAsync(data.AsMemory(0, len), cancellationToken).DynamicContext(); + await context.Stream.WriteAsync(data.AsMemory(0, len), context.Cancellation).DynamicContext(); + return context.Stream; } finally { - (pool ?? StreamSerializer.BufferPool).Return(data, clearArray: false); + StreamSerializer.BufferPool.Return(data); } - return stream; + }); + + /// + /// Write serialized Data + /// + /// Context + /// Serialized data (will be returned to pool) + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteSerializedDataAsync(this ISerializationContext context, Memory data) + => await SerializerException.WrapAsync(async () => + { + await context.Stream.WriteAsync(data, context.Cancellation).DynamicContext(); + return context.Stream; }); /// @@ -307,7 +332,7 @@ public static async Task WriteSerializedDataAsync( #if !NO_INLINE [MethodImpl(MethodImplOptions.AggressiveInlining)] #endif - public static Stream WriteIf(this Stream stream, bool condition, Func action) + public static Stream WriteIf(this Stream stream, bool condition, StreamNullableWiter_Delegate action) => condition ? action(stream) : stream; /// @@ -321,7 +346,7 @@ public static Stream WriteIf(this Stream stream, bool condition, Func WriteIfAsync(this Stream stream, bool condition, Func> action) + public static async Task WriteIfAsync(this Stream stream, bool condition, AsyncStreamNullableWiter_Delegate action) => condition ? await action(stream).DynamicContext() : stream; /// @@ -333,7 +358,31 @@ public static async Task WriteIfAsync(this Stream stream, bool condition /// Stream [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Task WriteIfAsync(this Task stream, bool condition, Func> action) + public static Task WriteIfAsync(this Task stream, bool condition, AsyncStreamNullableWiter_Delegate action) => AsyncHelper.FluentAsync(stream, async (s) => condition ? await action(s).DynamicContext() : s); + + /// + /// Delegate for a nullable writer + /// + public delegate void NullableWriter_Delegate(); + + /// + /// Delegate for a nullable writer + /// + public delegate Task AsyncNullableWriter_Delegate(); + + /// + /// Delegate for a nullable writer, which uses a stream + /// + /// Stream + /// Stream + public delegate Stream StreamNullableWiter_Delegate(Stream stream); + + /// + /// Delegate for a nullable writer, which uses a stream + /// + /// Stream + /// Stream + public delegate Task AsyncStreamNullableWiter_Delegate(Stream stream); } } diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.Serializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.Serializer.cs new file mode 100644 index 0000000..87b5a60 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamSerializer.Serializer.cs @@ -0,0 +1,330 @@ +using System.Collections; +using System.Collections.Concurrent; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Serializer + public static partial class StreamSerializer + { + /// + /// Version number + /// + public const int VERSION = 3; + + /// + /// Serializer + /// + public static readonly ConcurrentDictionary SyncSerializer; + /// + /// Serializer + /// + public static readonly ConcurrentDictionary AsyncSerializer; + /// + /// Deserializer + /// + public static readonly ConcurrentDictionary SyncDeserializer; + /// + /// Deserializer + /// + public static readonly ConcurrentDictionary AsyncDeserializer; + + /// + /// Constructor + /// + static StreamSerializer() + { + SyncSerializer = new( + new KeyValuePair[] + { + new(typeof(bool),(c, v) => c.Stream.Write((bool)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(sbyte),(c, v) => c.Stream.Write((sbyte)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(byte),(c, v) => c.Stream.Write((byte)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(short),(c, v) => c.Stream.Write((int)(short)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(ushort),(c, v) => c.Stream.Write((ushort)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(int),(c, v) => c.Stream.Write((int)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(uint),(c, v) => c.Stream.Write((uint)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(long),(c, v) => c.Stream.Write((long)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(ulong),(c, v) => c.Stream.Write((ulong)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(float),(c, v) => c.Stream.Write((float)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(double),(c, v) => c.Stream.Write((double)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(decimal),(c, v) => c.Stream.Write((decimal)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(byte[]),(c, v) => c.Stream.WriteBytes((byte[])SerializerHelper.EnsureNotNull(v),c)), + new(typeof(string),(c, v) => c.Stream.WriteString((string)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(Array),(c, v) => c.Stream.WriteArray((Array)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(IList),(c, v) => c.Stream.WriteList((IList)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(IDictionary),(c, v) => c.Stream.WriteDict((IDictionary)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(Enum),(c, v) => c.Stream.WriteEnum((Enum)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(Stream),(c, v) => c.Stream.WriteStream((Stream)SerializerHelper.EnsureNotNull(v),c)), + new(typeof(Type),(c, v) => c.Stream.Write((Type)SerializerHelper.EnsureNotNull(v),c)) + } + ); + AsyncSerializer = new( + new KeyValuePair[] + { + new(typeof(bool),(c, v) => c.Stream.WriteAsync((bool)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(sbyte),(c, v) => c.Stream.WriteAsync((sbyte)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(byte),(c, v) => c.Stream.WriteAsync((byte)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(short),(c, v) => c.Stream.WriteAsync((short)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(ushort),(c, v) => c.Stream.WriteAsync((ushort)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(int),(c, v) => c.Stream.WriteAsync((int)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(uint),(c, v) => c.Stream.WriteAsync((uint)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(long),(c, v) => c.Stream.WriteAsync((long)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(ulong),(c, v) => c.Stream.WriteAsync((ulong)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(float),(c, v) => c.Stream.WriteAsync((float)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(double),(c, v) => c.Stream.WriteAsync((double)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(decimal),(c, v) => c.Stream.WriteAsync((decimal)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(byte[]),(c, v) => c.Stream.WriteBytesAsync((byte[])SerializerHelper.EnsureNotNull(v), c)), + new(typeof(string),(c, v) => c.Stream.WriteStringAsync((string)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(Array),(c, v) => c.Stream.WriteArrayAsync((Array)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(IList),(c, v) => c.Stream.WriteListAsync((IList)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(IDictionary),(c, v) => c.Stream.WriteDictAsync((IDictionary)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(Enum),(c, v) => c.Stream.WriteEnumAsync((Enum)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(Stream),(c, v) => c.Stream.WriteStreamAsync((Stream)SerializerHelper.EnsureNotNull(v), c)), + new(typeof(Type),(c, v) => c.Stream.WriteAsync((Type)SerializerHelper.EnsureNotNull(v), c)) + } + ); + SyncDeserializer = new(new KeyValuePair[] + { + new(typeof(bool),(c,t) => c.Stream.ReadBool(c)), + new(typeof(sbyte),(c,t) => c.Stream.ReadOneSByte(c)), + new(typeof(byte),(c,t) => c.Stream.ReadOneByte(c)), + new(typeof(short),(c,t) => c.Stream.ReadShort(c)), + new(typeof(ushort),(c,t) => c.Stream.ReadUShort(c)), + new(typeof(int),(c,t) => c.Stream.ReadInt(c)), + new(typeof(uint),(c,t) => c.Stream.ReadUInt(c)), + new(typeof(long),(c,t) => c.Stream.ReadLong(c)), + new(typeof(ulong),(c,t) => c.Stream.ReadULong(c)), + new(typeof(float),(c,t) => c.Stream.ReadFloat(c)), + new(typeof(double),(c,t) => c.Stream.ReadDouble(c)), + new(typeof(decimal),(c,t) => c.Stream.ReadDecimal(c)), + new(typeof(byte[]),(c,t) => + c.Stream.ReadBytes(c, minLen: c.Options?.GetMinLen(0)??0, maxLen: c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue) + ), + new(typeof(string),(c,t) => + c.Stream.ReadString(c, minLen: c.Options?.GetMinLen(0)??0, maxLen: c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue) + ), + new(typeof(Array),(c,t) => + c.Stream.ReadArray( + t, + c, + c.Options?.GetMinLen(0)??0, + c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue + ) + ), + new(typeof(IList),(c,t) => + c.Stream.ReadList( + t, + c, + c.Options?.GetMinLen(0)??0, + c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue + ) + ), + new(typeof(IDictionary),(c,t) => + c.Stream.ReadDict( + t, + c, + c.Options?.GetMinLen(0)??0, + c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue + ) + ), + new(typeof(Enum),(c,t) => c.Stream.ReadEnum(t,c)), + new(typeof(Stream),(c,t) => + { + Stream res = c.Options?.Attribute.GetStream(obj:null,property:null,c) ?? new PooledTempStream(); + try + { + return c.Stream.ReadStream(res,c,minLen:c.Options?.GetMinLen(0L)??0, maxLen:c.Options?.GetMaxLen(long.MaxValue)??long.MaxValue); + } + catch + { + res.Dispose(); + throw; + } + }), + new(typeof(Type),(c,t) => c.Stream.ReadType(c)) + }); + AsyncDeserializer = new(new KeyValuePair[] + { + new(typeof(bool),(c,t) => c.Stream.ReadBoolAsync(c)), + new(typeof(sbyte),(c,t) => c.Stream.ReadOneSByteAsync(c)), + new(typeof(byte),(c,t) => c.Stream.ReadOneByteAsync(c)), + new(typeof(short),(c,t) => c.Stream.ReadShortAsync(c)), + new(typeof(ushort),(c,t) => c.Stream.ReadUShortAsync(c)), + new(typeof(int),(c,t) => c.Stream.ReadIntAsync(c)), + new(typeof(uint),(c,t) => c.Stream.ReadUIntAsync(c)), + new(typeof(long),(c,t) => c.Stream.ReadLongAsync(c)), + new(typeof(ulong),(c,t) => c.Stream.ReadULongAsync(c)), + new(typeof(float),(c,t) => c.Stream.ReadFloatAsync(c)), + new(typeof(double),(c,t) => c.Stream.ReadDoubleAsync(c)), + new(typeof(decimal),(c,t) => c.Stream.ReadDecimalAsync(c)), + new(typeof(byte[]),(c,t) => + c.Stream.ReadBytesAsync(c, minLen: c.Options?.GetMinLen(0)??0, maxLen: c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue) + ), + new(typeof(string),(c,t) => + c.Stream.ReadStringAsync(c, minLen: c.Options?.GetMinLen(0)??0, maxLen: c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue) + ), + new(typeof(Array),(c,t) => + c.Stream.ReadArrayAsync( + t, + c, + c.Options?.GetMinLen(0)??0, + c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue + ) + ), + new(typeof(IList),(c,t) => + c.Stream.ReadListAsync( + t, + c, + c.Options?.GetMinLen(0)??0, + c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue + ) + ), + new(typeof(IDictionary),(c,t) => + c.Stream.ReadDictAsync( + t, + c, + c.Options?.GetMinLen(0)??0, + c.Options?.GetMaxLen(int.MaxValue)??int.MaxValue + ) + ), + new(typeof(Enum),(c,t) => c.Stream.ReadEnumAsync(t,c)), + new(typeof(Stream),(c,t) => + { + Stream res = c.Options?.Attribute.GetStream(obj:null,property:null,c) ?? new PooledTempStream(); + try + { + return c.Stream.ReadStreamAsync(res,c,minLen:c.Options?.GetMinLen(0L)??0, maxLen:c.Options?.GetMaxLen(long.MaxValue)??long.MaxValue); + } + catch + { + res.Dispose();//TODO Should be DisposeAsync + throw; + } + }), + new(typeof(Type),(c,t) => c.Stream.ReadTypeAsync(c)) + }); + AllowedTypes = new(new Type[] + { + typeof(bool), + typeof(sbyte), + typeof(byte), + typeof(short), + typeof(ushort), + typeof(int), + typeof(uint), + typeof(long), + typeof(ulong), + typeof(float), + typeof(double), + typeof(decimal), + typeof(string), + typeof(IDictionary), + typeof(IList), + typeof(Stream), + typeof(Type) + }); + } + + /// + /// Version number (the first 8 bits are used internal, while other bits can be used for customization) + /// + public static int Version { get; set; } = VERSION; + + /// + /// Find a serializer + /// + /// Type + /// Serializer + public static Serializer_Delegate? FindSerializer(Type type) + { + Type? serializer = FindDelegateType(type, SyncSerializer.Keys); + if (serializer == null || !SyncSerializer.TryGetValue(serializer, out Serializer_Delegate? res)) + { + SerializerEventArgs e = new(type); + OnFindSyncSerializer?.Invoke(e); + res = e.Delegate; + } + return res; + } + + /// + /// Find a serializer + /// + /// Type + /// Serializer + public static AsyncSerializer_Delegate? FindAsyncSerializer(Type type) + { + Type? serializer = FindDelegateType(type, AsyncSerializer.Keys); + if (serializer == null || !AsyncSerializer.TryGetValue(serializer, out AsyncSerializer_Delegate? res)) + { + SerializerEventArgs e = new(type); + OnFindAsyncSerializer?.Invoke(e); + res = e.Delegate; + } + return res; + } + + /// + /// Find a deserializer + /// + /// Type + /// Deserializer + public static Deserializer_Delegate? FindDeserializer(Type type) + { + Type? serializer = FindDelegateType(type, SyncSerializer.Keys); + if (serializer == null || !SyncDeserializer.TryGetValue(serializer, out Deserializer_Delegate? res)) + { + SerializerEventArgs e = new(type); + OnFindSyncDeserializer?.Invoke(e); + res = e.Delegate; + } + return res; + } + + /// + /// Find a deserializer + /// + /// Type + /// Deserializer + public static AsyncDeserializer_Delegate? FindAsyncDeserializer(Type type) + { + Type? serializer = FindDelegateType(type, AsyncSerializer.Keys); + if (serializer == null || !AsyncDeserializer.TryGetValue(serializer, out AsyncDeserializer_Delegate? res)) + { + SerializerEventArgs e = new(type); + OnFindAsyncDeserializer?.Invoke(e); + res = e.Delegate; + } + return res; + } + + /// + /// Find a delegate type + /// + /// Type + /// Types + /// Delegate type + public static Type? FindDelegateType(Type type, IEnumerable types) + { + lock (SyncObject) + if (!Initialized) + { + Initialized = true; + OnInit?.Invoke(new()); + } + Type? res = types.FirstOrDefault(t => t == type); + if (res == null) + if (type.IsGenericType && !type.IsGenericTypeDefinition) + { + Type gtd = type.GetGenericTypeDefinition(); + res = types.FirstOrDefault(t => t.IsGenericType && (t.IsGenericTypeDefinition ? t : t.GetGenericTypeDefinition()) == gtd); + } + else if (type.IsArray) + res = types.FirstOrDefault(t => t == typeof(Array)); + else if (type.IsEnum) + res = types.FirstOrDefault(t => t == typeof(Enum)); + return res ?? types.FirstOrDefault(t => t.IsAssignableFrom(type)); + } + } +} diff --git a/src/Stream-Serializer-Extensions/StreamSerializer.cs b/src/Stream-Serializer-Extensions/StreamSerializer.cs index 6987f02..5b01b61 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -1,5 +1,4 @@ using System.Buffers; -using System.Collections; using System.Collections.Concurrent; using System.Reflection; using System.Runtime; @@ -7,20 +6,22 @@ using wan24.Core; //TODO Test type cache -//TODO Remove ArrayPool arguments from reading methods +//TODO Use SerializerContext +//TODO SerializerStream which manages a SerializerContext and adopts to extension methods to get rid of the SerializerContext parameter +//TODO Use ItemSerializerContext +//TODO ReadUntil for reading until any byte sequence +//TODO WriteAll/ReadAll for writing/reading a type sequence +//TODO WriteJson/ReadJson for writing/reading JSON encoded data +//TODO WriteAnonymous/ReadAnonymous for writing/reading anonymous objects (reading by interface or class) +//TODO CSV parsing namespace wan24.StreamSerializerExtensions { /// /// Serializer /// - public static class StreamSerializer + public static partial class StreamSerializer { - /// - /// Version number - /// - public const int VERSION = 3; - /// /// Initialized? /// @@ -31,22 +32,6 @@ public static class StreamSerializer /// public static readonly object SyncObject = new(); /// - /// Serializer - /// - public static readonly ConcurrentDictionary SyncSerializer; - /// - /// Serializer - /// - public static readonly ConcurrentDictionary AsyncSerializer; - /// - /// Deserializer - /// - public static readonly ConcurrentDictionary SyncDeserializer; - /// - /// Deserializer - /// - public static readonly ConcurrentDictionary AsyncDeserializer; - /// /// Allowed (non-array) types /// public static readonly ConcurrentBag AllowedTypes; @@ -55,344 +40,30 @@ public static class StreamSerializer /// public static readonly ConcurrentDictionary InstanceFactories = new(); - /// - /// Constructor - /// - static StreamSerializer() - { - SyncSerializer = new( - new KeyValuePair[] - { - new(typeof(bool),(s, v) => s.Write((bool)SerializerHelper.EnsureNotNull(v))), - new(typeof(sbyte),(s, v) => s.Write((sbyte)SerializerHelper.EnsureNotNull(v))), - new(typeof(byte),(s, v) => s.Write((byte)SerializerHelper.EnsureNotNull(v))), - new(typeof(short),(s, v) => s.Write((int)(short)SerializerHelper.EnsureNotNull(v))), - new(typeof(ushort),(s, v) => s.Write((ushort)SerializerHelper.EnsureNotNull(v))), - new(typeof(int),(s, v) => s.Write((int)SerializerHelper.EnsureNotNull(v))), - new(typeof(uint),(s, v) => s.Write((uint)SerializerHelper.EnsureNotNull(v))), - new(typeof(long),(s, v) => s.Write((long)SerializerHelper.EnsureNotNull(v))), - new(typeof(ulong),(s, v) => s.Write((ulong)SerializerHelper.EnsureNotNull(v))), - new(typeof(float),(s, v) => s.Write((float)SerializerHelper.EnsureNotNull(v))), - new(typeof(double),(s, v) => s.Write((double)SerializerHelper.EnsureNotNull(v))), - new(typeof(decimal),(s, v) => s.Write((decimal)SerializerHelper.EnsureNotNull(v))), - new(typeof(byte[]),(s, v) => s.WriteBytes((byte[])SerializerHelper.EnsureNotNull(v))), - new(typeof(string),(s, v) => s.WriteString((string)SerializerHelper.EnsureNotNull(v))), - new(typeof(Array),(s, v) => s.WriteArray((Array)SerializerHelper.EnsureNotNull(v))), - new(typeof(IList),(s, v) => s.WriteList((IList)SerializerHelper.EnsureNotNull(v))), - new(typeof(IDictionary),(s, v) => s.WriteDict((IDictionary)SerializerHelper.EnsureNotNull(v))), - new(typeof(Enum),(s, v) => s.WriteEnum((Enum)SerializerHelper.EnsureNotNull(v))), - new(typeof(Stream),(s, v) => s.WriteStream((Stream)SerializerHelper.EnsureNotNull(v))), - new(typeof(Type),(s, v) => s.Write((Type)SerializerHelper.EnsureNotNull(v))) - } - ); - AsyncSerializer = new( - new KeyValuePair[] - { - new(typeof(bool),(s, v, ct) => s.WriteAsync((bool)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(sbyte),(s, v, ct) => s.WriteAsync((sbyte)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(byte),(s, v, ct) => s.WriteAsync((byte)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(short),(s, v, ct) => s.WriteAsync((short)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(ushort),(s, v, ct) => s.WriteAsync((ushort)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(int),(s, v, ct) => s.WriteAsync((int)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(uint),(s, v, ct) => s.WriteAsync((uint)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(long),(s, v, ct) => s.WriteAsync((long)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(ulong),(s, v, ct) => s.WriteAsync((ulong)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(float),(s, v, ct) => s.WriteAsync((float)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(double),(s, v, ct) => s.WriteAsync((double)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(decimal),(s, v, ct) => s.WriteAsync((decimal)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(byte[]),(s, v, ct) => s.WriteBytesAsync((byte[])SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(string),(s, v, ct) => s.WriteStringAsync((string)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(Array),(s, v, ct) => s.WriteArrayAsync((Array)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), - new(typeof(IList),(s, v, ct) => s.WriteListAsync((IList)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), - new(typeof(IDictionary),(s, v, ct) => s.WriteDictAsync((IDictionary)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), - new(typeof(Enum),(s, v, ct) => s.WriteEnumAsync((Enum)SerializerHelper.EnsureNotNull(v), ct)), - new(typeof(Stream),(s, v, ct) => s.WriteStreamAsync((Stream)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)), - new(typeof(Type),(s, v, ct) => s.WriteAsync((Type)SerializerHelper.EnsureNotNull(v), cancellationToken: ct)) - } - ); - SyncDeserializer = new(new KeyValuePair[] - { - new(typeof(bool),(s,t,v,o) => s.ReadBool(v)), - new(typeof(sbyte),(s,t,v,o) => s.ReadOneSByte(v)), - new(typeof(byte),(s,t,v,o) => s.ReadOneByte(v)), - new(typeof(short),(s,t,v,o) => s.ReadShort(v)), - new(typeof(ushort),(s,t,v,o) => s.ReadUShort(v)), - new(typeof(int),(s,t,v,o) => s.ReadInt(v)), - new(typeof(uint),(s,t,v,o) => s.ReadUInt(v)), - new(typeof(long),(s,t,v,o) => s.ReadLong(v)), - new(typeof(ulong),(s,t,v,o) => s.ReadULong(v)), - new(typeof(float),(s,t,v,o) => s.ReadFloat(v)), - new(typeof(double),(s,t,v,o) => s.ReadDouble(v)), - new(typeof(decimal),(s,t,v,o) => s.ReadDecimal(v)), - new(typeof(byte[]),(s,t,v,o) => - s.ReadBytes(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue) - ), - new(typeof(string),(s,t,v,o) => - s.ReadString(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue) - ), - new(typeof(Array),(s,t,v,o) => - s.ReadArray( - t, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v) - ) - ), - new(typeof(IList),(s,t,v,o) => - s.ReadList( - t, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v) - ) - ), - new(typeof(IDictionary),(s,t,v,o) => - s.ReadDict( - t, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetKeySerializerOptions(property: null, s, v), - o?.Attribute.GetValueSerializerOptions(property: null, s, v) - ) - ), - new(typeof(Enum),(s,t,v,o) => s.ReadEnum(t,v)), - new(typeof(Stream),(s,t,v,o) => - { - Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v)?? new FileStream( - Path.GetTempFileName(), - FileMode.OpenOrCreate, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); - try - { - return s.ReadStream(res,v,minLen:o?.GetMinLen(0L)??0, maxLen:o?.GetMaxLen(long.MaxValue)??long.MaxValue); - } - catch - { - res.Dispose(); - throw; - } - }), - new(typeof(Type),(s,t,v,o) => s.ReadType(v)) - }); - AsyncDeserializer = new(new KeyValuePair[] - { - new(typeof(bool),(s,t,v,o,ct) => s.ReadBoolAsync(v, cancellationToken: ct)), - new(typeof(sbyte),(s,t,v,o,ct) => s.ReadOneSByteAsync(v, ct)), - new(typeof(byte),(s,t,v,o,ct) => s.ReadOneByteAsync(v, ct)), - new(typeof(short),(s,t,v,o,ct) => s.ReadShortAsync(v, cancellationToken: ct)), - new(typeof(ushort),(s,t,v,o,ct) => s.ReadUShortAsync(v, cancellationToken: ct)), - new(typeof(int),(s,t,v,o,ct) => s.ReadIntAsync(v, cancellationToken: ct)), - new(typeof(uint),(s,t,v,o,ct) => s.ReadUIntAsync(v, cancellationToken: ct)), - new(typeof(long),(s,t,v,o,ct) => s.ReadLongAsync(v, cancellationToken: ct)), - new(typeof(ulong),(s,t,v,o,ct) => s.ReadULongAsync(v, cancellationToken: ct)), - new(typeof(float),(s,t,v,o,ct) => s.ReadFloatAsync(v, cancellationToken: ct)), - new(typeof(double),(s,t,v,o,ct) => s.ReadDoubleAsync(v, cancellationToken: ct)), - new(typeof(decimal),(s,t,v,o,ct) => s.ReadDecimalAsync(v, cancellationToken: ct)), - new(typeof(byte[]),(s,t,v,o,ct) => - s.ReadBytesAsync(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue, cancellationToken: ct) - ), - new(typeof(string),(s,t,v,o,ct) => - s.ReadStringAsync(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue, cancellationToken: ct) - ), - new(typeof(Array),(s,t,v,o,ct) => - s.ReadArrayAsync( - t, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), - cancellationToken: ct - ) - ), - new(typeof(IList),(s,t,v,o,ct) => - s.ReadListAsync( - t, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), - cancellationToken: ct - ) - ), - new(typeof(IDictionary),(s,t,v,o,ct) => - s.ReadDictAsync( - t, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetKeySerializerOptions(property: null, s, v, ct), - o?.Attribute.GetValueSerializerOptions(property: null, s, v, ct), - cancellationToken: ct - ) - ), - new(typeof(Enum),(s,t,v,o,ct) => s.ReadEnumAsync(t,v,cancellationToken: ct)), - new(typeof(Stream),(s,t,v,o,ct) => - { - Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v,ct)?? new FileStream( - Path.GetTempFileName(), - FileMode.OpenOrCreate, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); - try - { - return s.ReadStreamAsync(res,v,minLen:o?.GetMinLen(0L)??0, maxLen:o?.GetMaxLen(long.MaxValue)??long.MaxValue, cancellationToken: ct); - } - catch - { - res.Dispose();//TODO Should be DisposeAsync - throw; - } - }), - new(typeof(Type),(s,t,v,o,ct) => s.ReadTypeAsync(v, cancellationToken: ct)) - }); - AllowedTypes = new(new Type[] - { - typeof(bool), - typeof(sbyte), - typeof(byte), - typeof(short), - typeof(ushort), - typeof(int), - typeof(uint), - typeof(long), - typeof(ulong), - typeof(float), - typeof(double), - typeof(decimal), - typeof(string), - typeof(IDictionary), - typeof(IList), - typeof(Stream), - typeof(Type) - }); - } - - /// - /// Version number (the first 8 bits are used internal, while other bits can be used for customization) - /// - public static int Version { get; set; } = VERSION; - /// /// Byte array buffer pool to use /// public static ArrayPool BufferPool { get; set; } = ArrayPool.Shared; /// - /// Is the type cache enabled? + /// Object cache pool to use /// - public static bool TypeCacheEnabled { get; private set; } + public static ArrayPool ObjectCachePool { get; set; } = ArrayPool.Shared; /// - /// Find a serializer + /// Type cache pool to use /// - /// Type - /// Serializer - public static Serialize_Delegate? FindSerializer(Type type) - { - Type? serializer = FindDelegateType(type, SyncSerializer.Keys); - if (serializer == null || !SyncSerializer.TryGetValue(serializer, out Serialize_Delegate? res)) - { - SerializerEventArgs e = new(type); - OnFindSyncSerializer?.Invoke(e); - res = e.Delegate; - } - return res; - } + public static ArrayPool TypeCachePool { get; set; } = ArrayPool.Shared; /// - /// Find a serializer + /// Object hash code cache pool to use /// - /// Type - /// Serializer - public static AsyncSerialize_Delegate? FindAsyncSerializer(Type type) - { - Type? serializer = FindDelegateType(type, AsyncSerializer.Keys); - if (serializer == null || !AsyncSerializer.TryGetValue(serializer, out AsyncSerialize_Delegate? res)) - { - SerializerEventArgs e = new(type); - OnFindAsyncSerializer?.Invoke(e); - res = e.Delegate; - } - return res; - } + public static ArrayPool HashCodeCachePool { get; set; } = ArrayPool.Shared; /// - /// Find a deserializer - /// - /// Type - /// Deserializer - public static Deserialize_Delegate? FindDeserializer(Type type) - { - Type? serializer = FindDelegateType(type, SyncSerializer.Keys); - if (serializer == null || !SyncDeserializer.TryGetValue(serializer, out Deserialize_Delegate? res)) - { - SerializerEventArgs e = new(type); - OnFindSyncDeserializer?.Invoke(e); - res = e.Delegate; - } - return res; - } - - /// - /// Find a deserializer - /// - /// Type - /// Deserializer - public static AsyncDeserialize_Delegate? FindAsyncDeserializer(Type type) - { - Type? serializer = FindDelegateType(type, AsyncSerializer.Keys); - if (serializer == null || !AsyncDeserializer.TryGetValue(serializer, out AsyncDeserialize_Delegate? res)) - { - SerializerEventArgs e = new(type); - OnFindAsyncDeserializer?.Invoke(e); - res = e.Delegate; - } - return res; - } - - /// - /// Find a delegate type + /// Is the type cache enabled? /// - /// Type - /// Types - /// Delegate type - public static Type? FindDelegateType(Type type, IEnumerable types) - { - lock (SyncObject) - if (!Initialized) - { - Initialized = true; - OnInit?.Invoke(new()); - } - Type? res = types.FirstOrDefault(t => t == type); - if (res == null) - if (type.IsGenericType && !type.IsGenericTypeDefinition) - { - Type gtd = type.GetGenericTypeDefinition(); - res = types.FirstOrDefault(t => t.IsGenericType && (t.IsGenericTypeDefinition ? t : t.GetGenericTypeDefinition()) == gtd); - } - else if (type.IsArray) - res = types.FirstOrDefault(t => t == typeof(Array)); - else if (type.IsEnum) - res = types.FirstOrDefault(t => t == typeof(Enum)); - return res ?? types.FirstOrDefault(t => t.IsAssignableFrom(type)); - } + public static bool TypeCacheEnabled { get; private set; } /// /// Load a type @@ -410,7 +81,7 @@ public static Type LoadType(string name) }, $"Failed to load type \"{name}\""); /// - /// Determine if a type is allowed per default for deserializing + /// Determine if a type is allowed for deserializing per default /// /// Type /// Is allowed? @@ -421,10 +92,14 @@ public static bool IsTypeAllowed(Type type) // Allow all enumeration types if (type.IsEnum) return true; // Get the final element type of an array type - Type finalType = type; - while (finalType.IsArray) finalType = finalType.GetElementType()!; + Type finalType = type.IsArray ? type.GetFinalElementType() : type; // Allow registered allowed types or serializable types - if (AllowedTypes.Contains(finalType) || typeof(IStreamSerializer).IsAssignableFrom(finalType)) return true; + if ( + AllowedTypes.Contains(finalType) || + typeof(IStreamSerializer).IsAssignableFrom(finalType) || + finalType.GetCustomAttributeCached() != null + ) + return true; // Validate generic type arguments also (btw. no risk for an endless recursion here) if (finalType.IsGenericType) foreach (Type gta in finalType.GetGenericArguments()) if (!IsTypeAllowed(gta)) return false; // Allow inheriting types @@ -438,21 +113,21 @@ public static bool IsTypeAllowed(Type type) /// /// Used constructor /// Requested type - /// Stream - /// Serializer version - /// Serializer options + /// Context /// Instance - public static object CreateInstance(out ConstructorInfo? usedConstructor, Type type, Stream stream, int? version = null, ISerializerOptions? options = null) + public static object CreateInstance(out ConstructorInfo? usedConstructor, Type type, IDeserializationContext context) { usedConstructor = null; - if (InstanceFactories.TryGetValue(type, out InstanceFactory_Delegate? factory)) return factory(type, stream, version ?? VERSION, options); + // Try factories + if (InstanceFactories.TryGetValue(type, out InstanceFactory_Delegate? factory)) return factory(type, context); if (type.IsGenericType && InstanceFactories.TryGetValue(type.GetGenericTypeDefinition(), out factory)) - return factory(type, stream, version ?? VERSION, options); + return factory(type, context); if ( InstanceFactories.Keys.FirstOrDefault(t => t.IsAssignableFrom(type)) is Type inheritedType && InstanceFactories.TryGetValue(inheritedType, out factory) ) - return factory(type, stream, version ?? VERSION, options); + return factory(type, context); + // Try reflection if (typeof(IStreamSerializer).IsAssignableFrom(type)) { ConstructorInfo? ci = (from c in type.GetConstructorsCached() @@ -464,14 +139,28 @@ orderby c.GetParametersCached().Length descending .FirstOrDefault(); if (ci != null) { + // Use the found (possibly) serializer constructor usedConstructor = ci; - return ci.GetParametersCached().Length == 0 ? ci.InvokeAuto() : ci.InvokeAuto(stream, version ?? Version); + return ci.GetParametersCached().Length == 0 ? ci.InvokeAuto() : ci.InvokeAuto(context); } } - return type.ConstructAuto(out usedConstructor, usePrivate: true, stream, version, options) + // Try automatic construction from an unknown constructor + return type.ConstructAuto(out usedConstructor, usePrivate: true, context) ?? throw new SerializerException($"Failed to instance {type}", new InvalidProgramException()); } + /// + /// Create an instance + /// + /// Requested type + /// Used constructor + /// Context + /// Instance + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T CreateInstance(out ConstructorInfo? usedConstructor, IDeserializationContext context) + => (T)CreateInstance(out usedConstructor, typeof(T), context); + /// /// Enable the type cache (CAUTION: Calling this method will ensure that the wan24-Core bootstrapper did run! A call during bootstrapping will cause an exception) /// @@ -480,86 +169,67 @@ public static void EnableTypeCache() { if (TypeCacheEnabled) return; TypeCacheEnabled = true; + // Ensure the bootstrapper did run if (!Bootstrap.DidBoot) { if (Bootstrap.IsBooting) throw new InvalidOperationException("Can't be called during bootstrapping"); Bootstrap.Async().Wait(); } + // Will the type cache with IStreamSerializer types Type streamSerializer = typeof(IStreamSerializer); foreach (Type type in from ass in TypeHelper.Instance.Assemblies from t in ass.GetTypes() where !t.IsInterface && !t.IsAbstract && - streamSerializer.IsAssignableFrom(t) + streamSerializer.IsAssignableFrom(t) && + !TypeCache.Types.ContainsKey(t.GetHashCode()) select t) - TypeCache.Types[type.GetHashCode()] = type; + TypeCache.Types.TryAdd(type.GetHashCode(), type); } - /// - /// Create an instance - /// - /// Requested type - /// Used constructor - /// Stream - /// Serializer version - /// Serializer options - /// Instance - [TargetedPatchingOptOut("Tiny method")] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static T CreateInstance(out ConstructorInfo? usedConstructor, Stream stream, int? version = null, ISerializerOptions? options = null) - => (T)CreateInstance(out usedConstructor, typeof(T), stream, version, options); - /// /// Serializer delegate /// - /// Stream - /// Value to serialize - public delegate void Serialize_Delegate(Stream stream, object? value); + /// Context + /// Object + public delegate void Serializer_Delegate(ISerializationContext context, object? obj); /// /// Serializer delegate /// - /// Stream - /// Value to serialize - /// Cancellation token - public delegate Task AsyncSerialize_Delegate(Stream stream, object? value, CancellationToken cancellationToken); + /// Context + /// Object + public delegate Task AsyncSerializer_Delegate(ISerializationContext context, object? obj); /// /// Deserializer delegate /// - /// Stream + /// Context /// Type - /// Version - /// Options - /// Deserialized value - public delegate object? Deserialize_Delegate(Stream stream, Type type, int version, ISerializerOptions? options); + /// Object + public delegate object? Deserializer_Delegate(IDeserializationContext context, Type type); /// /// Deserializer delegate /// - /// Stream + /// Context /// Type - /// Version - /// Options - /// Cancellation token - /// Deserialized value (task will be handled as Task<T>, a result is required!) - public delegate Task AsyncDeserialize_Delegate(Stream stream, Type type, int version, ISerializerOptions? options, CancellationToken cancellationToken); + /// Object (the task will be used as ) + public delegate Task AsyncDeserializer_Delegate(IDeserializationContext context, Type type); /// /// Delegate for an instance factory /// /// Requested type - /// Stream - /// Serializer version - /// Serializer options + /// Context /// Instance - public delegate object InstanceFactory_Delegate(Type type, Stream stream, int version, ISerializerOptions? options); + public delegate object InstanceFactory_Delegate(Type type, IDeserializationContext context); /// /// Delegate for finding a serializer /// /// Event arguments - public delegate void FindSyncSerializer_Delegate(SerializerEventArgs e); + public delegate void FindSyncSerializer_Delegate(SerializerEventArgs e); /// /// Raised when finding a serializer /// @@ -569,7 +239,7 @@ public static T CreateInstance(out ConstructorInfo? usedConstructor, Stream s /// Delegate for finding a serializer /// /// Event arguments - public delegate void FindAsyncSerializer_Delegate(SerializerEventArgs e); + public delegate void FindAsyncSerializer_Delegate(SerializerEventArgs e); /// /// Raised when finding a serializer /// @@ -579,7 +249,7 @@ public static T CreateInstance(out ConstructorInfo? usedConstructor, Stream s /// Delegate for finding a deserializer /// /// Event arguments - public delegate void FindSyncDeserializer_Delegate(SerializerEventArgs e); + public delegate void FindSyncDeserializer_Delegate(SerializerEventArgs e); /// /// Raised when finding a deserializer /// @@ -589,7 +259,7 @@ public static T CreateInstance(out ConstructorInfo? usedConstructor, Stream s /// Delegate for finding a deserializer /// /// Event arguments - public delegate void FindAsyncDeserializer_Delegate(SerializerEventArgs e); + public delegate void FindAsyncDeserializer_Delegate(SerializerEventArgs e); /// /// Raised when finding a deserializer /// diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs b/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs index 72895c4..5b5d6bd 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs @@ -11,33 +11,30 @@ public static class StreamSerializerAdapter /// /// Read the serialized object version /// - /// Stream - /// Serializer version - /// Object version + /// Context + /// Object version /// Serialized object version [TargetedPatchingOptOut("Tiny method")] - public static int ReadSerializedObjectVersion(Stream stream, int serializerVersion, int objectVersion) + public static int ReadSerializedObjectVersion(IDeserializationContext context, int version) { - int res = stream.ReadNumber(serializerVersion); - if (res > objectVersion) - throw new SerializerException($"Unsupported object version {res} (max. supported version is {objectVersion})", new InvalidDataException()); + int res = context.Stream.ReadNumber(context); + if (res > version) + throw new SerializerException($"Unsupported object version {res} (max. supported version is {version})", new InvalidDataException()); return res; } /// /// Read the serialized object version /// - /// Stream - /// Serializer version - /// Object version - /// Cancellation token + /// Context + /// Object version /// Serialized object version [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadSerializedObjectVersionAsync(Stream stream, int serializerVersion, int objectVersion, CancellationToken cancellationToken = default) + public static async Task ReadSerializedObjectVersionAsync(IDeserializationContext context, int version) { - int res = await stream.ReadNumberAsync(serializerVersion, cancellationToken: cancellationToken).DynamicContext(); - if (res > objectVersion) - throw new SerializerException($"Unsupported object version {res} (max. supported version is {objectVersion})", new InvalidDataException()); + int res = await context.Stream.ReadNumberAsync(context).DynamicContext(); + if (res > version) + throw new SerializerException($"Unsupported object version {res} (max. supported version is {version})", new InvalidDataException()); return res; } } diff --git a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs index e6e2524..b3e08cd 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -101,6 +101,11 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position /// public long? MaxLen { get; set; } + /// + /// Use the cache? (this is being applied on the type only) + /// + public bool UseCache { get; set; } = true; + /// /// Stream factory /// @@ -171,11 +176,9 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position /// /// Deserializing object /// Target property - /// Source stream - /// Serializer version - /// Cancellation token + /// Context /// Stream to use for deserializing an embedded stream - public virtual Stream? GetStream(object? obj, PropertyInfo? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual Stream? GetStream(object? obj, PropertyInfo? property, IDeserializationContext context) { if (obj == null) ArgumentValidationHelper.EnsureValidArgument(nameof(obj), property == null); if (property == null) ArgumentValidationHelper.EnsureValidArgument(nameof(property), obj == null); @@ -207,18 +210,16 @@ public StreamSerializerAttribute(int fromVersion, int version = 0, int position ); StreamFactory = mi.CreateDelegate(); } - return StreamFactory(obj, property, this, stream, version, cancellationToken); + return StreamFactory(obj, property, this, context); } /// /// Get serializer options from the serializer options factory, or the default /// /// Target property - /// Source stream - /// Serializer version - /// Cancellation token + /// Context /// Serializer options - public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property, ISerializerContext context) { try { @@ -247,12 +248,12 @@ public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property : $"{property.DeclaringType}.{property!.Name} stream serializer attribute defined serializer options factory {SerializerOptionsFactoryType}.{SerializerOptionsFactoryMethod} not found", new InvalidProgramException() ); - return (ISerializerOptions)mi.Invoke(obj: null, new object?[] { property, this, stream, version, cancellationToken })!; + return (ISerializerOptions)mi.Invoke(obj: null, new object?[] { property, this, context })!; } finally { - KeySerializerOptions ??= GetKeySerializerOptions(property, stream, version, cancellationToken); - ValueSerializerOptions ??= GetValueSerializerOptions(property, stream, version, cancellationToken); + KeySerializerOptions ??= GetKeySerializerOptions(property, context); + ValueSerializerOptions ??= GetValueSerializerOptions(property, context); } } @@ -260,11 +261,9 @@ public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property /// Get key serializer options from the serializer options factory, or the default /// /// Target property - /// Source stream - /// Serializer version - /// Cancellation token + /// Context /// Serializer options - public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt? property, ISerializerContext context) { if (KeySerializerOptions != null) return KeySerializerOptions; if (KeySerializerOptionsFactoryType == null) return KeySerializerOptions ??= CreateSerializerOptions(KeyOptionsType, property); @@ -291,18 +290,16 @@ public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfoExt? prope : $"{property.DeclaringType}.{property!.Name} stream serializer attribute defined serializer options factory {KeySerializerOptionsFactoryType}.{KeySerializerOptionsFactoryMethod} not found", new InvalidProgramException() ); - return (ISerializerOptions)mi.Invoke(obj: null, new object?[] { property, this, stream, version, cancellationToken })!; + return (ISerializerOptions)mi.Invoke(obj: null, new object?[] { property, this, context })!; } /// /// Get value serializer options from the serializer options factory, or the default /// /// Target property - /// Source stream - /// Serializer version - /// Cancellation token + /// Context /// Serializer options - public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? property, ISerializerContext context) { if (ValueSerializerOptions != null) return ValueSerializerOptions; if (ValueSerializerOptionsFactoryType == null) return ValueSerializerOptions ??= CreateSerializerOptions(ValueOptionsType, property); @@ -329,7 +326,7 @@ public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfoExt? pro : $"{property.DeclaringType}.{property!.Name} stream serializer attribute defined serializer options factory {ValueSerializerOptionsFactoryType}.{ValueSerializerOptionsFactoryMethod} not found", new InvalidProgramException() ); - return (ISerializerOptions)mi.Invoke(obj: null, new object?[] { property, this, stream, version, cancellationToken })!; + return (ISerializerOptions)mi.Invoke(obj: null, new object?[] { property, this, context })!; } /// @@ -364,9 +361,9 @@ public virtual List GetNumericStructureFields(Type type) { ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsValueType, () => "Structure type required"); return NumericStructureFields ??= new(from fi in type.GetFieldsCached(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - where !fi.IsStatic && - fi.GetCustomAttributeCached() is not null - select fi); + where !fi.IsStatic && + fi.GetCustomAttributeCached() is not null + select fi); } /// @@ -385,18 +382,9 @@ protected virtual ISerializerOptions CreateSerializerOptions(Type? type, Propert /// Deserializing object /// Target property /// Stream serializer attribute - /// Source stream - /// Serializer version - /// Cancellation token + /// Context /// Stream to use for deserializing an embedded stream - public delegate Stream StreamFactory_Delegate( - object? obj, - PropertyInfo? property, - StreamSerializerAttribute attr, - Stream stream, - int version, - CancellationToken cancellationToken = default - ); + public delegate Stream StreamFactory_Delegate(object? obj, PropertyInfo? property, StreamSerializerAttribute attr, IDeserializationContext context); /// /// Delegate for a serializer options factory @@ -404,18 +392,9 @@ public delegate Stream StreamFactory_Delegate( /// Deserializing object /// Target property /// Stream serializer attribute - /// Source stream - /// Serializer version - /// Cancellation token + /// Context /// Serializer options - public delegate ISerializerOptions SerializerOptionsFactory_Delegate( - object? obj, - PropertyInfo? property, - StreamSerializerAttribute attr, - Stream stream, - int version, - CancellationToken cancellationToken = default - ); + public delegate ISerializerOptions SerializerOptionsFactory_Delegate(object? obj, PropertyInfo? property, StreamSerializerAttribute attr, ISerializerContext context); /// /// Delegate for a stream factory @@ -423,19 +402,10 @@ public delegate ISerializerOptions SerializerOptionsFactory_Delegate( /// Deserializing object /// Target property /// Stream serializer attribute - /// Source stream - /// Serializer version - /// Cancellation token + /// Context /// Stream to use for deserializing an embedded stream #pragma warning disable IDE0060 // Remove unused parameter - public static Stream MemoryStreamFactory( - object? obj, - PropertyInfo? property, - StreamSerializerAttribute attr, - Stream stream, - int version, - CancellationToken cancellationToken = default - ) + public static Stream MemoryStreamFactory(object? obj, PropertyInfo? property, StreamSerializerAttribute attr, IDeserializationContext context) #pragma warning restore IDE0060 // Remove unused parameter => new MemoryStream(); @@ -447,6 +417,7 @@ public static Stream MemoryStreamFactory( /// Properties public static IEnumerable GetWriteProperties(Type type, int? version = null) { + //TODO Use a cache StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); StreamSerializerModes mode = attr?.Mode ?? StreamSerializerModes.OptOut; version ??= attr?.Version ?? 0; @@ -480,6 +451,7 @@ orderby pi.Property.GetCustomAttributeCached()?.Posit /// Properties public static IEnumerable GetReadProperties(Type type, int? version) { + //TODO Use a cache StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); StreamSerializerModes mode = attr?.Mode ?? StreamSerializerModes.OptOut; version = attr?.Version ?? 0; diff --git a/src/Stream-Serializer-Extensions/StreamSerializerBase.cs b/src/Stream-Serializer-Extensions/StreamSerializerBase.cs index 315b393..ab9efdb 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerBase.cs @@ -36,13 +36,12 @@ protected StreamSerializerBase(int? objectVersion = null) : base() /// /// Constructor /// - /// Stream - /// Serializer version + /// Context /// Object version - protected StreamSerializerBase(Stream stream, int version, int? objectVersion = null) : base() + protected StreamSerializerBase(IDeserializationContext context, int? objectVersion = null) : base() { _ObjectVersion = objectVersion; - DeserializeInt(stream, version); + DeserializeInt(context); } /// @@ -57,110 +56,100 @@ protected StreamSerializerBase(Stream stream, int version, int? objectVersion = /// /// Serialize /// - /// Stream - protected abstract void Serialize(Stream stream); + /// Context + protected abstract void Serialize(ISerializationContext context); /// /// Serialize /// - /// Stream - /// Cancellation token - protected virtual async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) + /// Context + protected virtual async Task SerializeAsync(ISerializationContext context) { await Task.Yield(); - Serialize(stream); + Serialize(context); } /// /// Serialize /// - /// Stream - private void SerializeInt(Stream stream) + /// Context + private void SerializeInt(ISerializationContext context) { - stream.WriteSerializerVersion() - .WriteNumber(BASE_VERSION); - if (_ObjectVersion != null) stream.WriteNumber(_ObjectVersion.Value); - Serialize(stream); + context.Stream.WriteSerializerVersion(context) + .WriteNumber(BASE_VERSION, context); + if (_ObjectVersion != null) context.Stream.WriteNumber(_ObjectVersion.Value, context); + Serialize(context); } /// /// Serialize /// - /// Stream - /// Cancellation token - private async Task SerializeIntAsync(Stream stream, CancellationToken cancellationToken) + /// Context + private async Task SerializeIntAsync(ISerializationContext context) { - await stream.WriteSerializerVersionAsync(cancellationToken).DynamicContext(); - await stream.WriteNumberAsync(BASE_VERSION, cancellationToken).DynamicContext(); + await context.Stream.WriteSerializerVersionAsync(context).DynamicContext(); + await context.Stream.WriteNumberAsync(BASE_VERSION, context).DynamicContext(); if (_ObjectVersion != null) - await stream.WriteNumberAsync(_ObjectVersion.Value, cancellationToken).DynamicContext(); - await SerializeAsync(stream, cancellationToken).DynamicContext(); + await context.Stream.WriteNumberAsync(_ObjectVersion.Value, context).DynamicContext(); + await SerializeAsync(context).DynamicContext(); } /// /// Deserialize /// - /// Stream - /// Serializer version - protected abstract void Deserialize(Stream stream, int version); + /// Context + protected abstract void Deserialize(IDeserializationContext context); /// /// Deserialize /// - /// Stream - /// Serializer version - /// Cancellation token - protected virtual async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) + /// Context + protected virtual async Task DeserializeAsync(IDeserializationContext context) { await Task.Yield(); - Deserialize(stream, version); + Deserialize(context); } /// /// Deserialize /// - /// Stream - /// Serializer version -#pragma warning disable IDE0060 // Remove unused parameter (may be used later) - private void DeserializeInt(Stream stream, int version) -#pragma warning restore IDE0060 // Remove unused parameter (may be used later) + /// Context + private void DeserializeInt(IDeserializationContext context) { - _SerializerVersion = stream.ReadSerializerVersion(); - int bv = stream.ReadNumber(_SerializerVersion.Value); + _SerializerVersion = context.Stream.ReadSerializerVersion(context); + using DeserializerContext objContext = new(context.Stream, _SerializedObjectVersion, context.CacheSize, context.Cancellation); + int bv = context.Stream.ReadNumber(objContext); if (bv < 1 || bv > BASE_VERSION) throw new SerializerException($"Invalid base object version {bv}", new InvalidDataException()); - if (_ObjectVersion != null) _SerializedObjectVersion = StreamSerializerAdapter.ReadSerializedObjectVersion(stream, _SerializerVersion.Value, _ObjectVersion.Value); - Deserialize(stream, _SerializerVersion.Value); + if (_ObjectVersion != null) _SerializedObjectVersion = StreamSerializerAdapter.ReadSerializedObjectVersion(objContext, _ObjectVersion.Value); + Deserialize(objContext); } /// /// Deserialize /// - /// Stream - /// Serializer version - /// Cancellation token -#pragma warning disable IDE0060 // Remove unused parameter (may be used later) - private async Task DeserializeIntAsync(Stream stream, int version, CancellationToken cancellationToken) -#pragma warning restore IDE0060 // Remove unused parameter (may be used later) + /// Context + private async Task DeserializeIntAsync(IDeserializationContext context) { - _SerializerVersion = await stream.ReadSerializerVersionAsync(cancellationToken).DynamicContext(); - int bv = await stream.ReadNumberAsync(_SerializerVersion.Value, cancellationToken: cancellationToken).DynamicContext(); + _SerializerVersion = await context.Stream.ReadSerializerVersionAsync(context).DynamicContext(); + using DeserializerContext objContext = new(context.Stream, _SerializedObjectVersion, context.CacheSize, context.Cancellation); + int bv = await context.Stream.ReadNumberAsync(objContext).DynamicContext(); if (bv < 1 || bv > BASE_VERSION) throw new SerializerException($"Invalid base object version {bv}", new InvalidDataException()); if (_ObjectVersion != null) - _SerializedObjectVersion = await StreamSerializerAdapter.ReadSerializedObjectVersionAsync(stream, _SerializerVersion.Value, _ObjectVersion.Value, cancellationToken) + _SerializedObjectVersion = await StreamSerializerAdapter.ReadSerializedObjectVersionAsync(objContext, _ObjectVersion.Value) .DynamicContext(); - await DeserializeAsync(stream, _SerializerVersion.Value, cancellationToken).DynamicContext(); + await DeserializeAsync(objContext).DynamicContext(); } /// - void IStreamSerializer.Serialize(Stream stream) => SerializeInt(stream); + void IStreamSerializer.Serialize(ISerializationContext context) => SerializeInt(context); /// - Task IStreamSerializer.SerializeAsync(Stream stream, CancellationToken cancellationToken) => SerializeIntAsync(stream, cancellationToken); + Task IStreamSerializer.SerializeAsync(ISerializationContext context) => SerializeIntAsync(context); /// - void IStreamSerializer.Deserialize(Stream stream, int version) => DeserializeInt(stream, version); + void IStreamSerializer.Deserialize(IDeserializationContext context) => DeserializeInt(context); /// - Task IStreamSerializer.DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) => DeserializeIntAsync(stream, version, cancellationToken); + Task IStreamSerializer.DeserializeAsync(IDeserializationContext context) => DeserializeIntAsync(context); } } From ac5f83da000dd161800eecfc5fa6c521767879e1 Mon Sep 17 00:00:00 2001 From: nd Date: Fri, 14 Jul 2023 22:20:05 +0200 Subject: [PATCH 16/17] Update + Added `ContextCached` and `ContextUncached` for temporary enabling/disabling the serializer context cache --- .../AutoStreamSerializer_Tests.cs | 84 +- .../CustomStreamSerializer_Tests.cs | 40 +- .../SerializerHelper_Tests.cs | 3 +- .../Serializer_Tests.cs | 998 +++++++++--------- .../StreamExtensions_Tests.Any.cs | 28 +- .../StreamExtensions_Tests.Array.cs | 41 +- .../StreamExtensions_Tests.Bool.cs | 36 +- .../StreamExtensions_Tests.Byte.cs | 104 +- .../StreamExtensions_Tests.Bytes.cs | 28 +- .../StreamExtensions_Tests.Decimal.cs | 52 +- .../StreamExtensions_Tests.Dict.cs | 32 +- .../StreamExtensions_Tests.Double.cs | 52 +- .../StreamExtensions_Tests.Enum.cs | 20 +- .../StreamExtensions_Tests.Float.cs | 52 +- .../StreamExtensions_Tests.Int.cs | 104 +- .../StreamExtensions_Tests.List.cs | 32 +- .../StreamExtensions_Tests.Long.cs | 104 +- .../StreamExtensions_Tests.Number.cs | 28 +- .../StreamExtensions_Tests.Object.cs | 28 +- .../StreamExtensions_Tests.Serialized.cs | 30 +- .../StreamExtensions_Tests.Short.cs | 104 +- .../StreamExtensions_Tests.String.cs | 55 +- .../StreamExtensions_Tests.Struct.cs | 28 +- .../StreamExtensions_Tests.Type.cs | 20 +- .../StreamSerializer_Tests.cs | 12 +- .../TestObject2.cs | 16 +- .../ContextCached.cs | 32 + .../ContextRecursion.cs | 14 +- .../ContextUncached.cs | 32 + .../DeserializerContext.cs | 111 +- .../IDeserializationContext.cs | 6 + .../ISerializerContext.cs | 4 + .../ItemSerializerContext.cs | 1 - .../SerializedTypeInfo.IStreamSerializer.cs | 12 +- .../SerializedTypeInfo.cs | 7 +- .../SerializerContext.cs | 38 +- .../SerializerContextBase.cs | 108 +- .../SerializerHelper.cs | 8 +- .../SerializerOptionsFluentExtensions.cs | 24 + .../SerializerTypes.cs | 8 +- .../StreamExtensions.Read.String.cs | 60 +- .../StreamExtensions.Read.cs | 8 +- .../StreamExtensions.SerializationContext.cs | 18 +- .../StreamExtensions.Write.String.cs | 71 +- .../StreamExtensions.Write.cs | 2 + 45 files changed, 1565 insertions(+), 1130 deletions(-) create mode 100644 src/Stream-Serializer-Extensions/ContextCached.cs create mode 100644 src/Stream-Serializer-Extensions/ContextUncached.cs diff --git a/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs index 2a80943..2ef7026 100644 --- a/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs +++ b/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs @@ -10,6 +10,8 @@ public class AutoStreamSerializer_Tests public void AutoSerializer_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); using MemoryStream stream = new(); stream.Write(RandomNumberGenerator.GetBytes(200000)); stream.Position = 0; @@ -36,13 +38,13 @@ public void AutoSerializer_Tests() BValue = true, ZValue = true }; - ms.WriteSerialized(test5) - .WriteSerialized(test5a) - .WriteSerialized(test5b); + ms.WriteSerialized(test5, sc) + .WriteSerialized(test5a, sc) + .WriteSerialized(test5b, sc); ms.Position = 0; { Assert.AreEqual(stream.Length, stream.Position); - using TestObject5 test5_2 = ms.ReadSerialized(); + using TestObject5 test5_2 = ms.ReadSerialized(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -56,7 +58,7 @@ public void AutoSerializer_Tests() } { Assert.AreEqual(stream_a.Length, stream_a.Position); - using TestObject5a test5_2 = ms.ReadSerialized(); + using TestObject5a test5_2 = ms.ReadSerialized(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -69,7 +71,7 @@ public void AutoSerializer_Tests() Assert.IsTrue(stream_a.ToArray().SequenceEqual(buffer)); } { - using TestObject5b test5_2 = ms.ReadSerialized(); + using TestObject5b test5_2 = ms.ReadSerialized(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -82,6 +84,8 @@ public void AutoSerializer_Tests() public async Task AutoSerializerAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); using MemoryStream stream = new(); stream.Write(RandomNumberGenerator.GetBytes(200000)); stream.Position = 0; @@ -108,13 +112,13 @@ public async Task AutoSerializerAsync_Tests() BValue = true, ZValue = true }; - await ms.WriteSerializedAsync(test5) - .WriteSerializedAsync(test5a) - .WriteSerializedAsync(test5b); + await ms.WriteSerializedAsync(test5, sc) + .WriteSerializedAsync(test5a, sc) + .WriteSerializedAsync(test5b, sc); ms.Position = 0; { Assert.AreEqual(stream.Length, stream.Position); - using TestObject5 test5_2 = await ms.ReadSerializedAsync(); + using TestObject5 test5_2 = await ms.ReadSerializedAsync(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -128,7 +132,7 @@ await ms.WriteSerializedAsync(test5) } { Assert.AreEqual(stream_a.Length, stream_a.Position); - using TestObject5a test5_2 = await ms.ReadSerializedAsync(); + using TestObject5a test5_2 = await ms.ReadSerializedAsync(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -141,7 +145,7 @@ await ms.WriteSerializedAsync(test5) Assert.IsTrue(stream_a.ToArray().SequenceEqual(buffer)); } { - using TestObject5b test5_2 = await ms.ReadSerializedAsync(); + using TestObject5b test5_2 = await ms.ReadSerializedAsync(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -154,24 +158,26 @@ await ms.WriteSerializedAsync(test5) public void OptOut_Tests() { using MemoryStream ms = new(); - ms.WriteAnyObject(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteAnyObject(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }, sc); ms.Position = 0; { - TestObject3 temp = ms.ReadAnyObject(); + TestObject3 temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3a temp = ms.ReadAnyObject(); + TestObject3a temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3b temp = ms.ReadAnyObject(); + TestObject3b temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); @@ -182,24 +188,26 @@ public void OptOut_Tests() public async Task OptOutAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAnyObjectAsync(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObjectAsync(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObjectAsync(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAnyObjectAsync(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObjectAsync(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObjectAsync(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }, sc); ms.Position = 0; { - TestObject3 temp = await ms.ReadAnyObjectAsync(); + TestObject3 temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3a temp = await ms.ReadAnyObjectAsync(); + TestObject3a temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3b temp = await ms.ReadAnyObjectAsync(); + TestObject3b temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); @@ -210,24 +218,26 @@ await ms.WriteAnyObjectAsync(new TestObject3() { Field1 = true, Field2 = true, F public void OptIn_Tests() { using MemoryStream ms = new(); - ms.WriteAnyObject(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteAnyObject(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }, sc); ms.Position = 0; { - TestObject4 temp = ms.ReadAnyObject(); + TestObject4 temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4a temp = ms.ReadAnyObject(); + TestObject4a temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4b temp = ms.ReadAnyObject(); + TestObject4b temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); @@ -238,24 +248,26 @@ public void OptIn_Tests() public async Task OptInAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAnyObjectAsync(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObjectAsync(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObjectAsync(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAnyObjectAsync(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObjectAsync(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObjectAsync(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }, sc); ms.Position = 0; { - TestObject4 temp = await ms.ReadAnyObjectAsync(); + TestObject4 temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4a temp = await ms.ReadAnyObjectAsync(); + TestObject4a temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4b temp = await ms.ReadAnyObjectAsync(); + TestObject4b temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); diff --git a/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs index 10663e3..965e6bc 100644 --- a/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs +++ b/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs @@ -14,28 +14,30 @@ public void Custom_Tests() asyncSerializer = 0, syncDeserializer = 0; AsyncDeserializer = 0; - StreamSerializer.SyncSerializer[typeof(TestObject)] = (s, v) => + StreamSerializer.SyncSerializer[typeof(TestObject)] = (c, v) => { syncSerializer++; - s.Write(((TestObject)v!).Value); + c.Stream.Write(((TestObject)v!).Value, c); }; - StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (s, v, ct) => + StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (c, v) => { asyncSerializer++; - await s.WriteAsync(((TestObject)v!).Value, ct); + await c.Stream.WriteAsync(((TestObject)v!).Value, c); }; - StreamSerializer.SyncDeserializer[typeof(TestObject)] = (s, t, v, o) => + StreamSerializer.SyncDeserializer[typeof(TestObject)] = (c, t) => { syncDeserializer++; - return new TestObject() { Value = s.ReadBool() }; + return new TestObject() { Value = c.Stream.ReadBool(c) }; }; StreamSerializer.AsyncDeserializer[typeof(TestObject)] = DeserializeTestObject; try { using MemoryStream ms = new(); - ms.WriteObject(new TestObject() { Value = true }); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteObject(new TestObject() { Value = true }, sc); ms.Position = 0; - Assert.IsTrue(ms.ReadObject().Value); + Assert.IsTrue(ms.ReadObject(dc).Value); Assert.AreEqual(1, syncSerializer); Assert.AreEqual(0, asyncSerializer); Assert.AreEqual(1, syncDeserializer); @@ -57,28 +59,30 @@ public async Task CustomAsync_Tests() asyncSerializer = 0, syncDeserializer = 0; AsyncDeserializer = 0; - StreamSerializer.SyncSerializer[typeof(TestObject)] = (s, v) => + StreamSerializer.SyncSerializer[typeof(TestObject)] = (c, v) => { syncSerializer++; - s.Write(((TestObject)v!).Value); + c.Stream.Write(((TestObject)v!).Value, c); }; - StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (s, v, ct) => + StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (c, v) => { asyncSerializer++; - await s.WriteAsync(((TestObject)v!).Value, ct); + await c.Stream.WriteAsync(((TestObject)v!).Value, c); }; - StreamSerializer.SyncDeserializer[typeof(TestObject)] = (s, t, v, o) => + StreamSerializer.SyncDeserializer[typeof(TestObject)] = (c, t) => { syncDeserializer++; - return new TestObject() { Value = s.ReadBool() }; + return new TestObject() { Value = c.Stream.ReadBool(c) }; }; StreamSerializer.AsyncDeserializer[typeof(TestObject)] = DeserializeTestObject; try { using MemoryStream ms = new(); - await ms.WriteObjectAsync(new TestObject() { Value = true }); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteObjectAsync(new TestObject() { Value = true },sc); ms.Position = 0; - Assert.IsTrue((await ms.ReadObjectAsync()).Value); + Assert.IsTrue((await ms.ReadObjectAsync(dc)).Value); Assert.AreEqual(0, syncSerializer); Assert.AreEqual(1, asyncSerializer); Assert.AreEqual(0, syncDeserializer); @@ -93,10 +97,10 @@ public async Task CustomAsync_Tests() } } - private async Task DeserializeTestObject(Stream stream, Type type, int version, ISerializerOptions? options, CancellationToken cancellationToken) + private async Task DeserializeTestObject(IDeserializationContext context, Type type) { AsyncDeserializer++; - return new TestObject() { Value = await stream.ReadBoolAsync(version, cancellationToken: cancellationToken) }; + return new TestObject() { Value = await context.Stream.ReadBoolAsync(context) }; } } } diff --git a/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs b/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs index bb97fa8..dc6d450 100644 --- a/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs +++ b/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs @@ -1,8 +1,9 @@ using System.Reflection; -using System.Runtime.CompilerServices; using wan24.Core; using wan24.StreamSerializerExtensions; +//TODO Add more tests + namespace Stream_Serializer_Extensions_Tests { [TestClass] diff --git a/src/Stream-Serializer-Extensions Tests/Serializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/Serializer_Tests.cs index 7ac4de3..6e5fed9 100644 --- a/src/Stream-Serializer-Extensions Tests/Serializer_Tests.cs +++ b/src/Stream-Serializer-Extensions Tests/Serializer_Tests.cs @@ -10,9 +10,9 @@ public class Serializer_Tests static Serializer_Tests() { - StreamSerializer.SyncSerializer[typeof(TestObject)] = (s, v) => s.Write(((TestObject)v!).Value); - StreamSerializer.AsyncSerializer[typeof(TestObject)] = (s, v, ct) => s.WriteAsync(((TestObject)v!).Value, ct); - StreamSerializer.SyncDeserializer[typeof(TestObject)] = (s, t, v, o) => new TestObject() { Value = s.ReadBool() }; + StreamSerializer.SyncSerializer[typeof(TestObject)] = (c, v) => c.Stream.Write(((TestObject)v!).Value, c); + StreamSerializer.AsyncSerializer[typeof(TestObject)] = (c, v) => c.Stream.WriteAsync(((TestObject)v!).Value, c); + StreamSerializer.SyncDeserializer[typeof(TestObject)] = (c, t) => new TestObject() { Value = c.Stream.ReadBool(c) }; StreamSerializer.AsyncDeserializer[typeof(TestObject)] = DeserializeTestObject; Types = new() { @@ -25,8 +25,8 @@ static Serializer_Tests() if (e.Type == null && Types.ContainsKey(e.Name)) e.Type = Types[e.Name]; }; } - private static async Task DeserializeTestObject(Stream stream, Type type, int version, ISerializerOptions? options, CancellationToken cancellationToken) - => new TestObject() { Value = await stream.ReadBoolAsync(version, cancellationToken: cancellationToken) }; + private static async Task DeserializeTestObject(IDeserializationContext context, Type type) + => new TestObject() { Value = await context.Stream.ReadBoolAsync(context) }; [TestMethod] public void Serializer_Test() @@ -59,300 +59,302 @@ public void Serializer_Test() ZValue = true }; using var ms = new MemoryStream(); - ms.Write(true) - .Write((sbyte)0) - .Write((byte)0) - .Write((short)0) - .Write((ushort)0) - .Write(0) - .Write((uint)0) - .Write((long)0) - .Write((ulong)0) - .Write((float)0) - .Write((double)0) - .Write((decimal)0) - .WriteNumber((sbyte)0) - .WriteNumber(sbyte.MinValue) - .WriteNumber(sbyte.MaxValue) - .WriteNumber((byte)0) - .WriteNumber(byte.MaxValue) - .WriteNumber((short)0) - .WriteNumber(short.MinValue) - .WriteNumber(short.MaxValue) - .WriteNumber((ushort)0) - .WriteNumber(ushort.MaxValue) - .WriteNumber(0) - .WriteNumber(int.MinValue) - .WriteNumber(int.MaxValue) - .WriteNumber((uint)0) - .WriteNumber(uint.MaxValue) - .WriteNumber((long)0) - .WriteNumber(long.MinValue) - .WriteNumber(long.MaxValue) - .WriteNumber((ulong)0) - .WriteNumber(ulong.MaxValue) - .WriteNumber((float)0) - .WriteNumber(float.MinValue) - .WriteNumber(float.MaxValue) - .WriteNumber((double)0) - .WriteNumber(double.MinValue) - .WriteNumber(double.MaxValue) - .WriteNumber((decimal)0) - .WriteNumber(decimal.MinValue) - .WriteNumber(decimal.MaxValue) - .WriteEnum(TestEnum.Zero) - .WriteString(true.ToString()) - .WriteBytes(new byte[] { 0 }) - .WriteArray(new bool[] { true, false }) - .WriteList(new List(new bool[] { true, false })) + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write(true, sc) + .Write((sbyte)0, sc) + .Write((byte)0, sc) + .Write((short)0, sc) + .Write((ushort)0, sc) + .Write(0, sc) + .Write((uint)0, sc) + .Write((long)0, sc) + .Write((ulong)0, sc) + .Write((float)0, sc) + .Write((double)0, sc) + .Write((decimal)0, sc) + .WriteNumber((sbyte)0, sc) + .WriteNumber(sbyte.MinValue, sc) + .WriteNumber(sbyte.MaxValue, sc) + .WriteNumber((byte)0, sc) + .WriteNumber(byte.MaxValue, sc) + .WriteNumber((short)0, sc) + .WriteNumber(short.MinValue, sc) + .WriteNumber(short.MaxValue, sc) + .WriteNumber((ushort)0, sc) + .WriteNumber(ushort.MaxValue, sc) + .WriteNumber(0, sc) + .WriteNumber(int.MinValue, sc) + .WriteNumber(int.MaxValue, sc) + .WriteNumber((uint)0, sc) + .WriteNumber(uint.MaxValue, sc) + .WriteNumber((long)0, sc) + .WriteNumber(long.MinValue, sc) + .WriteNumber(long.MaxValue, sc) + .WriteNumber((ulong)0, sc) + .WriteNumber(ulong.MaxValue, sc) + .WriteNumber((float)0, sc) + .WriteNumber(float.MinValue, sc) + .WriteNumber(float.MaxValue, sc) + .WriteNumber((double)0, sc) + .WriteNumber(double.MinValue, sc) + .WriteNumber(double.MaxValue, sc) + .WriteNumber((decimal)0, sc) + .WriteNumber(decimal.MinValue, sc) + .WriteNumber(decimal.MaxValue, sc) + .WriteEnum(TestEnum.Zero, sc) + .WriteString(true.ToString(), sc) + .WriteBytes(new byte[] { 0 }, sc) + .WriteArray(new bool[] { true, false }, sc) + .WriteList(new List(new bool[] { true, false }), sc) .WriteDict(new Dictionary() { {true.ToString(),true }, {false.ToString(),false } - }) - .WriteObject(new TestObject() { Value = true }) - .WriteSerialized(new TestObject2() { Value = true }) - .WriteNullable((bool?)null) - .WriteNullable(true) - .WriteNullable((sbyte?)null) - .WriteNullable((sbyte?)0) - .WriteNullable((byte?)null) - .WriteNullable((byte?)0) - .WriteNullable((short?)null) - .WriteNullable((short?)0) - .WriteNullable((ushort?)null) - .WriteNullable((ushort?)0) - .WriteNullable((int?)null) - .WriteNullable((int?)0) - .WriteNullable((uint?)null) - .WriteNullable((uint?)0) - .WriteNullable((long?)null) - .WriteNullable((long?)0) - .WriteNullable((ulong?)null) - .WriteNullable((ulong?)0) - .WriteNullable((float?)null) - .WriteNullable((float?)0) - .WriteNullable((double?)null) - .WriteNullable((double?)0) - .WriteNullable((decimal?)null) - .WriteNullable((decimal?)0) - .WriteEnumNullable((TestEnum?)null) - .WriteEnumNullable((TestEnum?)TestEnum.Zero) - .WriteStringNullable(null) - .WriteStringNullable((string?)true.ToString()) - .WriteBytesNullable(null) - .WriteBytesNullable((byte[]?)new byte[] { 0 }) - .WriteArrayNullable((bool[]?)null) - .WriteArrayNullable(new bool[] { true, false }) - .WriteListNullable((List?)null) - .WriteListNullable(new List(new bool[] { true, false })) - .WriteDictNullable((Dictionary?)null) + }, sc) + .WriteObject(new TestObject() { Value = true }, sc) + .WriteSerialized(new TestObject2() { Value = true }, sc) + .WriteNullable((bool?)null, sc) + .WriteNullable(true, sc) + .WriteNullable((sbyte?)null, sc) + .WriteNullable((sbyte?)0, sc) + .WriteNullable((byte?)null, sc) + .WriteNullable((byte?)0, sc) + .WriteNullable((short?)null, sc) + .WriteNullable((short?)0, sc) + .WriteNullable((ushort?)null, sc) + .WriteNullable((ushort?)0, sc) + .WriteNullable((int?)null, sc) + .WriteNullable((int?)0, sc) + .WriteNullable((uint?)null, sc) + .WriteNullable((uint?)0, sc) + .WriteNullable((long?)null, sc) + .WriteNullable((long?)0, sc) + .WriteNullable((ulong?)null, sc) + .WriteNullable((ulong?)0, sc) + .WriteNullable((float?)null, sc) + .WriteNullable((float?)0, sc) + .WriteNullable((double?)null, sc) + .WriteNullable((double?)0, sc) + .WriteNullable((decimal?)null, sc) + .WriteNullable((decimal?)0, sc) + .WriteEnumNullable((TestEnum?)null, sc) + .WriteEnumNullable((TestEnum?)TestEnum.Zero, sc) + .WriteStringNullable(null, sc) + .WriteStringNullable((string?)true.ToString(), sc) + .WriteBytesNullable(null, sc) + .WriteBytesNullable((byte[]?)new byte[] { 0 }, sc) + .WriteArrayNullable((bool[]?)null, sc) + .WriteArrayNullable(new bool[] { true, false }, sc) + .WriteListNullable((List?)null, sc) + .WriteListNullable(new List(new bool[] { true, false }), sc) + .WriteDictNullable((Dictionary?)null, sc) .WriteDictNullable(new Dictionary() { {true.ToString(),true }, {false.ToString(),false } - }) - .WriteObjectNullable((TestObject?)null) - .WriteObjectNullable(new TestObject() { Value = true }) - .WriteSerializedNullable((TestObject2?)null) - .WriteSerializedNullable(new TestObject2() { Value = true }) - .WriteAny(true) - .WriteAny((sbyte)0) - .WriteAny((byte)0) - .WriteAny((short)0) - .WriteAny((ushort)0) - .WriteAny(0) - .WriteAny((uint)0) - .WriteAny((long)0) - .WriteAny((ulong)0) - .WriteAny((float)0) - .WriteAny((double)0) - .WriteAny((decimal)0) - .WriteAny(TestEnum.Zero) - .WriteAny(true.ToString()) - .WriteAny(new byte[] { 0 }) - .WriteAny(new bool[] { true, false }) - .WriteAny(new List() { true, false }) + }, sc) + .WriteObjectNullable((TestObject?)null, sc) + .WriteObjectNullable(new TestObject() { Value = true }, sc) + .WriteSerializedNullable((TestObject2?)null, sc) + .WriteSerializedNullable(new TestObject2() { Value = true }, sc) + .WriteAny(true, sc) + .WriteAny((sbyte)0, sc) + .WriteAny((byte)0, sc) + .WriteAny((short)0, sc) + .WriteAny((ushort)0, sc) + .WriteAny(0, sc) + .WriteAny((uint)0, sc) + .WriteAny((long)0, sc) + .WriteAny((ulong)0, sc) + .WriteAny((float)0, sc) + .WriteAny((double)0, sc) + .WriteAny((decimal)0, sc) + .WriteAny(TestEnum.Zero, sc) + .WriteAny(true.ToString(), sc) + .WriteAny(new byte[] { 0 }, sc) + .WriteAny(new bool[] { true, false }, sc) + .WriteAny(new List() { true, false }, sc) .WriteAny(new Dictionary() { {true.ToString(),true }, {false.ToString(),false } - }) - .WriteAny(new TestObject() { Value = true }) - .WriteAny(new TestObject2() { Value = true }) - .WriteAnyNullable(null) - .WriteAnyObject(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObject(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }) - .WriteAnyObjectNullable((TestObject3?)null) - .WriteSerialized(test5) - .WriteSerialized(test5a) - .WriteSerialized(test5b) - .WriteFixedArray(fixedData.AsSpan()) - .WriteStruct(new TestStruct(true)); + }, sc) + .WriteAny(new TestObject() { Value = true }, sc) + .WriteAny(new TestObject2() { Value = true }, sc) + .WriteAnyNullable(null, sc) + .WriteAnyObject(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObject(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }, sc) + .WriteAnyObjectNullable((TestObject3?)null, sc) + .WriteSerialized(test5, sc) + .WriteSerialized(test5a, sc) + .WriteSerialized(test5b, sc) + .WriteFixedArray(fixedData.AsSpan(), sc) + .WriteStruct(new TestStruct(true), sc); ms.Position = 0; - Assert.IsTrue(ms.ReadBool()); - Assert.AreEqual((sbyte)0, ms.ReadOneSByte()); - Assert.AreEqual((byte)0, ms.ReadOneByte()); - Assert.AreEqual((short)0, ms.ReadShort()); - Assert.AreEqual((ushort)0, ms.ReadUShort()); - Assert.AreEqual(0, ms.ReadInt()); - Assert.AreEqual((uint)0, ms.ReadUInt()); - Assert.AreEqual(0, ms.ReadLong()); - Assert.AreEqual((ulong)0, ms.ReadULong()); - Assert.AreEqual(0, ms.ReadFloat()); - Assert.AreEqual(0, ms.ReadDouble()); - Assert.AreEqual(0, ms.ReadDecimal()); - Assert.AreEqual((sbyte)0, ms.ReadNumber()); - Assert.AreEqual(sbyte.MinValue, ms.ReadNumber()); - Assert.AreEqual(sbyte.MaxValue, ms.ReadNumber()); - Assert.AreEqual((byte)0, ms.ReadNumber()); - Assert.AreEqual(byte.MaxValue, ms.ReadNumber()); - Assert.AreEqual((short)0, ms.ReadNumber()); - Assert.AreEqual(short.MinValue, ms.ReadNumber()); - Assert.AreEqual(short.MaxValue, ms.ReadNumber()); - Assert.AreEqual((ushort)0, ms.ReadNumber()); - Assert.AreEqual(ushort.MaxValue, ms.ReadNumber()); - Assert.AreEqual(0, ms.ReadNumber()); - Assert.AreEqual(int.MinValue, ms.ReadNumber()); - Assert.AreEqual(int.MaxValue, ms.ReadNumber()); - Assert.AreEqual((uint)0, ms.ReadNumber()); - Assert.AreEqual(uint.MaxValue, ms.ReadNumber()); - Assert.AreEqual(0, ms.ReadNumber()); - Assert.AreEqual(long.MinValue, ms.ReadNumber()); - Assert.AreEqual(long.MaxValue, ms.ReadNumber()); - Assert.AreEqual((ulong)0, ms.ReadNumber()); - Assert.AreEqual(ulong.MaxValue, ms.ReadNumber()); - Assert.AreEqual(0, ms.ReadNumber()); - Assert.AreEqual(float.MinValue, ms.ReadNumber()); - Assert.AreEqual(float.MaxValue, ms.ReadNumber()); - Assert.AreEqual(0, ms.ReadNumber()); - Assert.AreEqual(double.MinValue, ms.ReadNumber()); - Assert.AreEqual(double.MaxValue, ms.ReadNumber()); - Assert.AreEqual(0, ms.ReadNumber()); - Assert.AreEqual(decimal.MinValue, ms.ReadNumber()); - Assert.AreEqual(decimal.MaxValue, ms.ReadNumber()); - Assert.AreEqual(TestEnum.Zero, ms.ReadEnum()); - Assert.AreEqual(true.ToString(), ms.ReadString()); - Assert.IsTrue(ms.ReadBytes().Value.SequenceEqual(new byte[] { 0 })); - Assert.IsTrue(ms.ReadArray().SequenceEqual(new bool[] { true, false })); - Assert.IsTrue(ms.ReadList().SequenceEqual(new bool[] { true, false })); - { - Dictionary temp = ms.ReadDict(); + Assert.IsTrue(ms.ReadBool(dc)); + Assert.AreEqual((sbyte)0, ms.ReadOneSByte(dc)); + Assert.AreEqual((byte)0, ms.ReadOneByte(dc)); + Assert.AreEqual((short)0, ms.ReadShort(dc)); + Assert.AreEqual((ushort)0, ms.ReadUShort(dc)); + Assert.AreEqual(0, ms.ReadInt(dc)); + Assert.AreEqual((uint)0, ms.ReadUInt(dc)); + Assert.AreEqual(0, ms.ReadLong(dc)); + Assert.AreEqual((ulong)0, ms.ReadULong(dc)); + Assert.AreEqual(0, ms.ReadFloat(dc)); + Assert.AreEqual(0, ms.ReadDouble(dc)); + Assert.AreEqual(0, ms.ReadDecimal(dc)); + Assert.AreEqual((sbyte)0, ms.ReadNumber(dc)); + Assert.AreEqual(sbyte.MinValue, ms.ReadNumber(dc)); + Assert.AreEqual(sbyte.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual((byte)0, ms.ReadNumber(dc)); + Assert.AreEqual(byte.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual((short)0, ms.ReadNumber(dc)); + Assert.AreEqual(short.MinValue, ms.ReadNumber(dc)); + Assert.AreEqual(short.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual((ushort)0, ms.ReadNumber(dc)); + Assert.AreEqual(ushort.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual(0, ms.ReadNumber(dc)); + Assert.AreEqual(int.MinValue, ms.ReadNumber(dc)); + Assert.AreEqual(int.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual((uint)0, ms.ReadNumber(dc)); + Assert.AreEqual(uint.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual(0, ms.ReadNumber(dc)); + Assert.AreEqual(long.MinValue, ms.ReadNumber(dc)); + Assert.AreEqual(long.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual((ulong)0, ms.ReadNumber(dc)); + Assert.AreEqual(ulong.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual(0, ms.ReadNumber(dc)); + Assert.AreEqual(float.MinValue, ms.ReadNumber(dc)); + Assert.AreEqual(float.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual(0, ms.ReadNumber(dc)); + Assert.AreEqual(double.MinValue, ms.ReadNumber(dc)); + Assert.AreEqual(double.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual(0, ms.ReadNumber(dc)); + Assert.AreEqual(decimal.MinValue, ms.ReadNumber(dc)); + Assert.AreEqual(decimal.MaxValue, ms.ReadNumber(dc)); + Assert.AreEqual(TestEnum.Zero, ms.ReadEnum(dc)); + Assert.AreEqual(true.ToString(), ms.ReadString(dc)); + Assert.IsTrue(ms.ReadBytes(dc).Value.SequenceEqual(new byte[] { 0 })); + Assert.IsTrue(ms.ReadArray(dc).SequenceEqual(new bool[] { true, false })); + Assert.IsTrue(ms.ReadList(dc).SequenceEqual(new bool[] { true, false })); + { + Dictionary temp = ms.ReadDict(dc); Assert.AreEqual(temp[true.ToString()], true); Assert.AreEqual(temp[false.ToString()], false); } - Assert.IsTrue(ms.ReadObject().Value); - Assert.IsTrue(ms.ReadSerialized().Value); - Assert.IsNull(ms.ReadBoolNullable()); - Assert.IsTrue(ms.ReadBoolNullable()); - Assert.IsNull(ms.ReadOneSByteNullable()); - Assert.AreEqual((sbyte)0, ms.ReadOneSByteNullable()); - Assert.IsNull(ms.ReadOneByteNullable()); - Assert.AreEqual((byte)0, ms.ReadOneByteNullable()); - Assert.IsNull(ms.ReadShortNullable()); - Assert.AreEqual((short)0, ms.ReadShortNullable()); - Assert.IsNull(ms.ReadUShortNullable()); - Assert.AreEqual((ushort)0, ms.ReadUShortNullable()); - Assert.IsNull(ms.ReadIntNullable()); - Assert.AreEqual(0, ms.ReadIntNullable()); - Assert.IsNull(ms.ReadUIntNullable()); - Assert.AreEqual((uint)0, ms.ReadUIntNullable()); - Assert.IsNull(ms.ReadLongNullable()); - Assert.AreEqual(0, ms.ReadLongNullable()); - Assert.IsNull(ms.ReadULongNullable()); - Assert.AreEqual((ulong)0, ms.ReadULongNullable()); - Assert.IsNull(ms.ReadFloatNullable()); - Assert.AreEqual(0, ms.ReadFloatNullable()); - Assert.IsNull(ms.ReadDoubleNullable()); - Assert.AreEqual(0, ms.ReadDoubleNullable()); - Assert.IsNull(ms.ReadDecimalNullable()); - Assert.AreEqual(0, ms.ReadDecimalNullable()); - Assert.IsNull(ms.ReadEnumNullable()); - Assert.AreEqual(TestEnum.Zero, ms.ReadEnumNullable()); - Assert.IsNull(ms.ReadStringNullable()); - Assert.AreEqual(true.ToString(), ms.ReadStringNullable()); - Assert.IsNull(ms.ReadBytesNullable()); - Assert.IsTrue(ms.ReadBytesNullable()?.Value.SequenceEqual(new byte[] { 0 })); - Assert.IsNull(ms.ReadArrayNullable()); - Assert.IsTrue(ms.ReadArrayNullable()?.SequenceEqual(new bool[] { true, false })); - Assert.IsNull(ms.ReadListNullable()); - Assert.IsTrue(ms.ReadListNullable()?.SequenceEqual(new bool[] { true, false })); - Assert.IsNull(ms.ReadDictNullable()); - Assert.IsNotNull(ms.ReadDictNullable()); - Assert.IsNull(ms.ReadObjectNullable()); - Assert.IsTrue(ms.ReadObjectNullable()?.Value); - Assert.IsNull(ms.ReadSerializedNullable()); - Assert.IsTrue(ms.ReadSerializedNullable()?.Value); - Assert.AreEqual(true, ms.ReadAny()); - Assert.AreEqual((sbyte)0, ms.ReadAny()); - Assert.AreEqual((byte)0, ms.ReadAny()); - Assert.AreEqual((short)0, ms.ReadAny()); - Assert.AreEqual((ushort)0, ms.ReadAny()); - Assert.AreEqual(0, ms.ReadAny()); - Assert.AreEqual((uint)0, ms.ReadAny()); - Assert.AreEqual((long)0, ms.ReadAny()); - Assert.AreEqual((ulong)0, ms.ReadAny()); - Assert.AreEqual((float)0, ms.ReadAny()); - Assert.AreEqual((double)0, ms.ReadAny()); - Assert.AreEqual((decimal)0, ms.ReadAny()); - Assert.AreEqual(TestEnum.Zero, ms.ReadAny()); - Assert.AreEqual(true.ToString(), ms.ReadAny()); - Assert.IsTrue(((byte[])ms.ReadAny()).SequenceEqual(new byte[] { 0 })); - Assert.IsTrue(((bool[])ms.ReadAny()).SequenceEqual(new bool[] { true, false })); - Assert.IsTrue(((List)ms.ReadAny()).ToArray().SequenceEqual(new bool[] { true, false })); - { - Dictionary temp = (Dictionary)ms.ReadAny(); + Assert.IsTrue(ms.ReadObject(dc).Value); + Assert.IsTrue(ms.ReadSerialized(dc).Value); + Assert.IsNull(ms.ReadBoolNullable(dc)); + Assert.IsTrue(ms.ReadBoolNullable(dc)); + Assert.IsNull(ms.ReadOneSByteNullable(dc)); + Assert.AreEqual((sbyte)0, ms.ReadOneSByteNullable(dc)); + Assert.IsNull(ms.ReadOneByteNullable(dc)); + Assert.AreEqual((byte)0, ms.ReadOneByteNullable(dc)); + Assert.IsNull(ms.ReadShortNullable(dc)); + Assert.AreEqual((short)0, ms.ReadShortNullable(dc)); + Assert.IsNull(ms.ReadUShortNullable(dc)); + Assert.AreEqual((ushort)0, ms.ReadUShortNullable(dc)); + Assert.IsNull(ms.ReadIntNullable(dc)); + Assert.AreEqual(0, ms.ReadIntNullable(dc)); + Assert.IsNull(ms.ReadUIntNullable(dc)); + Assert.AreEqual((uint)0, ms.ReadUIntNullable(dc)); + Assert.IsNull(ms.ReadLongNullable(dc)); + Assert.AreEqual(0, ms.ReadLongNullable(dc)); + Assert.IsNull(ms.ReadULongNullable(dc)); + Assert.AreEqual((ulong)0, ms.ReadULongNullable(dc)); + Assert.IsNull(ms.ReadFloatNullable(dc)); + Assert.AreEqual(0, ms.ReadFloatNullable(dc)); + Assert.IsNull(ms.ReadDoubleNullable(dc)); + Assert.AreEqual(0, ms.ReadDoubleNullable(dc)); + Assert.IsNull(ms.ReadDecimalNullable(dc)); + Assert.AreEqual(0, ms.ReadDecimalNullable(dc)); + Assert.IsNull(ms.ReadEnumNullable(dc)); + Assert.AreEqual(TestEnum.Zero, ms.ReadEnumNullable(dc)); + Assert.IsNull(ms.ReadStringNullable(dc)); + Assert.AreEqual(true.ToString(), ms.ReadStringNullable(dc)); + Assert.IsNull(ms.ReadBytesNullable(dc)); + Assert.IsTrue(ms.ReadBytesNullable(dc)?.Value.SequenceEqual(new byte[] { 0 })); + Assert.IsNull(ms.ReadArrayNullable(dc)); + Assert.IsTrue(ms.ReadArrayNullable(dc)?.SequenceEqual(new bool[] { true, false })); + Assert.IsNull(ms.ReadListNullable(dc)); + Assert.IsTrue(ms.ReadListNullable(dc)?.SequenceEqual(new bool[] { true, false })); + Assert.IsNull(ms.ReadDictNullable(dc)); + Assert.IsNotNull(ms.ReadDictNullable(dc)); + Assert.IsNull(ms.ReadObjectNullable(dc)); + Assert.IsTrue(ms.ReadObjectNullable(dc)?.Value); + Assert.IsNull(ms.ReadSerializedNullable(dc)); + Assert.IsTrue(ms.ReadSerializedNullable(dc)?.Value); + Assert.AreEqual(true, ms.ReadAny(dc)); + Assert.AreEqual((sbyte)0, ms.ReadAny(dc)); + Assert.AreEqual((byte)0, ms.ReadAny(dc)); + Assert.AreEqual((short)0, ms.ReadAny(dc)); + Assert.AreEqual((ushort)0, ms.ReadAny(dc)); + Assert.AreEqual(0, ms.ReadAny(dc)); + Assert.AreEqual((uint)0, ms.ReadAny(dc)); + Assert.AreEqual((long)0, ms.ReadAny(dc)); + Assert.AreEqual((ulong)0, ms.ReadAny(dc)); + Assert.AreEqual((float)0, ms.ReadAny(dc)); + Assert.AreEqual((double)0, ms.ReadAny(dc)); + Assert.AreEqual((decimal)0, ms.ReadAny(dc)); + Assert.AreEqual(TestEnum.Zero, ms.ReadAny(dc)); + Assert.AreEqual(true.ToString(), ms.ReadAny(dc)); + Assert.IsTrue(((byte[])ms.ReadAny(dc)).SequenceEqual(new byte[] { 0 })); + Assert.IsTrue(((bool[])ms.ReadAny(dc)).SequenceEqual(new bool[] { true, false })); + Assert.IsTrue(((List)ms.ReadAny(dc)).ToArray().SequenceEqual(new bool[] { true, false })); + { + Dictionary temp = (Dictionary)ms.ReadAny(dc); Assert.AreEqual(temp[true.ToString()], true); Assert.AreEqual(temp[false.ToString()], false); } - Assert.IsTrue(ms.ReadAny() is TestObject test1 && test1.Value); - Assert.IsTrue(ms.ReadAny() is TestObject2 test2 && test2.Value); - Assert.IsNull(ms.ReadAnyNullable()); + Assert.IsTrue(ms.ReadAny(dc) is TestObject test1 && test1.Value); + Assert.IsTrue(ms.ReadAny(dc) is TestObject2 test2 && test2.Value); + Assert.IsNull(ms.ReadAnyNullable(dc)); { - TestObject3 temp = ms.ReadAnyObject(); + TestObject3 temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3a temp = ms.ReadAnyObject(); + TestObject3a temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3b temp = ms.ReadAnyObject(); + TestObject3b temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); } { - TestObject4 temp = ms.ReadAnyObject(); + TestObject4 temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4a temp = ms.ReadAnyObject(); + TestObject4a temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4b temp = ms.ReadAnyObject(); + TestObject4b temp = ms.ReadAnyObject(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); } - Assert.IsNull(ms.ReadAnyObjectNullable()); + Assert.IsNull(ms.ReadAnyObjectNullable(dc)); new TestObject2().ToBytes().ToObject(); { Assert.AreEqual(stream.Length, stream.Position); - using TestObject5 test5_2 = ms.ReadSerialized(); + using TestObject5 test5_2 = ms.ReadSerialized(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -366,7 +368,7 @@ public void Serializer_Test() } { Assert.AreEqual(stream_a.Length, stream_a.Position); - using TestObject5a test5_2 = ms.ReadSerialized(); + using TestObject5a test5_2 = ms.ReadSerialized(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -379,7 +381,7 @@ public void Serializer_Test() Assert.IsTrue(stream_a.ToArray().SequenceEqual(buffer)); } { - using TestObject5b test5_2 = ms.ReadSerialized(); + using TestObject5b test5_2 = ms.ReadSerialized(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -387,11 +389,11 @@ public void Serializer_Test() Assert.IsTrue(test5_2.ZValue); } { - int[] fixedData2 = ms.ReadFixedArray(new int[fixedData.Length]); + int[] fixedData2 = ms.ReadFixedArray(new int[fixedData.Length], dc); Assert.IsTrue(fixedData.SequenceEqual(fixedData2)); } { - TestStruct obj = ms.ReadStruct(); + TestStruct obj = ms.ReadStruct(dc); Assert.IsTrue(obj.Value); } Assert.AreEqual(ms.Length, ms.Position); @@ -428,299 +430,301 @@ public async Task Serializer_TestAsync() ZValue = true }; using var ms = new MemoryStream(); - await ms.WriteAsync(true); - await ms.WriteAsync((sbyte)0); - await ms.WriteAsync((byte)0); - await ms.WriteAsync((short)0); - await ms.WriteAsync((ushort)0); - await ms.WriteAsync(0); - await ms.WriteAsync((uint)0); - await ms.WriteAsync((long)0); - await ms.WriteAsync((ulong)0); - await ms.WriteAsync((float)0); - await ms.WriteAsync((double)0); - await ms.WriteAsync((decimal)0); - await ms.WriteNumberAsync((sbyte)0); - await ms.WriteNumberAsync(sbyte.MinValue); - await ms.WriteNumberAsync(sbyte.MaxValue); - await ms.WriteNumberAsync((byte)0); - await ms.WriteNumberAsync(byte.MaxValue); - await ms.WriteNumberAsync((short)0); - await ms.WriteNumberAsync(short.MinValue); - await ms.WriteNumberAsync(short.MaxValue); - await ms.WriteNumberAsync((ushort)0); - await ms.WriteNumberAsync(ushort.MaxValue); - await ms.WriteNumberAsync(0); - await ms.WriteNumberAsync(int.MinValue); - await ms.WriteNumberAsync(int.MaxValue); - await ms.WriteNumberAsync((uint)0); - await ms.WriteNumberAsync(uint.MaxValue); - await ms.WriteNumberAsync((long)0); - await ms.WriteNumberAsync(long.MinValue); - await ms.WriteNumberAsync(long.MaxValue); - await ms.WriteNumberAsync((ulong)0); - await ms.WriteNumberAsync(ulong.MaxValue); - await ms.WriteNumberAsync((float)0); - await ms.WriteNumberAsync(float.MinValue); - await ms.WriteNumberAsync(float.MaxValue); - await ms.WriteNumberAsync((double)0); - await ms.WriteNumberAsync(double.MinValue); - await ms.WriteNumberAsync(double.MaxValue); - await ms.WriteNumberAsync((decimal)0); - await ms.WriteNumberAsync(decimal.MinValue); - await ms.WriteNumberAsync(decimal.MaxValue); - await ms.WriteEnumAsync(TestEnum.Zero); - await ms.WriteStringAsync(true.ToString()); - await ms.WriteBytesAsync(new byte[] { 0 }); - await ms.WriteArrayAsync(new bool[] { true, false }); - await ms.WriteListAsync(new List(new bool[] { true, false })); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync(true, sc); + await ms.WriteAsync((sbyte)0, sc); + await ms.WriteAsync((byte)0, sc); + await ms.WriteAsync((short)0, sc); + await ms.WriteAsync((ushort)0, sc); + await ms.WriteAsync(0, sc); + await ms.WriteAsync((uint)0, sc); + await ms.WriteAsync((long)0, sc); + await ms.WriteAsync((ulong)0, sc); + await ms.WriteAsync((float)0, sc); + await ms.WriteAsync((double)0, sc); + await ms.WriteAsync((decimal)0, sc); + await ms.WriteNumberAsync((sbyte)0, sc); + await ms.WriteNumberAsync(sbyte.MinValue, sc); + await ms.WriteNumberAsync(sbyte.MaxValue, sc); + await ms.WriteNumberAsync((byte)0, sc); + await ms.WriteNumberAsync(byte.MaxValue, sc); + await ms.WriteNumberAsync((short)0, sc); + await ms.WriteNumberAsync(short.MinValue, sc); + await ms.WriteNumberAsync(short.MaxValue, sc); + await ms.WriteNumberAsync((ushort)0, sc); + await ms.WriteNumberAsync(ushort.MaxValue, sc); + await ms.WriteNumberAsync(0, sc); + await ms.WriteNumberAsync(int.MinValue, sc); + await ms.WriteNumberAsync(int.MaxValue, sc); + await ms.WriteNumberAsync((uint)0, sc); + await ms.WriteNumberAsync(uint.MaxValue, sc); + await ms.WriteNumberAsync((long)0, sc); + await ms.WriteNumberAsync(long.MinValue, sc); + await ms.WriteNumberAsync(long.MaxValue, sc); + await ms.WriteNumberAsync((ulong)0, sc); + await ms.WriteNumberAsync(ulong.MaxValue, sc); + await ms.WriteNumberAsync((float)0, sc); + await ms.WriteNumberAsync(float.MinValue, sc); + await ms.WriteNumberAsync(float.MaxValue, sc); + await ms.WriteNumberAsync((double)0, sc); + await ms.WriteNumberAsync(double.MinValue, sc); + await ms.WriteNumberAsync(double.MaxValue, sc); + await ms.WriteNumberAsync((decimal)0, sc); + await ms.WriteNumberAsync(decimal.MinValue, sc); + await ms.WriteNumberAsync(decimal.MaxValue, sc); + await ms.WriteEnumAsync(TestEnum.Zero, sc); + await ms.WriteStringAsync(true.ToString(), sc); + await ms.WriteBytesAsync(new byte[] { 0 }, sc); + await ms.WriteArrayAsync(new bool[] { true, false }, sc); + await ms.WriteListAsync(new List(new bool[] { true, false }), sc); await ms.WriteDictAsync(new Dictionary() { {true.ToString(),true }, {false.ToString(),false } - }); - await ms.WriteObjectAsync(new TestObject() { Value = true }); - await ms.WriteSerializedAsync(new TestObject2() { Value = true }); - await ms.WriteNullableAsync((bool?)null); - await ms.WriteNullableAsync(true); - await ms.WriteNullableAsync((sbyte?)null); - await ms.WriteNullableAsync((sbyte?)0); - await ms.WriteNullableAsync((byte?)null); - await ms.WriteNullableAsync((byte?)0); - await ms.WriteNullableAsync((short?)null); - await ms.WriteNullableAsync((short?)0); - await ms.WriteNullableAsync((ushort?)null); - await ms.WriteNullableAsync((ushort?)0); - await ms.WriteNullableAsync((int?)null); - await ms.WriteNullableAsync((int?)0); - await ms.WriteNullableAsync((uint?)null); - await ms.WriteNullableAsync((uint?)0); - await ms.WriteNullableAsync((long?)null); - await ms.WriteNullableAsync((long?)0); - await ms.WriteNullableAsync((ulong?)null); - await ms.WriteNullableAsync((ulong?)0); - await ms.WriteNullableAsync((float?)null); - await ms.WriteNullableAsync((float?)0); - await ms.WriteNullableAsync((double?)null); - await ms.WriteNullableAsync((double?)0); - await ms.WriteNullableAsync((decimal?)null); - await ms.WriteNullableAsync((decimal?)0); - await ms.WriteEnumNullableAsync((TestEnum?)null); - await ms.WriteEnumNullableAsync((TestEnum?)TestEnum.Zero); - await ms.WriteStringNullableAsync(null); - await ms.WriteStringNullableAsync((string?)true.ToString()); - await ms.WriteBytesNullableAsync(null); - await ms.WriteBytesNullableAsync((byte[]?)new byte[] { 0 }); - await ms.WriteArrayNullableAsync((bool[]?)null); - await ms.WriteArrayNullableAsync(new bool[] { true, false }); - await ms.WriteListNullableAsync((List?)null); - await ms.WriteListNullableAsync(new List(new bool[] { true, false })); - await ms.WriteDictNullableAsync((Dictionary?)null); + }, sc); + await ms.WriteObjectAsync(new TestObject() { Value = true }, sc); + await ms.WriteSerializedAsync(new TestObject2() { Value = true }, sc); + await ms.WriteNullableAsync((bool?)null, sc); + await ms.WriteNullableAsync(true, sc); + await ms.WriteNullableAsync((sbyte?)null, sc); + await ms.WriteNullableAsync((sbyte?)0, sc); + await ms.WriteNullableAsync((byte?)null, sc); + await ms.WriteNullableAsync((byte?)0, sc); + await ms.WriteNullableAsync((short?)null, sc); + await ms.WriteNullableAsync((short?)0, sc); + await ms.WriteNullableAsync((ushort?)null, sc); + await ms.WriteNullableAsync((ushort?)0, sc); + await ms.WriteNullableAsync((int?)null, sc); + await ms.WriteNullableAsync((int?)0, sc); + await ms.WriteNullableAsync((uint?)null, sc); + await ms.WriteNullableAsync((uint?)0, sc); + await ms.WriteNullableAsync((long?)null, sc); + await ms.WriteNullableAsync((long?)0, sc); + await ms.WriteNullableAsync((ulong?)null, sc); + await ms.WriteNullableAsync((ulong?)0, sc); + await ms.WriteNullableAsync((float?)null, sc); + await ms.WriteNullableAsync((float?)0, sc); + await ms.WriteNullableAsync((double?)null, sc); + await ms.WriteNullableAsync((double?)0, sc); + await ms.WriteNullableAsync((decimal?)null, sc); + await ms.WriteNullableAsync((decimal?)0, sc); + await ms.WriteEnumNullableAsync((TestEnum?)null, sc); + await ms.WriteEnumNullableAsync((TestEnum?)TestEnum.Zero, sc); + await ms.WriteStringNullableAsync(null, sc); + await ms.WriteStringNullableAsync((string?)true.ToString(), sc); + await ms.WriteBytesNullableAsync(null, sc); + await ms.WriteBytesNullableAsync((byte[]?)new byte[] { 0 }, sc); + await ms.WriteArrayNullableAsync((bool[]?)null, sc); + await ms.WriteArrayNullableAsync(new bool[] { true, false }, sc); + await ms.WriteListNullableAsync((List?)null, sc); + await ms.WriteListNullableAsync(new List(new bool[] { true, false }), sc); + await ms.WriteDictNullableAsync((Dictionary?)null, sc); await ms.WriteDictNullableAsync(new Dictionary() { {true.ToString(),true }, {false.ToString(),false } - }); - await ms.WriteObjectNullableAsync((TestObject?)null); - await ms.WriteObjectNullableAsync(new TestObject() { Value = true }); - await ms.WriteSerializedNullableAsync((TestObject2?)null); - await ms.WriteSerializedNullableAsync(new TestObject2() { Value = true }); - await ms.WriteAnyAsync(true); - await ms.WriteAnyAsync((sbyte)0); - await ms.WriteAnyAsync((byte)0); - await ms.WriteAnyAsync((short)0); - await ms.WriteAnyAsync((ushort)0); - await ms.WriteAnyAsync(0); - await ms.WriteAnyAsync((uint)0); - await ms.WriteAnyAsync((long)0); - await ms.WriteAnyAsync((ulong)0); - await ms.WriteAnyAsync((float)0); - await ms.WriteAnyAsync((double)0); - await ms.WriteAnyAsync((decimal)0); - await ms.WriteAnyAsync(TestEnum.Zero); - await ms.WriteAnyAsync(true.ToString()); - await ms.WriteAnyAsync(new byte[] { 0 }); - await ms.WriteAnyAsync(new bool[] { true, false }); - await ms.WriteAnyAsync(new List() { true, false }); + }, sc); + await ms.WriteObjectNullableAsync((TestObject?)null, sc); + await ms.WriteObjectNullableAsync(new TestObject() { Value = true }, sc); + await ms.WriteSerializedNullableAsync((TestObject2?)null, sc); + await ms.WriteSerializedNullableAsync(new TestObject2() { Value = true }, sc); + await ms.WriteAnyAsync(true, sc); + await ms.WriteAnyAsync((sbyte)0, sc); + await ms.WriteAnyAsync((byte)0, sc); + await ms.WriteAnyAsync((short)0, sc); + await ms.WriteAnyAsync((ushort)0, sc); + await ms.WriteAnyAsync(0, sc); + await ms.WriteAnyAsync((uint)0, sc); + await ms.WriteAnyAsync((long)0, sc); + await ms.WriteAnyAsync((ulong)0, sc); + await ms.WriteAnyAsync((float)0, sc); + await ms.WriteAnyAsync((double)0, sc); + await ms.WriteAnyAsync((decimal)0, sc); + await ms.WriteAnyAsync(TestEnum.Zero, sc); + await ms.WriteAnyAsync(true.ToString(), sc); + await ms.WriteAnyAsync(new byte[] { 0 }, sc); + await ms.WriteAnyAsync(new bool[] { true, false }, sc); + await ms.WriteAnyAsync(new List() { true, false }, sc); await ms.WriteAnyAsync(new Dictionary() { {true.ToString(),true }, {false.ToString(),false } - }); - await ms.WriteAnyAsync(new TestObject() { Value = true }); - await ms.WriteAnyAsync(new TestObject2() { Value = true }); - await ms.WriteAnyNullableAsync(null); - await ms.WriteAnyObjectAsync(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }); - await ms.WriteAnyObjectAsync(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }); - await ms.WriteAnyObjectAsync(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }); - await ms.WriteAnyObjectAsync(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }); - await ms.WriteAnyObjectAsync(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }); - await ms.WriteAnyObjectAsync(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }); - await ms.WriteAnyObjectNullableAsync((TestObject3?)null); - await ms.WriteSerializedAsync(test5); - await ms.WriteSerializedAsync(test5a); - await ms.WriteSerializedAsync(test5b); - await ms.WriteFixedArrayAsync(fixedData.AsMemory()); - await ms.WriteStructAsync(new TestStruct(true)); + }, sc); + await ms.WriteAnyAsync(new TestObject() { Value = true }, sc); + await ms.WriteAnyAsync(new TestObject2() { Value = true }, sc); + await ms.WriteAnyNullableAsync(null, sc); + await ms.WriteAnyObjectAsync(new TestObject3() { Field1 = true, Field2 = true, Field3 = true }, sc); + await ms.WriteAnyObjectAsync(new TestObject3a() { Field1 = true, Field2 = true, Field3 = true }, sc); + await ms.WriteAnyObjectAsync(new TestObject3b() { Field1 = true, Field2 = true, Field3 = true }, sc); + await ms.WriteAnyObjectAsync(new TestObject4() { Field1 = true, Field2 = true, Field3 = true }, sc); + await ms.WriteAnyObjectAsync(new TestObject4a() { Field1 = true, Field2 = true, Field3 = true }, sc); + await ms.WriteAnyObjectAsync(new TestObject4b() { Field1 = true, Field2 = true, Field3 = true }, sc); + await ms.WriteAnyObjectNullableAsync((TestObject3?)null, sc); + await ms.WriteSerializedAsync(test5, sc); + await ms.WriteSerializedAsync(test5a, sc); + await ms.WriteSerializedAsync(test5b, sc); + await ms.WriteFixedArrayAsync(fixedData.AsMemory(), sc); + await ms.WriteStructAsync(new TestStruct(true), sc); ms.Position = 0; - Assert.IsTrue(await ms.ReadBoolAsync()); - Assert.AreEqual((sbyte)0, await ms.ReadOneSByteAsync()); - Assert.AreEqual((byte)0, await ms.ReadOneByteAsync()); - Assert.AreEqual((short)0, await ms.ReadShortAsync()); - Assert.AreEqual((ushort)0, await ms.ReadUShortAsync()); - Assert.AreEqual(0, await ms.ReadIntAsync()); - Assert.AreEqual((uint)0, await ms.ReadUIntAsync()); - Assert.AreEqual(0, await ms.ReadLongAsync()); - Assert.AreEqual((ulong)0, await ms.ReadULongAsync()); - Assert.AreEqual(0, await ms.ReadFloatAsync()); - Assert.AreEqual(0, await ms.ReadDoubleAsync()); - Assert.AreEqual(0, await ms.ReadDecimalAsync()); - Assert.AreEqual((sbyte)0, await ms.ReadNumberAsync()); - Assert.AreEqual(sbyte.MinValue, await ms.ReadNumberAsync()); - Assert.AreEqual(sbyte.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual((byte)0, await ms.ReadNumberAsync()); - Assert.AreEqual(byte.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual((short)0, await ms.ReadNumberAsync()); - Assert.AreEqual(short.MinValue, await ms.ReadNumberAsync()); - Assert.AreEqual(short.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual((ushort)0, await ms.ReadNumberAsync()); - Assert.AreEqual(ushort.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual(0, await ms.ReadNumberAsync()); - Assert.AreEqual(int.MinValue, await ms.ReadNumberAsync()); - Assert.AreEqual(int.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual((uint)0, await ms.ReadNumberAsync()); - Assert.AreEqual(uint.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual(0, await ms.ReadNumberAsync()); - Assert.AreEqual(long.MinValue, await ms.ReadNumberAsync()); - Assert.AreEqual(long.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual((ulong)0, await ms.ReadNumberAsync()); - Assert.AreEqual(ulong.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual(0, await ms.ReadNumberAsync()); - Assert.AreEqual(float.MinValue, await ms.ReadNumberAsync()); - Assert.AreEqual(float.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual(0, await ms.ReadNumberAsync()); - Assert.AreEqual(double.MinValue, await ms.ReadNumberAsync()); - Assert.AreEqual(double.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual(0, await ms.ReadNumberAsync()); - Assert.AreEqual(decimal.MinValue, await ms.ReadNumberAsync()); - Assert.AreEqual(decimal.MaxValue, await ms.ReadNumberAsync()); - Assert.AreEqual(TestEnum.Zero, await ms.ReadEnumAsync()); - Assert.AreEqual(true.ToString(), await ms.ReadStringAsync()); - Assert.IsTrue((await ms.ReadBytesAsync()).Value.SequenceEqual(new byte[] { 0 })); - Assert.IsTrue((await ms.ReadArrayAsync()).SequenceEqual(new bool[] { true, false })); - Assert.IsTrue((await ms.ReadListAsync()).SequenceEqual(new bool[] { true, false })); - { - Dictionary temp = await ms.ReadDictAsync(); + Assert.IsTrue(await ms.ReadBoolAsync(dc)); + Assert.AreEqual((sbyte)0, await ms.ReadOneSByteAsync(dc)); + Assert.AreEqual((byte)0, await ms.ReadOneByteAsync(dc)); + Assert.AreEqual((short)0, await ms.ReadShortAsync(dc)); + Assert.AreEqual((ushort)0, await ms.ReadUShortAsync(dc)); + Assert.AreEqual(0, await ms.ReadIntAsync(dc)); + Assert.AreEqual((uint)0, await ms.ReadUIntAsync(dc)); + Assert.AreEqual(0, await ms.ReadLongAsync(dc)); + Assert.AreEqual((ulong)0, await ms.ReadULongAsync(dc)); + Assert.AreEqual(0, await ms.ReadFloatAsync(dc)); + Assert.AreEqual(0, await ms.ReadDoubleAsync(dc)); + Assert.AreEqual(0, await ms.ReadDecimalAsync(dc)); + Assert.AreEqual((sbyte)0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(sbyte.MinValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(sbyte.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual((byte)0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(byte.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual((short)0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(short.MinValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(short.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual((ushort)0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(ushort.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(int.MinValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(int.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual((uint)0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(uint.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(long.MinValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(long.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual((ulong)0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(ulong.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(float.MinValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(float.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(double.MinValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(double.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(0, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(decimal.MinValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(decimal.MaxValue, await ms.ReadNumberAsync(dc)); + Assert.AreEqual(TestEnum.Zero, await ms.ReadEnumAsync(dc)); + Assert.AreEqual(true.ToString(), await ms.ReadStringAsync(dc)); + Assert.IsTrue((await ms.ReadBytesAsync(dc)).Value.SequenceEqual(new byte[] { 0 })); + Assert.IsTrue((await ms.ReadArrayAsync(dc)).SequenceEqual(new bool[] { true, false })); + Assert.IsTrue((await ms.ReadListAsync(dc)).SequenceEqual(new bool[] { true, false })); + { + Dictionary temp = await ms.ReadDictAsync(dc); Assert.AreEqual(temp[true.ToString()], true); Assert.AreEqual(temp[false.ToString()], false); } - Assert.IsTrue((await ms.ReadObjectAsync()).Value); - Assert.IsTrue((await ms.ReadObjectAsync()).Value); - Assert.IsNull(await ms.ReadBoolNullableAsync()); - Assert.IsTrue(await ms.ReadBoolNullableAsync()); - Assert.IsNull(await ms.ReadOneSByteNullableAsync()); - Assert.AreEqual((sbyte)0, await ms.ReadOneSByteNullableAsync()); - Assert.IsNull(await ms.ReadOneByteNullableAsync()); - Assert.AreEqual((byte)0, await ms.ReadOneByteNullableAsync()); - Assert.IsNull(await ms.ReadShortNullableAsync()); - Assert.AreEqual((short)0, await ms.ReadShortNullableAsync()); - Assert.IsNull(await ms.ReadUShortNullableAsync()); - Assert.AreEqual((ushort)0, await ms.ReadUShortNullableAsync()); - Assert.IsNull(await ms.ReadIntNullableAsync()); - Assert.AreEqual(0, await ms.ReadIntNullableAsync()); - Assert.IsNull(await ms.ReadUIntNullableAsync()); - Assert.AreEqual((uint)0, await ms.ReadUIntNullableAsync()); - Assert.IsNull(await ms.ReadLongNullableAsync()); - Assert.AreEqual(0, await ms.ReadLongNullableAsync()); - Assert.IsNull(await ms.ReadULongNullableAsync()); - Assert.AreEqual((ulong)0, await ms.ReadULongNullableAsync()); - Assert.IsNull(await ms.ReadFloatNullableAsync()); - Assert.AreEqual(0, await ms.ReadFloatNullableAsync()); - Assert.IsNull(await ms.ReadDoubleNullableAsync()); - Assert.AreEqual(0, await ms.ReadDoubleNullableAsync()); - Assert.IsNull(await ms.ReadDecimalNullableAsync()); - Assert.AreEqual(0, await ms.ReadDecimalNullableAsync()); - Assert.IsNull(await ms.ReadEnumNullableAsync()); - Assert.AreEqual(TestEnum.Zero, await ms.ReadEnumNullableAsync()); - Assert.IsNull(await ms.ReadStringNullableAsync()); - Assert.AreEqual(true.ToString(), await ms.ReadStringNullableAsync()); - Assert.IsNull(await ms.ReadBytesNullableAsync()); - Assert.IsTrue((await ms.ReadBytesNullableAsync())?.Value.SequenceEqual(new byte[] { 0 })); - Assert.IsNull(await ms.ReadArrayNullableAsync()); - Assert.IsTrue((await ms.ReadArrayNullableAsync())?.SequenceEqual(new bool[] { true, false })); - Assert.IsNull(await ms.ReadListNullableAsync()); - Assert.IsTrue((await ms.ReadListNullableAsync())?.SequenceEqual(new bool[] { true, false })); - Assert.IsNull(await ms.ReadDictNullableAsync()); - Assert.IsNotNull(await ms.ReadDictNullableAsync()); - Assert.IsNull(await ms.ReadObjectNullableAsync()); - Assert.IsTrue((await ms.ReadObjectNullableAsync())?.Value); - Assert.IsNull(await ms.ReadSerializedNullableAsync()); - Assert.IsTrue((await ms.ReadSerializedNullableAsync())?.Value); - Assert.AreEqual(true, await ms.ReadAnyAsync()); - Assert.AreEqual((sbyte)0, await ms.ReadAnyAsync()); - Assert.AreEqual((byte)0, await ms.ReadAnyAsync()); - Assert.AreEqual((short)0, await ms.ReadAnyAsync()); - Assert.AreEqual((ushort)0, await ms.ReadAnyAsync()); - Assert.AreEqual(0, await ms.ReadAnyAsync()); - Assert.AreEqual((uint)0, await ms.ReadAnyAsync()); - Assert.AreEqual((long)0, await ms.ReadAnyAsync()); - Assert.AreEqual((ulong)0, await ms.ReadAnyAsync()); - Assert.AreEqual((float)0, await ms.ReadAnyAsync()); - Assert.AreEqual((double)0, await ms.ReadAnyAsync()); - Assert.AreEqual((decimal)0, await ms.ReadAnyAsync()); - Assert.AreEqual(TestEnum.Zero, await ms.ReadAnyAsync()); - Assert.AreEqual(true.ToString(), await ms.ReadAnyAsync()); - Assert.IsTrue(((byte[])await ms.ReadAnyAsync()).SequenceEqual(new byte[] { 0 })); - Assert.IsTrue(((bool[])await ms.ReadAnyAsync()).SequenceEqual(new bool[] { true, false })); - Assert.IsTrue(((List)await ms.ReadAnyAsync()).ToArray().SequenceEqual(new bool[] { true, false })); - { - Dictionary temp = (Dictionary)await ms.ReadAnyAsync(); + Assert.IsTrue((await ms.ReadObjectAsync(dc)).Value); + Assert.IsTrue((await ms.ReadObjectAsync(dc)).Value); + Assert.IsNull(await ms.ReadBoolNullableAsync(dc)); + Assert.IsTrue(await ms.ReadBoolNullableAsync(dc)); + Assert.IsNull(await ms.ReadOneSByteNullableAsync(dc)); + Assert.AreEqual((sbyte)0, await ms.ReadOneSByteNullableAsync(dc)); + Assert.IsNull(await ms.ReadOneByteNullableAsync(dc)); + Assert.AreEqual((byte)0, await ms.ReadOneByteNullableAsync(dc)); + Assert.IsNull(await ms.ReadShortNullableAsync(dc)); + Assert.AreEqual((short)0, await ms.ReadShortNullableAsync(dc)); + Assert.IsNull(await ms.ReadUShortNullableAsync(dc)); + Assert.AreEqual((ushort)0, await ms.ReadUShortNullableAsync(dc)); + Assert.IsNull(await ms.ReadIntNullableAsync(dc)); + Assert.AreEqual(0, await ms.ReadIntNullableAsync(dc)); + Assert.IsNull(await ms.ReadUIntNullableAsync(dc)); + Assert.AreEqual((uint)0, await ms.ReadUIntNullableAsync(dc)); + Assert.IsNull(await ms.ReadLongNullableAsync(dc)); + Assert.AreEqual(0, await ms.ReadLongNullableAsync(dc)); + Assert.IsNull(await ms.ReadULongNullableAsync(dc)); + Assert.AreEqual((ulong)0, await ms.ReadULongNullableAsync(dc)); + Assert.IsNull(await ms.ReadFloatNullableAsync(dc)); + Assert.AreEqual(0, await ms.ReadFloatNullableAsync(dc)); + Assert.IsNull(await ms.ReadDoubleNullableAsync(dc)); + Assert.AreEqual(0, await ms.ReadDoubleNullableAsync(dc)); + Assert.IsNull(await ms.ReadDecimalNullableAsync(dc)); + Assert.AreEqual(0, await ms.ReadDecimalNullableAsync(dc)); + Assert.IsNull(await ms.ReadEnumNullableAsync(dc)); + Assert.AreEqual(TestEnum.Zero, await ms.ReadEnumNullableAsync(dc)); + Assert.IsNull(await ms.ReadStringNullableAsync(dc)); + Assert.AreEqual(true.ToString(), await ms.ReadStringNullableAsync(dc)); + Assert.IsNull(await ms.ReadBytesNullableAsync(dc)); + Assert.IsTrue((await ms.ReadBytesNullableAsync(dc))?.Value.SequenceEqual(new byte[] { 0 })); + Assert.IsNull(await ms.ReadArrayNullableAsync(dc)); + Assert.IsTrue((await ms.ReadArrayNullableAsync(dc))?.SequenceEqual(new bool[] { true, false })); + Assert.IsNull(await ms.ReadListNullableAsync(dc)); + Assert.IsTrue((await ms.ReadListNullableAsync(dc))?.SequenceEqual(new bool[] { true, false })); + Assert.IsNull(await ms.ReadDictNullableAsync(dc)); + Assert.IsNotNull(await ms.ReadDictNullableAsync(dc)); + Assert.IsNull(await ms.ReadObjectNullableAsync(dc)); + Assert.IsTrue((await ms.ReadObjectNullableAsync(dc))?.Value); + Assert.IsNull(await ms.ReadSerializedNullableAsync(dc)); + Assert.IsTrue((await ms.ReadSerializedNullableAsync(dc))?.Value); + Assert.AreEqual(true, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((sbyte)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((byte)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((short)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((ushort)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual(0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((uint)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((long)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((ulong)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((float)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((double)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual((decimal)0, await ms.ReadAnyAsync(dc)); + Assert.AreEqual(TestEnum.Zero, await ms.ReadAnyAsync(dc)); + Assert.AreEqual(true.ToString(), await ms.ReadAnyAsync(dc)); + Assert.IsTrue(((byte[])await ms.ReadAnyAsync(dc)).SequenceEqual(new byte[] { 0 })); + Assert.IsTrue(((bool[])await ms.ReadAnyAsync(dc)).SequenceEqual(new bool[] { true, false })); + Assert.IsTrue(((List)await ms.ReadAnyAsync(dc)).ToArray().SequenceEqual(new bool[] { true, false })); + { + Dictionary temp = (Dictionary)await ms.ReadAnyAsync(dc); Assert.AreEqual(temp[true.ToString()], true); Assert.AreEqual(temp[false.ToString()], false); } - Assert.IsTrue(await ms.ReadAnyAsync() is TestObject test1 && test1.Value); - Assert.IsTrue(await ms.ReadAnyAsync() is TestObject2 test2 && test2.Value); - Assert.IsNull(await ms.ReadAnyNullableAsync()); + Assert.IsTrue(await ms.ReadAnyAsync(dc) is TestObject test1 && test1.Value); + Assert.IsTrue(await ms.ReadAnyAsync(dc) is TestObject2 test2 && test2.Value); + Assert.IsNull(await ms.ReadAnyNullableAsync(dc)); { - TestObject3 temp = await ms.ReadAnyObjectAsync(); + TestObject3 temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3a temp = await ms.ReadAnyObjectAsync(); + TestObject3a temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject3b temp = await ms.ReadAnyObjectAsync(); + TestObject3b temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); } { - TestObject4 temp = await ms.ReadAnyObjectAsync(); + TestObject4 temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsFalse(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4a temp = await ms.ReadAnyObjectAsync(); + TestObject4a temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsTrue(temp.Field3); } { - TestObject4b temp = await ms.ReadAnyObjectAsync(); + TestObject4b temp = await ms.ReadAnyObjectAsync(dc); Assert.IsTrue(temp.Field1); Assert.IsTrue(temp.Field2); Assert.IsFalse(temp.Field3); } - Assert.IsNull(ms.ReadAnyObjectNullable()); + Assert.IsNull(ms.ReadAnyObjectNullable(dc)); { Assert.AreEqual(stream.Length, stream.Position); - using TestObject5 test5_2 = await ms.ReadSerializedAsync(); + using TestObject5 test5_2 = await ms.ReadSerializedAsync(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -734,7 +738,7 @@ await ms.WriteAnyAsync(new Dictionary() } { Assert.AreEqual(stream_a.Length, stream_a.Position); - using TestObject5a test5_2 = await ms.ReadSerializedAsync(); + using TestObject5a test5_2 = await ms.ReadSerializedAsync(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -747,7 +751,7 @@ await ms.WriteAnyAsync(new Dictionary() Assert.IsTrue(stream_a.ToArray().SequenceEqual(buffer)); } { - using TestObject5b test5_2 = await ms.ReadSerializedAsync(); + using TestObject5b test5_2 = await ms.ReadSerializedAsync(dc); using Stream? stream2 = test5_2.Stream; Assert.IsTrue(test5_2.AValue); Assert.IsFalse(test5_2.BValue); @@ -755,11 +759,11 @@ await ms.WriteAnyAsync(new Dictionary() Assert.IsTrue(test5_2.ZValue); } { - int[] fixedData2 = await ms.ReadFixedArrayAsync(new int[fixedData.Length]); + int[] fixedData2 = await ms.ReadFixedArrayAsync(new int[fixedData.Length], dc); Assert.IsTrue(fixedData.SequenceEqual(fixedData2)); } { - TestStruct obj = await ms.ReadStructAsync(); + TestStruct obj = await ms.ReadStructAsync(dc); Assert.IsTrue(obj.Value); } Assert.AreEqual(ms.Length, ms.Position); diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs index f9158d9..11e16b0 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs @@ -13,6 +13,8 @@ public void Any_Tests() try { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); using MemoryStream test = new(); test.Write(new byte[] { 1, 2, 3 }); test.Position = 0; @@ -67,21 +69,21 @@ public void Any_Tests() { var info = data[i]; Logging.WriteInfo(info.Object.GetType().ToString()); - ms.WriteAny(info.Object); + ms.WriteAny(info.Object, sc); ms.Position = 0; - b = ms.ReadAny(); + b = ms.ReadAny(dc); info.Comparer(info.Object, b); ms.SetLength(0); ms.Position = 0; } - ms.WriteAnyNullable(true); + ms.WriteAnyNullable(true, sc); ms.Position = 0; - Assert.AreEqual(true, ms.ReadAnyNullable()); + Assert.AreEqual(true, ms.ReadAnyNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteAnyNullable(null); + ms.WriteAnyNullable(null, sc); ms.Position = 0; - Assert.IsNull(ms.ReadAnyNullable()); + Assert.IsNull(ms.ReadAnyNullable(dc)); } finally { @@ -96,6 +98,8 @@ public async Task AnyAsync_Tests() try { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); using MemoryStream test = new(); test.Write(new byte[] { 1, 2, 3 }); test.Position = 0; @@ -150,21 +154,21 @@ public async Task AnyAsync_Tests() { var info = data[i]; Logging.WriteInfo(info.Object.GetType().ToString()); - await ms.WriteAnyAsync(info.Object); + await ms.WriteAnyAsync(info.Object, sc); ms.Position = 0; - b = await ms.ReadAnyAsync(); + b = await ms.ReadAnyAsync(dc); info.Comparer(info.Object, b); ms.SetLength(0); ms.Position = 0; } - await ms.WriteAnyNullableAsync(true); + await ms.WriteAnyNullableAsync(true, sc); ms.Position = 0; - Assert.AreEqual(true, await ms.ReadAnyNullableAsync()); + Assert.AreEqual(true, await ms.ReadAnyNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteAnyNullableAsync(null); + await ms.WriteAnyNullableAsync(null, sc); ms.Position = 0; - Assert.IsNull(await ms.ReadAnyNullableAsync()); + Assert.IsNull(await ms.ReadAnyNullableAsync(dc)); } finally { diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs index 914a242..4b98c7e 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs @@ -1,5 +1,4 @@ -using Microsoft.Extensions.Primitives; -using System.Collections; +using System.Collections; using System.Security.Cryptography; using wan24.Core; using wan24.StreamSerializerExtensions; @@ -12,32 +11,36 @@ public partial class StreamExtensions_Tests public void Array_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); { bool[] arr = new bool[] { true, false }; - ms.WriteArray(arr); + ms.WriteArray(arr, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - CompareArray(arr, ms.ReadArray()); + CompareArray(arr, ms.ReadArray(dc)); arr = Array.Empty(); ms.SetLength(0); ms.Position = 0; - ms.WriteArray(arr); + ms.WriteArray(arr, sc); Assert.AreEqual(1L, ms.Length); ms.SetLength(0); ms.Position = 0; - ms.WriteArrayNullable(null); + ms.WriteArrayNullable(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadArrayNullable()); + Assert.IsNull(ms.ReadArrayNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteArrayNullable(arr); + ms.WriteArrayNullable(arr, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNotNull(ms.ReadArrayNullable()); + Assert.IsNotNull(ms.ReadArrayNullable(dc)); } foreach (bool nullable in new bool[] { false, true }) { + sc.Nullable = nullable; + dc.Nullable = nullable; Logging.WriteInfo($"Nullable values: {nullable}"); using TestObject5 test = new(); using MemoryStream testMs = new(); @@ -84,9 +87,9 @@ public void Array_Tests() { ms.SetLength(0); ms.Position = 0; - ms.WriteArray(arr, valuesNullable: nullable); + ms.WriteArray(arr, sc); ms.Position = 0; - CompareArray(arr, ms.ReadArray(valuesNullable: nullable)); + CompareArray(arr, ms.ReadArray(dc)); } finally { @@ -99,28 +102,30 @@ public void Array_Tests() public async Task ArrayAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); bool[] arr = new bool[] { true, false }; - await ms.WriteArrayAsync(arr); + await ms.WriteArrayAsync(arr, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - CompareArray(arr, await ms.ReadArrayAsync()); + CompareArray(arr, await ms.ReadArrayAsync(dc)); arr = Array.Empty(); ms.SetLength(0); ms.Position = 0; - await ms.WriteArrayAsync(arr); + await ms.WriteArrayAsync(arr, sc); Assert.AreEqual(1L, ms.Length); ms.SetLength(0); ms.Position = 0; - await ms.WriteArrayNullableAsync(null); + await ms.WriteArrayNullableAsync(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadArrayNullableAsync()); + Assert.IsNull(await ms.ReadArrayNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteArrayNullableAsync(arr); + await ms.WriteArrayNullableAsync(arr, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNotNull(await ms.ReadArrayNullableAsync()); + Assert.IsNotNull(await ms.ReadArrayNullableAsync(dc)); } private static void CompareArray(Array a, Array b) diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs index f3315df..90bb725 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs @@ -8,56 +8,60 @@ public partial class StreamExtensions_Tests public void Bool_Tests() { using MemoryStream ms = new(); - ms.Write(true); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write(true, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsTrue(ms.ReadBool()); + Assert.IsTrue(ms.ReadBool(dc)); ms.SetLength(0); ms.Position = 0; - ms.Write(false); + ms.Write(false, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsFalse(ms.ReadBool()); + Assert.IsFalse(ms.ReadBool(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((bool?)null); + ms.WriteNullable((bool?)null, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsNull(ms.ReadBoolNullable()); + Assert.IsNull(ms.ReadBoolNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(true); + ms.WriteNullable(true, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsTrue(ms.ReadBoolNullable()); + Assert.IsTrue(ms.ReadBoolNullable(dc)); } [TestMethod] public async Task BoolAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync(true); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync(true, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsTrue(await ms.ReadBoolAsync()); + Assert.IsTrue(await ms.ReadBoolAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteAsync(false); + await ms.WriteAsync(false, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsFalse(await ms.ReadBoolAsync()); + Assert.IsFalse(await ms.ReadBoolAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((bool?)null); + await ms.WriteNullableAsync((bool?)null, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsNull(await ms.ReadBoolNullableAsync()); + Assert.IsNull(await ms.ReadBoolNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(true); + await ms.WriteNullableAsync(true, sc); Assert.AreEqual(1L, ms.Position); ms.Position = 0; - Assert.IsTrue(await ms.ReadBoolNullableAsync()); + Assert.IsTrue(await ms.ReadBoolNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs index 1388fb7..fe91e01 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs @@ -8,160 +8,168 @@ public partial class StreamExtensions_Tests public void SByte_Tests() { using MemoryStream ms = new(); - ms.Write((sbyte)-123); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((sbyte)-123, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((sbyte)-123, ms.ReadOneSByte()); + Assert.AreEqual((sbyte)-123, ms.ReadOneSByte(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((sbyte)-123); + ms.WriteNullable((sbyte)-123, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((sbyte)-123, ms.ReadOneSByteNullable()); + Assert.AreEqual((sbyte)-123, ms.ReadOneSByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((sbyte?)null); + ms.WriteNullable((sbyte?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadOneByteNullable()); + Assert.IsNull(ms.ReadOneByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(sbyte.MinValue); + ms.WriteNullable(sbyte.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(sbyte.MinValue, ms.ReadOneSByteNullable()); + Assert.AreEqual(sbyte.MinValue, ms.ReadOneSByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(sbyte.MaxValue); + ms.WriteNullable(sbyte.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(sbyte.MaxValue, ms.ReadOneSByteNullable()); + Assert.AreEqual(sbyte.MaxValue, ms.ReadOneSByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((sbyte)0); + ms.WriteNullable((sbyte)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((sbyte)0, ms.ReadOneSByteNullable()); + Assert.AreEqual((sbyte)0, ms.ReadOneSByteNullable(dc)); } [TestMethod] public async Task SByteAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((sbyte)-123); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((sbyte)-123, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((sbyte)-123, await ms.ReadOneSByteAsync()); + Assert.AreEqual((sbyte)-123, await ms.ReadOneSByteAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((sbyte)-123); + await ms.WriteNullableAsync((sbyte)-123, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((sbyte)-123, await ms.ReadOneSByteNullableAsync()); + Assert.AreEqual((sbyte)-123, await ms.ReadOneSByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((sbyte?)null); + await ms.WriteNullableAsync((sbyte?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadOneByteNullableAsync()); + Assert.IsNull(await ms.ReadOneByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(sbyte.MinValue); + await ms.WriteNullableAsync(sbyte.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(sbyte.MinValue, await ms.ReadOneSByteNullableAsync()); + Assert.AreEqual(sbyte.MinValue, await ms.ReadOneSByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(sbyte.MaxValue); + await ms.WriteNullableAsync(sbyte.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(sbyte.MaxValue, await ms.ReadOneSByteNullableAsync()); + Assert.AreEqual(sbyte.MaxValue, await ms.ReadOneSByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((sbyte)0); + await ms.WriteNullableAsync((sbyte)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((sbyte)0, await ms.ReadOneSByteNullableAsync()); + Assert.AreEqual((sbyte)0, await ms.ReadOneSByteNullableAsync(dc)); } [TestMethod] public void Byte_Tests() { using MemoryStream ms = new(); - ms.Write((byte)123); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((byte)123, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((byte)123, ms.ReadOneByte()); + Assert.AreEqual((byte)123, ms.ReadOneByte(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((byte)123); + ms.WriteNullable((byte)123, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((byte)123, ms.ReadOneByteNullable()); + Assert.AreEqual((byte)123, ms.ReadOneByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((byte?)null); + ms.WriteNullable((byte?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadOneByteNullable()); + Assert.IsNull(ms.ReadOneByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(byte.MinValue); + ms.WriteNullable(byte.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(byte.MinValue, ms.ReadOneByteNullable()); + Assert.AreEqual(byte.MinValue, ms.ReadOneByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(byte.MaxValue); + ms.WriteNullable(byte.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(byte.MaxValue, ms.ReadOneByteNullable()); + Assert.AreEqual(byte.MaxValue, ms.ReadOneByteNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((byte)0); + ms.WriteNullable((byte)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((byte)0, ms.ReadOneByteNullable()); + Assert.AreEqual((byte)0, ms.ReadOneByteNullable(dc)); } [TestMethod] public async Task ByteAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((byte)123); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((byte)123, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((byte)123, await ms.ReadOneByteAsync()); + Assert.AreEqual((byte)123, await ms.ReadOneByteAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((byte)123); + await ms.WriteNullableAsync((byte)123, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((byte)123, await ms.ReadOneByteNullableAsync()); + Assert.AreEqual((byte)123, await ms.ReadOneByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((byte?)null); + await ms.WriteNullableAsync((byte?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadOneByteNullableAsync()); + Assert.IsNull(await ms.ReadOneByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(byte.MinValue); + await ms.WriteNullableAsync(byte.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(byte.MinValue, await ms.ReadOneByteNullableAsync()); + Assert.AreEqual(byte.MinValue, await ms.ReadOneByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(byte.MaxValue); + await ms.WriteNullableAsync(byte.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(byte.MaxValue, await ms.ReadOneByteNullableAsync()); + Assert.AreEqual(byte.MaxValue, await ms.ReadOneByteNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((byte)0); + await ms.WriteNullableAsync((byte)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((byte)0, await ms.ReadOneByteNullableAsync()); + Assert.AreEqual((byte)0, await ms.ReadOneByteNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs index 83f7394..b84a658 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs @@ -10,27 +10,29 @@ public void Bytes_Tests() byte[] data = new byte[20]; Random.Shared.NextBytes(data); using MemoryStream ms = new(); - ms.WriteBytes(data); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteBytes(data, sc); Assert.AreEqual(22L, ms.Length); ms.Position = 0; - (byte[] temp, int len) = ms.ReadBytes(); + (byte[] temp, int len) = ms.ReadBytes(dc); Assert.AreEqual((int)data.Length, len); Assert.IsTrue(data.SequenceEqual(temp)); ms.SetLength(0); ms.Position = 0; - ms.WriteBytesNullable(data); + ms.WriteBytesNullable(data, sc); Assert.AreEqual(22L, ms.Length); ms.Position = 0; - var info = ms.ReadBytesNullable(); + var info = ms.ReadBytesNullable(dc); Assert.IsNotNull(info); Assert.AreEqual((int)data.Length, info.Value.Length); Assert.IsTrue(data.SequenceEqual(info.Value.Value)); ms.SetLength(0); ms.Position = 0; - ms.WriteBytesNullable(null); + ms.WriteBytesNullable(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadBytesNullable()); + Assert.IsNull(ms.ReadBytesNullable(dc)); } [TestMethod] @@ -39,27 +41,29 @@ public async Task BytesAsync_Tests() byte[] data = new byte[20]; Random.Shared.NextBytes(data); using MemoryStream ms = new(); - await ms.WriteBytesAsync(data); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteBytesAsync(data, sc); Assert.AreEqual(22L, ms.Length); ms.Position = 0; - (byte[] temp, int len) = await ms.ReadBytesAsync(); + (byte[] temp, int len) = await ms.ReadBytesAsync(dc); Assert.AreEqual((int)data.Length, len); Assert.IsTrue(data.SequenceEqual(temp)); ms.SetLength(0); ms.Position = 0; - await ms.WriteBytesNullableAsync(data); + await ms.WriteBytesNullableAsync(data, sc); Assert.AreEqual(22L, ms.Length); ms.Position = 0; - var info = await ms.ReadBytesNullableAsync(); + var info = await ms.ReadBytesNullableAsync(dc); Assert.IsNotNull(info); Assert.AreEqual((int)data.Length, info.Value.Length); Assert.IsTrue(data.SequenceEqual(info.Value.Value)); ms.SetLength(0); ms.Position = 0; - await ms.WriteBytesNullableAsync(null); + await ms.WriteBytesNullableAsync(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadBytesNullableAsync()); + Assert.IsNull(await ms.ReadBytesNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs index a92b78f..ff96064 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs @@ -8,80 +8,84 @@ public partial class StreamExtensions_Tests public void Decimal_Tests() { using MemoryStream ms = new(); - ms.Write((decimal)-1234567890123456789); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((decimal)-1234567890123456789, sc); Assert.AreEqual(16L, ms.Length); ms.Position = 0; - Assert.AreEqual((decimal)-1234567890123456789, ms.ReadDecimal()); + Assert.AreEqual((decimal)-1234567890123456789, ms.ReadDecimal(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((decimal)-1234567890123456789); + ms.WriteNullable((decimal)-1234567890123456789, sc); Assert.AreEqual(17L, ms.Length); ms.Position = 0; - Assert.AreEqual((decimal)-1234567890123456789, ms.ReadDecimalNullable()); + Assert.AreEqual((decimal)-1234567890123456789, ms.ReadDecimalNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((decimal?)null); + ms.WriteNullable((decimal?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadDecimalNullable()); + Assert.IsNull(ms.ReadDecimalNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(decimal.MinValue); + ms.WriteNullable(decimal.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(decimal.MinValue, ms.ReadDecimalNullable()); + Assert.AreEqual(decimal.MinValue, ms.ReadDecimalNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(decimal.MaxValue); + ms.WriteNullable(decimal.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(decimal.MaxValue, ms.ReadDecimalNullable()); + Assert.AreEqual(decimal.MaxValue, ms.ReadDecimalNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((decimal)0); + ms.WriteNullable((decimal)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((decimal)0, ms.ReadDecimalNullable()); + Assert.AreEqual((decimal)0, ms.ReadDecimalNullable(dc)); } [TestMethod] public async Task DecimalAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((decimal)-1234567890123456789); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((decimal)-1234567890123456789, sc); Assert.AreEqual(16L, ms.Length); ms.Position = 0; - Assert.AreEqual((decimal)-1234567890123456789, await ms.ReadDecimalAsync()); + Assert.AreEqual((decimal)-1234567890123456789, await ms.ReadDecimalAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((decimal)-1234567890123456789); + await ms.WriteNullableAsync((decimal)-1234567890123456789, sc); Assert.AreEqual(17L, ms.Length); ms.Position = 0; - Assert.AreEqual((decimal)-1234567890123456789, await ms.ReadDecimalNullableAsync()); + Assert.AreEqual((decimal)-1234567890123456789, await ms.ReadDecimalNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((decimal?)null); + await ms.WriteNullableAsync((decimal?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadDecimalNullableAsync()); + Assert.IsNull(await ms.ReadDecimalNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(decimal.MinValue); + await ms.WriteNullableAsync(decimal.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(decimal.MinValue, await ms.ReadDecimalNullableAsync()); + Assert.AreEqual(decimal.MinValue, await ms.ReadDecimalNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(decimal.MaxValue); + await ms.WriteNullableAsync(decimal.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(decimal.MaxValue, await ms.ReadDecimalNullableAsync()); + Assert.AreEqual(decimal.MaxValue, await ms.ReadDecimalNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((decimal)0); + await ms.WriteNullableAsync((decimal)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((decimal)0, await ms.ReadDecimalNullableAsync()); + Assert.AreEqual((decimal)0, await ms.ReadDecimalNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs index a7c33e8..30dc6f4 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs @@ -9,62 +9,66 @@ public partial class StreamExtensions_Tests public void Dict_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); Dictionary dict = new() { {0, true }, {1, false } }; - ms.WriteDict(dict); + ms.WriteDict(dict, sc); ms.Position = 0; - CompareDict(dict, ms.ReadDict()); + CompareDict(dict, ms.ReadDict(dc)); dict.Clear(); ms.SetLength(0); ms.Position = 0; - ms.WriteDict(dict); + ms.WriteDict(dict, sc); Assert.AreEqual(1L, ms.Length); ms.SetLength(0); ms.Position = 0; - ms.WriteDictNullable(null); + ms.WriteDictNullable(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadDictNullable()); + Assert.IsNull(ms.ReadDictNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteDictNullable(dict); + ms.WriteDictNullable(dict, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNotNull(ms.ReadDictNullable()); + Assert.IsNotNull(ms.ReadDictNullable(dc)); } [TestMethod] public async Task DictAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); Dictionary dict = new() { {0, true }, {1, false } }; - await ms.WriteDictAsync(dict); + await ms.WriteDictAsync(dict, sc); ms.Position = 0; - CompareDict(dict, await ms.ReadDictAsync()); + CompareDict(dict, await ms.ReadDictAsync(dc)); dict.Clear(); ms.SetLength(0); ms.Position = 0; - await ms.WriteDictAsync(dict); + await ms.WriteDictAsync(dict, sc); Assert.AreEqual(1L, ms.Length); ms.SetLength(0); ms.Position = 0; - await ms.WriteDictNullableAsync(null); + await ms.WriteDictNullableAsync(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadDictNullableAsync()); + Assert.IsNull(await ms.ReadDictNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteDictNullableAsync(dict); + await ms.WriteDictNullableAsync(dict, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNotNull(await ms.ReadDictNullableAsync()); + Assert.IsNotNull(await ms.ReadDictNullableAsync(dc)); } private static void CompareDict(IDictionary a, IDictionary b) diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs index e3e7743..9346266 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs @@ -8,80 +8,84 @@ public partial class StreamExtensions_Tests public void Double_Tests() { using MemoryStream ms = new(); - ms.Write((double)-12345678901); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((double)-12345678901, sc); Assert.AreEqual(8L, ms.Length); ms.Position = 0; - Assert.AreEqual((double)-12345678901, ms.ReadDouble()); + Assert.AreEqual((double)-12345678901, ms.ReadDouble(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((double)-12345678901); + ms.WriteNullable((double)-12345678901, sc); Assert.AreEqual(9L, ms.Length); ms.Position = 0; - Assert.AreEqual((double)-12345678901, ms.ReadDoubleNullable()); + Assert.AreEqual((double)-12345678901, ms.ReadDoubleNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((double?)null); + ms.WriteNullable((double?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadDoubleNullable()); + Assert.IsNull(ms.ReadDoubleNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(double.MinValue); + ms.WriteNullable(double.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(double.MinValue, ms.ReadDoubleNullable()); + Assert.AreEqual(double.MinValue, ms.ReadDoubleNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(double.MaxValue); + ms.WriteNullable(double.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(double.MaxValue, ms.ReadDoubleNullable()); + Assert.AreEqual(double.MaxValue, ms.ReadDoubleNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((double)0); + ms.WriteNullable((double)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((double)0, ms.ReadDoubleNullable()); + Assert.AreEqual((double)0, ms.ReadDoubleNullable(dc)); } [TestMethod] public async Task DoubleAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((double)-12345678901); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((double)-12345678901, sc); Assert.AreEqual(8L, ms.Length); ms.Position = 0; - Assert.AreEqual((double)-12345678901, await ms.ReadDoubleAsync()); + Assert.AreEqual((double)-12345678901, await ms.ReadDoubleAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((double)-12345678901); + await ms.WriteNullableAsync((double)-12345678901, sc); Assert.AreEqual(9L, ms.Length); ms.Position = 0; - Assert.AreEqual((double)-12345678901, await ms.ReadDoubleNullableAsync()); + Assert.AreEqual((double)-12345678901, await ms.ReadDoubleNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((double?)null); + await ms.WriteNullableAsync((double?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadDoubleNullableAsync()); + Assert.IsNull(await ms.ReadDoubleNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(double.MinValue); + await ms.WriteNullableAsync(double.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(double.MinValue, await ms.ReadDoubleNullableAsync()); + Assert.AreEqual(double.MinValue, await ms.ReadDoubleNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(double.MaxValue); + await ms.WriteNullableAsync(double.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(double.MaxValue, await ms.ReadDoubleNullableAsync()); + Assert.AreEqual(double.MaxValue, await ms.ReadDoubleNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((double)0); + await ms.WriteNullableAsync((double)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((double)0, await ms.ReadDoubleNullableAsync()); + Assert.AreEqual((double)0, await ms.ReadDoubleNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs index 3fff697..dbe2624 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs @@ -8,32 +8,36 @@ public partial class StreamExtensions_Tests public void Enum_Tests() { using MemoryStream ms = new(); - ms.WriteEnum(TestEnum.One); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteEnum(TestEnum.One, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual(TestEnum.One, ms.ReadEnum()); + Assert.AreEqual(TestEnum.One, ms.ReadEnum(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteEnum(TestEnum.Zero); + ms.WriteEnum(TestEnum.Zero, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(TestEnum.Zero, ms.ReadEnum()); + Assert.AreEqual(TestEnum.Zero, ms.ReadEnum(dc)); } [TestMethod] public async Task EnumAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteEnumAsync(TestEnum.One); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteEnumAsync(TestEnum.One, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual(TestEnum.One, await ms.ReadEnumAsync()); + Assert.AreEqual(TestEnum.One, await ms.ReadEnumAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteEnumAsync(TestEnum.Zero); + await ms.WriteEnumAsync(TestEnum.Zero, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(TestEnum.Zero, await ms.ReadEnumAsync()); + Assert.AreEqual(TestEnum.Zero, await ms.ReadEnumAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs index fa52410..36e5981 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs @@ -8,80 +8,84 @@ public partial class StreamExtensions_Tests public void Float_Tests() { using MemoryStream ms = new(); - ms.Write((float)-123456); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((float)-123456, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - Assert.AreEqual((float)-123456, ms.ReadFloat()); + Assert.AreEqual((float)-123456, ms.ReadFloat(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((float)-123456); + ms.WriteNullable((float)-123456, sc); Assert.AreEqual(5L, ms.Length); ms.Position = 0; - Assert.AreEqual((float)-123456, ms.ReadFloatNullable()); + Assert.AreEqual((float)-123456, ms.ReadFloatNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((float?)null); + ms.WriteNullable((float?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadFloatNullable()); + Assert.IsNull(ms.ReadFloatNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(float.MinValue); + ms.WriteNullable(float.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(float.MinValue, ms.ReadFloatNullable()); + Assert.AreEqual(float.MinValue, ms.ReadFloatNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(float.MaxValue); + ms.WriteNullable(float.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(float.MaxValue, ms.ReadFloatNullable()); + Assert.AreEqual(float.MaxValue, ms.ReadFloatNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((float)0); + ms.WriteNullable((float)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((float)0, ms.ReadFloatNullable()); + Assert.AreEqual((float)0, ms.ReadFloatNullable(dc)); } [TestMethod] public async Task FloatAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((float)-123456); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((float)-123456, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - Assert.AreEqual((float)-123456, await ms.ReadFloatAsync()); + Assert.AreEqual((float)-123456, await ms.ReadFloatAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((float)-123456); + await ms.WriteNullableAsync((float)-123456, sc); Assert.AreEqual(5L, ms.Length); ms.Position = 0; - Assert.AreEqual((float)-123456, await ms.ReadFloatNullableAsync()); + Assert.AreEqual((float)-123456, await ms.ReadFloatNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((float?)null); + await ms.WriteNullableAsync((float?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadFloatNullableAsync()); + Assert.IsNull(await ms.ReadFloatNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(float.MinValue); + await ms.WriteNullableAsync(float.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(float.MinValue, await ms.ReadFloatNullableAsync()); + Assert.AreEqual(float.MinValue, await ms.ReadFloatNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(float.MaxValue); + await ms.WriteNullableAsync(float.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(float.MaxValue, await ms.ReadFloatNullableAsync()); + Assert.AreEqual(float.MaxValue, await ms.ReadFloatNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((float)0); + await ms.WriteNullableAsync((float)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((float)0, await ms.ReadFloatNullableAsync()); + Assert.AreEqual((float)0, await ms.ReadFloatNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs index dfee802..aff232a 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs @@ -8,160 +8,168 @@ public partial class StreamExtensions_Tests public void Int_Tests() { using MemoryStream ms = new(); - ms.Write((int)-123456); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((int)-123456, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - Assert.AreEqual((int)-123456, ms.ReadInt()); + Assert.AreEqual((int)-123456, ms.ReadInt(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((int)-123456); + ms.WriteNullable((int)-123456, sc); Assert.AreEqual(5L, ms.Length); ms.Position = 0; - Assert.AreEqual((int)-123456, ms.ReadIntNullable()); + Assert.AreEqual((int)-123456, ms.ReadIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((int?)null); + ms.WriteNullable((int?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadIntNullable()); + Assert.IsNull(ms.ReadIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(int.MinValue); + ms.WriteNullable(int.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(int.MinValue, ms.ReadIntNullable()); + Assert.AreEqual(int.MinValue, ms.ReadIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(int.MaxValue); + ms.WriteNullable(int.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(int.MaxValue, ms.ReadIntNullable()); + Assert.AreEqual(int.MaxValue, ms.ReadIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((int)0); + ms.WriteNullable((int)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((int)0, ms.ReadIntNullable()); + Assert.AreEqual((int)0, ms.ReadIntNullable(dc)); } [TestMethod] public async Task IntAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((int)-123456); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((int)-123456, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - Assert.AreEqual((int)-123456, await ms.ReadIntAsync()); + Assert.AreEqual((int)-123456, await ms.ReadIntAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((int)-123456); + await ms.WriteNullableAsync((int)-123456, sc); Assert.AreEqual(5L, ms.Length); ms.Position = 0; - Assert.AreEqual((int)-123456, await ms.ReadIntNullableAsync()); + Assert.AreEqual((int)-123456, await ms.ReadIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((int?)null); + await ms.WriteNullableAsync((int?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadIntNullableAsync()); + Assert.IsNull(await ms.ReadIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(int.MinValue); + await ms.WriteNullableAsync(int.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(int.MinValue, await ms.ReadIntNullableAsync()); + Assert.AreEqual(int.MinValue, await ms.ReadIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(int.MaxValue); + await ms.WriteNullableAsync(int.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(int.MaxValue, await ms.ReadIntNullableAsync()); + Assert.AreEqual(int.MaxValue, await ms.ReadIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((int)0); + await ms.WriteNullableAsync((int)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((int)0, await ms.ReadIntNullableAsync()); + Assert.AreEqual((int)0, await ms.ReadIntNullableAsync(dc)); } [TestMethod] public void UInt_Tests() { using MemoryStream ms = new(); - ms.Write((uint)123456); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((uint)123456, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - Assert.AreEqual((uint)123456, ms.ReadUInt()); + Assert.AreEqual((uint)123456, ms.ReadUInt(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((uint)123456); + ms.WriteNullable((uint)123456, sc); Assert.AreEqual(5L, ms.Length); ms.Position = 0; - Assert.AreEqual((uint)123456, ms.ReadUIntNullable()); + Assert.AreEqual((uint)123456, ms.ReadUIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((uint?)null); + ms.WriteNullable((uint?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadUIntNullable()); + Assert.IsNull(ms.ReadUIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(uint.MinValue); + ms.WriteNullable(uint.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(uint.MinValue, ms.ReadUIntNullable()); + Assert.AreEqual(uint.MinValue, ms.ReadUIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(uint.MaxValue); + ms.WriteNullable(uint.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(uint.MaxValue, ms.ReadUIntNullable()); + Assert.AreEqual(uint.MaxValue, ms.ReadUIntNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((uint)0); + ms.WriteNullable((uint)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((uint)0, ms.ReadUIntNullable()); + Assert.AreEqual((uint)0, ms.ReadUIntNullable(dc)); } [TestMethod] public async Task UIntAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((uint)123456); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((uint)123456, sc); Assert.AreEqual(4L, ms.Length); ms.Position = 0; - Assert.AreEqual((uint)123456, await ms.ReadUIntAsync()); + Assert.AreEqual((uint)123456, await ms.ReadUIntAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((uint)123456); + await ms.WriteNullableAsync((uint)123456, sc); Assert.AreEqual(5L, ms.Length); ms.Position = 0; - Assert.AreEqual((uint)123456, await ms.ReadUIntNullableAsync()); + Assert.AreEqual((uint)123456, await ms.ReadUIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((uint?)null); + await ms.WriteNullableAsync((uint?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadUIntNullableAsync()); + Assert.IsNull(await ms.ReadUIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(uint.MinValue); + await ms.WriteNullableAsync(uint.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(uint.MinValue, await ms.ReadUIntNullableAsync()); + Assert.AreEqual(uint.MinValue, await ms.ReadUIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(uint.MaxValue); + await ms.WriteNullableAsync(uint.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(uint.MaxValue, await ms.ReadUIntNullableAsync()); + Assert.AreEqual(uint.MaxValue, await ms.ReadUIntNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((uint)0); + await ms.WriteNullableAsync((uint)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((uint)0, await ms.ReadUIntNullableAsync()); + Assert.AreEqual((uint)0, await ms.ReadUIntNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs index 507b9c2..8ce65b6 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs @@ -9,62 +9,66 @@ public partial class StreamExtensions_Tests public void List_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); List list = new() { true, false }; - ms.WriteList(list); + ms.WriteList(list, sc); ms.Position = 0; - CompareList(list, ms.ReadList()); + CompareList(list, ms.ReadList(dc)); list.Clear(); ms.SetLength(0); ms.Position = 0; - ms.WriteList(list); + ms.WriteList(list, sc); Assert.AreEqual(1L, ms.Length); ms.SetLength(0); ms.Position = 0; - ms.WriteListNullable(null); + ms.WriteListNullable(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadListNullable()); + Assert.IsNull(ms.ReadListNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteListNullable(list); + ms.WriteListNullable(list, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNotNull(ms.ReadListNullable()); + Assert.IsNotNull(ms.ReadListNullable(dc)); } [TestMethod] public async Task ListAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); List list = new() { true, false }; - await ms.WriteListAsync(list); + await ms.WriteListAsync(list, sc); ms.Position = 0; - CompareList(list, await ms.ReadListAsync()); + CompareList(list, await ms.ReadListAsync(dc)); list.Clear(); ms.SetLength(0); ms.Position = 0; - await ms.WriteListAsync(list); + await ms.WriteListAsync(list, sc); Assert.AreEqual(1L, ms.Length); ms.SetLength(0); ms.Position = 0; - await ms.WriteListNullableAsync(null); + await ms.WriteListNullableAsync(null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadListNullableAsync()); + Assert.IsNull(await ms.ReadListNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteListNullableAsync(list); + await ms.WriteListNullableAsync(list, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNotNull(await ms.ReadListNullableAsync()); + Assert.IsNotNull(await ms.ReadListNullableAsync(dc)); } private static void CompareList(IList a, IList b) diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs index 92a76e9..647e340 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs @@ -8,160 +8,168 @@ public partial class StreamExtensions_Tests public void Long_Tests() { using MemoryStream ms = new(); - ms.Write((long)-12345678901); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((long)-12345678901, sc); Assert.AreEqual(8L, ms.Length); ms.Position = 0; - Assert.AreEqual((long)-12345678901, ms.ReadLong()); + Assert.AreEqual((long)-12345678901, ms.ReadLong(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((long)-12345678901); + ms.WriteNullable((long)-12345678901, sc); Assert.AreEqual(9L, ms.Length); ms.Position = 0; - Assert.AreEqual((long)-12345678901, ms.ReadLongNullable()); + Assert.AreEqual((long)-12345678901, ms.ReadLongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((long?)null); + ms.WriteNullable((long?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadLongNullable()); + Assert.IsNull(ms.ReadLongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(long.MinValue); + ms.WriteNullable(long.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(long.MinValue, ms.ReadLongNullable()); + Assert.AreEqual(long.MinValue, ms.ReadLongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(long.MaxValue); + ms.WriteNullable(long.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(long.MaxValue, ms.ReadLongNullable()); + Assert.AreEqual(long.MaxValue, ms.ReadLongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((long)0); + ms.WriteNullable((long)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((long)0, ms.ReadLongNullable()); + Assert.AreEqual((long)0, ms.ReadLongNullable(dc)); } [TestMethod] public async Task LongAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((long)-12345678901); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((long)-12345678901, sc); Assert.AreEqual(8L, ms.Length); ms.Position = 0; - Assert.AreEqual((long)-12345678901, await ms.ReadLongAsync()); + Assert.AreEqual((long)-12345678901, await ms.ReadLongAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((long)-12345678901); + await ms.WriteNullableAsync((long)-12345678901, sc); Assert.AreEqual(9L, ms.Length); ms.Position = 0; - Assert.AreEqual((long)-12345678901, await ms.ReadLongNullableAsync()); + Assert.AreEqual((long)-12345678901, await ms.ReadLongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((long?)null); + await ms.WriteNullableAsync((long?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadLongNullableAsync()); + Assert.IsNull(await ms.ReadLongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(long.MinValue); + await ms.WriteNullableAsync(long.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(long.MinValue, await ms.ReadLongNullableAsync()); + Assert.AreEqual(long.MinValue, await ms.ReadLongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(long.MaxValue); + await ms.WriteNullableAsync(long.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(long.MaxValue, await ms.ReadLongNullableAsync()); + Assert.AreEqual(long.MaxValue, await ms.ReadLongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((long)0); + await ms.WriteNullableAsync((long)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((long)0, await ms.ReadLongNullableAsync()); + Assert.AreEqual((long)0, await ms.ReadLongNullableAsync(dc)); } [TestMethod] public void ULong_Tests() { using MemoryStream ms = new(); - ms.Write((ulong)12345678901); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((ulong)12345678901, sc); Assert.AreEqual(8L, ms.Length); ms.Position = 0; - Assert.AreEqual((ulong)12345678901, ms.ReadULong()); + Assert.AreEqual((ulong)12345678901, ms.ReadULong(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((ulong)12345678901); + ms.WriteNullable((ulong)12345678901, sc); Assert.AreEqual(9L, ms.Length); ms.Position = 0; - Assert.AreEqual((ulong)12345678901, ms.ReadULongNullable()); + Assert.AreEqual((ulong)12345678901, ms.ReadULongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((ulong?)null); + ms.WriteNullable((ulong?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadULongNullable()); + Assert.IsNull(ms.ReadULongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(ulong.MinValue); + ms.WriteNullable(ulong.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ulong.MinValue, ms.ReadULongNullable()); + Assert.AreEqual(ulong.MinValue, ms.ReadULongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(ulong.MaxValue); + ms.WriteNullable(ulong.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ulong.MaxValue, ms.ReadULongNullable()); + Assert.AreEqual(ulong.MaxValue, ms.ReadULongNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((ulong)0); + ms.WriteNullable((ulong)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((ulong)0, ms.ReadULongNullable()); + Assert.AreEqual((ulong)0, ms.ReadULongNullable(dc)); } [TestMethod] public async Task ULongAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((ulong)12345678901); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((ulong)12345678901, sc); Assert.AreEqual(8L, ms.Length); ms.Position = 0; - Assert.AreEqual((ulong)12345678901, await ms.ReadULongAsync()); + Assert.AreEqual((ulong)12345678901, await ms.ReadULongAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((ulong)12345678901); + await ms.WriteNullableAsync((ulong)12345678901, sc); Assert.AreEqual(9L, ms.Length); ms.Position = 0; - Assert.AreEqual((ulong)12345678901, await ms.ReadULongNullableAsync()); + Assert.AreEqual((ulong)12345678901, await ms.ReadULongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((ulong?)null); + await ms.WriteNullableAsync((ulong?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadULongNullableAsync()); + Assert.IsNull(await ms.ReadULongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(ulong.MinValue); + await ms.WriteNullableAsync(ulong.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ulong.MinValue, await ms.ReadULongNullableAsync()); + Assert.AreEqual(ulong.MinValue, await ms.ReadULongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(ulong.MaxValue); + await ms.WriteNullableAsync(ulong.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ulong.MaxValue, await ms.ReadULongNullableAsync()); + Assert.AreEqual(ulong.MaxValue, await ms.ReadULongNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((ulong)0); + await ms.WriteNullableAsync((ulong)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((ulong)0, await ms.ReadULongNullableAsync()); + Assert.AreEqual((ulong)0, await ms.ReadULongNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs index ea6661e..e27fbad 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs @@ -8,6 +8,8 @@ public partial class StreamExtensions_Tests public void Number_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); (object Number, long Length, Type Type, NumberTypes NumberType)[] data = new (object Number, long Length, Type Type, NumberTypes NumberType)[] { (0, 1, typeof(int), NumberTypes.Zero), @@ -23,29 +25,31 @@ public void Number_Tests() foreach (var info in data) { Assert.AreEqual(info.NumberType, SerializerHelper.GetNumberAndType(info.Number).Type, info.Number.ToString()); - ms.WriteNumber(info.Number); + ms.WriteNumber(info.Number, sc); Assert.AreEqual(info.Length, ms.Length, info.Number.ToString()); ms.Position = 0; - Assert.AreEqual(Convert.ChangeType(info.Number, info.Type), ms.ReadNumber(info.Type), $"{info.Number.GetType()} {info.Number}"); + Assert.AreEqual(Convert.ChangeType(info.Number, info.Type), ms.ReadNumber(info.Type, dc), $"{info.Number.GetType()} {info.Number}"); ms.SetLength(0); ms.Position = 0; } - ms.WriteNumberNullable(123); + ms.WriteNumberNullable(123, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual(123, ms.ReadNumberNullable()); + Assert.AreEqual(123, ms.ReadNumberNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNumberNullable((int?)null); + ms.WriteNumberNullable((int?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadNumberNullable()); + Assert.IsNull(ms.ReadNumberNullable(dc)); } [TestMethod] public async Task NumberAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); (object Number, long Length, Type Type, NumberTypes NumberType)[] data = new (object Number, long Length, Type Type, NumberTypes NumberType)[] { (0, 1, typeof(int), NumberTypes.Zero), @@ -61,23 +65,23 @@ public async Task NumberAsync_Tests() foreach (var info in data) { Assert.AreEqual(info.NumberType, SerializerHelper.GetNumberAndType(info.Number).Type, info.Number.ToString()); - await ms.WriteNumberAsync(info.Number); + await ms.WriteNumberAsync(info.Number, sc); Assert.AreEqual(info.Length, ms.Length, info.Number.ToString()); ms.Position = 0; - Assert.AreEqual(Convert.ChangeType(info.Number, info.Type), await ms.ReadNumberAsync(info.Type), $"{info.Number.GetType()} {info.Number}"); + Assert.AreEqual(Convert.ChangeType(info.Number, info.Type), await ms.ReadNumberAsync(info.Type, dc), $"{info.Number.GetType()} {info.Number}"); ms.SetLength(0); ms.Position = 0; } - await ms.WriteNumberNullableAsync(123); + await ms.WriteNumberNullableAsync(123, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual(123, await ms.ReadNumberNullableAsync()); + Assert.AreEqual(123, await ms.ReadNumberNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNumberNullableAsync((int?)null); + await ms.WriteNumberNullableAsync((int?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadNumberNullableAsync()); + Assert.IsNull(await ms.ReadNumberNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs index 8fb2846..6cce418 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs @@ -13,6 +13,8 @@ public void Object_Tests() try { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); using MemoryStream test = new(); test.Write(new byte[] { 1, 2, 3 }); test.Position = 0; @@ -66,21 +68,21 @@ public void Object_Tests() { var info = data[i]; Logging.WriteInfo(info.Object.GetType().ToString()); - ms.WriteObject(info.Object); + ms.WriteObject(info.Object, sc); ms.Position = 0; - b = ms.ReadObject(info.Object.GetType()); + b = ms.ReadObject(info.Object.GetType(), dc); info.Comparer(info.Object, b); ms.SetLength(0); ms.Position = 0; } - ms.WriteObjectNullable(true); + ms.WriteObjectNullable(true, sc); ms.Position = 0; - Assert.AreEqual(true, ms.ReadObjectNullable()); + Assert.AreEqual(true, ms.ReadObjectNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteObjectNullable(null); + ms.WriteObjectNullable(null, sc); ms.Position = 0; - Assert.IsNull(ms.ReadObjectNullable(typeof(bool))); + Assert.IsNull(ms.ReadObjectNullable(typeof(bool), dc)); } finally { @@ -95,6 +97,8 @@ public async Task ObjectAsync_Tests() try { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); using MemoryStream test = new(); test.Write(new byte[] { 1, 2, 3 }); test.Position = 0; @@ -148,21 +152,21 @@ public async Task ObjectAsync_Tests() { var info = data[i]; Logging.WriteInfo(info.Object.GetType().ToString()); - await ms.WriteObjectAsync(info.Object); + await ms.WriteObjectAsync(info.Object, sc); ms.Position = 0; - b = await ms.ReadObjectAsync(info.Object.GetType()); + b = await ms.ReadObjectAsync(info.Object.GetType(), dc); info.Comparer(info.Object, b); ms.SetLength(0); ms.Position = 0; } - await ms.WriteObjectNullableAsync(true); + await ms.WriteObjectNullableAsync(true, sc); ms.Position = 0; - Assert.AreEqual(true, await ms.ReadObjectNullableAsync()); + Assert.AreEqual(true, await ms.ReadObjectNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteObjectNullableAsync(null); + await ms.WriteObjectNullableAsync(null, sc); ms.Position = 0; - Assert.IsNull(await ms.ReadObjectNullableAsync(typeof(bool))); + Assert.IsNull(await ms.ReadObjectNullableAsync(typeof(bool), dc)); } finally { diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs index 4d6d858..fd400f2 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs @@ -8,48 +8,50 @@ public partial class StreamExtensions_Tests public void Serialized_Tests() { using MemoryStream ms = new(); - + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); TestObject2 obj = new() { Value = true }; - ms.WriteSerialized(obj); + ms.WriteSerialized(obj, sc); ms.Position = 0; - Assert.IsTrue(ms.ReadSerialized().Value); + Assert.IsTrue(ms.ReadSerialized(dc).Value); ms.SetLength(0); ms.Position = 0; - ms.WriteSerializedNullable(obj); + ms.WriteSerializedNullable(obj, sc); ms.Position = 0; - Assert.IsTrue(ms.ReadSerializedNullable()?.Value); + Assert.IsTrue(ms.ReadSerializedNullable(dc)?.Value); ms.SetLength(0); ms.Position = 0; - ms.WriteSerializedNullable((TestObject2?)null); + ms.WriteSerializedNullable((TestObject2?)null, sc); ms.Position = 0; - Assert.IsNull(ms.ReadSerializedNullable()); + Assert.IsNull(ms.ReadSerializedNullable(dc)); } [TestMethod] public async Task SerializedAsync_Tests() { using MemoryStream ms = new(); - + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); TestObject2 obj = new() { Value = true }; - await ms.WriteSerializedAsync(obj); + await ms.WriteSerializedAsync(obj, sc); ms.Position = 0; - Assert.IsTrue((await ms.ReadSerializedAsync()).Value); + Assert.IsTrue((await ms.ReadSerializedAsync(dc)).Value); ms.SetLength(0); ms.Position = 0; - await ms.WriteSerializedNullableAsync(obj); + await ms.WriteSerializedNullableAsync(obj, sc); ms.Position = 0; - Assert.IsTrue((await ms.ReadSerializedNullableAsync())?.Value); + Assert.IsTrue((await ms.ReadSerializedNullableAsync(dc))?.Value); ms.SetLength(0); ms.Position = 0; - await ms.WriteSerializedNullableAsync((TestObject2?)null); + await ms.WriteSerializedNullableAsync((TestObject2?)null, sc); ms.Position = 0; - Assert.IsNull(await ms.ReadSerializedNullableAsync()); + Assert.IsNull(await ms.ReadSerializedNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs index ca6c9c9..7bf6156 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs @@ -8,160 +8,168 @@ public partial class StreamExtensions_Tests public void Short_Tests() { using MemoryStream ms = new(); - ms.Write((short)-1234); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((short)-1234, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((short)-1234, ms.ReadShort()); + Assert.AreEqual((short)-1234, ms.ReadShort(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((short)-1234); + ms.WriteNullable((short)-1234, sc); Assert.AreEqual(3L, ms.Length); ms.Position = 0; - Assert.AreEqual((short)-1234, ms.ReadShortNullable()); + Assert.AreEqual((short)-1234, ms.ReadShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((short?)null); + ms.WriteNullable((short?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadShortNullable()); + Assert.IsNull(ms.ReadShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(short.MinValue); + ms.WriteNullable(short.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(short.MinValue, ms.ReadShortNullable()); + Assert.AreEqual(short.MinValue, ms.ReadShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(short.MaxValue); + ms.WriteNullable(short.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(short.MaxValue, ms.ReadShortNullable()); + Assert.AreEqual(short.MaxValue, ms.ReadShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((short)0); + ms.WriteNullable((short)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((short)0, ms.ReadShortNullable()); + Assert.AreEqual((short)0, ms.ReadShortNullable(dc)); } [TestMethod] public async Task ShortAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((short)-1234); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((short)-1234, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((short)-1234, await ms.ReadShortAsync()); + Assert.AreEqual((short)-1234, await ms.ReadShortAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((short)-1234); + await ms.WriteNullableAsync((short)-1234, sc); Assert.AreEqual(3L, ms.Length); ms.Position = 0; - Assert.AreEqual((short)-1234, await ms.ReadShortNullableAsync()); + Assert.AreEqual((short)-1234, await ms.ReadShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((short?)null); + await ms.WriteNullableAsync((short?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadShortNullableAsync()); + Assert.IsNull(await ms.ReadShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(short.MinValue); + await ms.WriteNullableAsync(short.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(short.MinValue, await ms.ReadShortNullableAsync()); + Assert.AreEqual(short.MinValue, await ms.ReadShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(short.MaxValue); + await ms.WriteNullableAsync(short.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(short.MaxValue, await ms.ReadShortNullableAsync()); + Assert.AreEqual(short.MaxValue, await ms.ReadShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((short)0); + await ms.WriteNullableAsync((short)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((short)0, await ms.ReadShortNullableAsync()); + Assert.AreEqual((short)0, await ms.ReadShortNullableAsync(dc)); } [TestMethod] public void UShort_Tests() { using MemoryStream ms = new(); - ms.Write((ushort)1234); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.Write((ushort)1234, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((ushort)1234, ms.ReadUShort()); + Assert.AreEqual((ushort)1234, ms.ReadUShort(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((ushort)1234); + ms.WriteNullable((ushort)1234, sc); Assert.AreEqual(3L, ms.Length); ms.Position = 0; - Assert.AreEqual((ushort)1234, ms.ReadUShortNullable()); + Assert.AreEqual((ushort)1234, ms.ReadUShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((ushort?)null); + ms.WriteNullable((ushort?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadUShortNullable()); + Assert.IsNull(ms.ReadUShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(ushort.MinValue); + ms.WriteNullable(ushort.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ushort.MinValue, ms.ReadUShortNullable()); + Assert.AreEqual(ushort.MinValue, ms.ReadUShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(ushort.MaxValue); + ms.WriteNullable(ushort.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ushort.MaxValue, ms.ReadUShortNullable()); + Assert.AreEqual(ushort.MaxValue, ms.ReadUShortNullable(dc)); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable((ushort)0); + ms.WriteNullable((ushort)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((ushort)0, ms.ReadUShortNullable()); + Assert.AreEqual((ushort)0, ms.ReadUShortNullable(dc)); } [TestMethod] public async Task UShortAsync_Tests() { using MemoryStream ms = new(); - await ms.WriteAsync((ushort)1234); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteAsync((ushort)1234, sc); Assert.AreEqual(2L, ms.Length); ms.Position = 0; - Assert.AreEqual((ushort)1234, await ms.ReadUShortAsync()); + Assert.AreEqual((ushort)1234, await ms.ReadUShortAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((ushort)1234); + await ms.WriteNullableAsync((ushort)1234, sc); Assert.AreEqual(3L, ms.Length); ms.Position = 0; - Assert.AreEqual((ushort)1234, await ms.ReadUShortNullableAsync()); + Assert.AreEqual((ushort)1234, await ms.ReadUShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((ushort?)null); + await ms.WriteNullableAsync((ushort?)null, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadUShortNullableAsync()); + Assert.IsNull(await ms.ReadUShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(ushort.MinValue); + await ms.WriteNullableAsync(ushort.MinValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ushort.MinValue, await ms.ReadUShortNullableAsync()); + Assert.AreEqual(ushort.MinValue, await ms.ReadUShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(ushort.MaxValue); + await ms.WriteNullableAsync(ushort.MaxValue, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual(ushort.MaxValue, await ms.ReadUShortNullableAsync()); + Assert.AreEqual(ushort.MaxValue, await ms.ReadUShortNullableAsync(dc)); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync((ushort)0); + await ms.WriteNullableAsync((ushort)0, sc); Assert.AreEqual(1L, ms.Length); ms.Position = 0; - Assert.AreEqual((ushort)0, await ms.ReadUShortNullableAsync()); + Assert.AreEqual((ushort)0, await ms.ReadUShortNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs index acb3cef..5aa8dd7 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs @@ -1,5 +1,4 @@ -using wan24.Core; -using wan24.StreamSerializerExtensions; +using wan24.StreamSerializerExtensions; namespace Stream_Serializer_Extensions_Tests { @@ -9,54 +8,56 @@ public partial class StreamExtensions_Tests public void String_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); string str = "abcdef"; - ms.WriteString(str); + ms.WriteString(str, sc); Assert.AreEqual((long)str.Length + 2, ms.Length); ms.Position = 0; - Assert.AreEqual(str, ms.ReadString()); + Assert.AreEqual(str, ms.ReadString(dc)); Assert.AreEqual(ms.Length, ms.Position); ms.SetLength(0); ms.Position = 0; str = "abcdefäüöß"; - ms.WriteString(str); + ms.WriteString(str, sc); ms.Position = 0; - Assert.AreEqual(str, ms.ReadString()); + Assert.AreEqual(str, ms.ReadString(dc)); Assert.AreEqual(ms.Length, ms.Position); ms.SetLength(0); ms.Position = 0; str = "abcdefäüöß"; - ms.WriteString16(str); + ms.WriteString16(str, sc); Assert.AreEqual(((long)str.Length << 1) + 2, ms.Length); ms.Position = 0; - Assert.AreEqual(str, ms.ReadString16()); + Assert.AreEqual(str, ms.ReadString16(dc)); Assert.AreEqual(ms.Length, ms.Position); ms.SetLength(0); ms.Position = 0; str = "abcdefäüöß\U0001F642"; - ms.WriteString32(str); + ms.WriteString32(str, sc); ms.Position = 0; - Assert.AreEqual(str, ms.ReadString32()); + Assert.AreEqual(str, ms.ReadString32(dc)); Assert.AreEqual(ms.Length, ms.Position); ms.SetLength(0); ms.Position = 0; str = "abcdef"; - ms.WriteStringNullable(str); + ms.WriteStringNullable(str, sc); Assert.AreEqual((long)str.Length + 2, ms.Length); ms.Position = 0; - Assert.AreEqual(str, ms.ReadStringNullable()); + Assert.AreEqual(str, ms.ReadStringNullable(dc)); Assert.AreEqual(ms.Length, ms.Position); ms.SetLength(0); ms.Position = 0; - ms.WriteStringNullable(null); + ms.WriteStringNullable(null, sc); Assert.AreEqual(1, ms.Length); ms.Position = 0; - Assert.IsNull(ms.ReadStringNullable()); + Assert.IsNull(ms.ReadStringNullable(dc)); Assert.AreEqual(ms.Length, ms.Position); } @@ -64,50 +65,52 @@ public void String_Tests() public async Task StringAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); string str = "abcdef"; - await ms.WriteStringAsync(str); + await ms.WriteStringAsync(str, sc); Assert.AreEqual((long)str.Length + 2, ms.Length); ms.Position = 0; - Assert.AreEqual(str, await ms.ReadStringAsync()); + Assert.AreEqual(str, await ms.ReadStringAsync(dc)); ms.SetLength(0); ms.Position = 0; str = "abcdefäüöß"; - await ms.WriteStringAsync(str); + await ms.WriteStringAsync(str, sc); ms.Position = 0; - Assert.AreEqual(str, await ms.ReadStringAsync()); + Assert.AreEqual(str, await ms.ReadStringAsync(dc)); ms.SetLength(0); ms.Position = 0; str = "abcdefäüöß"; - await ms.WriteString16Async(str); + await ms.WriteString16Async(str, sc); Assert.AreEqual(((long)str.Length << 1) + 2, ms.Length); ms.Position = 0; - Assert.AreEqual(str, await ms.ReadString16Async()); + Assert.AreEqual(str, await ms.ReadString16Async(dc)); ms.SetLength(0); ms.Position = 0; str = "abcdefäüöß\U0001F642"; - await ms.WriteString32Async(str); + await ms.WriteString32Async(str, sc); ms.Position = 0; - Assert.AreEqual(str, await ms.ReadString32Async()); + Assert.AreEqual(str, await ms.ReadString32Async(dc)); ms.SetLength(0); ms.Position = 0; str = "abcdef"; - await ms.WriteStringNullableAsync(str); + await ms.WriteStringNullableAsync(str, sc); Assert.AreEqual((long)str.Length + 2, ms.Length); ms.Position = 0; - Assert.AreEqual(str, await ms.ReadStringNullableAsync()); + Assert.AreEqual(str, await ms.ReadStringNullableAsync(dc)); Assert.AreEqual(ms.Length, ms.Position); ms.SetLength(0); ms.Position = 0; - await ms.WriteStringNullableAsync(null); + await ms.WriteStringNullableAsync(null, sc); Assert.AreEqual(1, ms.Length); ms.Position = 0; - Assert.IsNull(await ms.ReadStringNullableAsync()); + Assert.IsNull(await ms.ReadStringNullableAsync(dc)); Assert.AreEqual(ms.Length, ms.Position); } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs index 01b593d..976e9ae 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs @@ -8,48 +8,52 @@ public partial class StreamExtensions_Tests public void Struct_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); TestStruct ts = new(true); - ms.WriteStruct(ts); + ms.WriteStruct(ts, sc); ms.Position = 0; - Assert.IsTrue(ms.ReadStruct().Value); + Assert.IsTrue(ms.ReadStruct(dc).Value); ms.SetLength(0); ms.Position = 0; - ms.WriteStructNullable(ts); + ms.WriteStructNullable(ts, sc); ms.Position = 0; - Assert.IsTrue(ms.ReadStructNullable()?.Value); + Assert.IsTrue(ms.ReadStructNullable(dc)?.Value); ms.SetLength(0); ms.Position = 0; - ms.WriteStructNullable((TestStruct?)null); + ms.WriteStructNullable((TestStruct?)null, sc); ms.Position = 0; Assert.AreEqual(1L, ms.Length); - Assert.IsNull(ms.ReadStructNullable()); + Assert.IsNull(ms.ReadStructNullable(dc)); } [TestMethod] public async Task StructAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); TestStruct ts = new(true); - await ms.WriteStructAsync(ts); + await ms.WriteStructAsync(ts, sc); ms.Position = 0; - Assert.IsTrue((await ms.ReadStructAsync()).Value); + Assert.IsTrue((await ms.ReadStructAsync(dc)).Value); ms.SetLength(0); ms.Position = 0; - await ms.WriteStructNullableAsync(ts); + await ms.WriteStructNullableAsync(ts, sc); ms.Position = 0; - Assert.IsTrue((await ms.ReadStructNullableAsync())?.Value); + Assert.IsTrue((await ms.ReadStructNullableAsync(dc))?.Value); ms.SetLength(0); ms.Position = 0; - await ms.WriteStructNullableAsync((TestStruct?)null); + await ms.WriteStructNullableAsync((TestStruct?)null, sc); ms.Position = 0; Assert.AreEqual(1L, ms.Length); - Assert.IsNull(await ms.ReadStructNullableAsync()); + Assert.IsNull(await ms.ReadStructNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs index 56cd57d..12a9a95 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs @@ -9,6 +9,8 @@ public partial class StreamExtensions_Tests public void Type_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); foreach (Type type in new Type[] { typeof(bool), @@ -27,10 +29,10 @@ public void Type_Tests() Logging.WriteInfo($"Type {type} ({SerializedTypeInfo.From(type)})"); ms.SetLength(0); ms.Position = 0; - ms.Write(type); + ms.Write(type, sc); Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; - Assert.AreEqual(type, ms.ReadType()); + Assert.AreEqual(type, ms.ReadType(dc)); } foreach (Type? type in new Type?[] { @@ -41,10 +43,10 @@ public void Type_Tests() Logging.WriteInfo($"Type {type?.ToString() ?? "NULL"}"); ms.SetLength(0); ms.Position = 0; - ms.WriteNullable(type); + ms.WriteNullable(type, sc); Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; - Assert.AreEqual(type, ms.ReadTypeNullable()); + Assert.AreEqual(type, ms.ReadTypeNullable(dc)); } } @@ -52,6 +54,8 @@ public void Type_Tests() public async Task TypeAsync_Tests() { using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); foreach (Type type in new Type[] { typeof(bool), @@ -70,10 +74,10 @@ public async Task TypeAsync_Tests() Logging.WriteInfo($"Type {type} ({SerializedTypeInfo.From(type)})"); ms.SetLength(0); ms.Position = 0; - await ms.WriteAsync(type); + await ms.WriteAsync(type, sc); Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; - Assert.AreEqual(type, await ms.ReadTypeAsync()); + Assert.AreEqual(type, await ms.ReadTypeAsync(dc)); } foreach (Type? type in new Type?[] { @@ -84,10 +88,10 @@ public async Task TypeAsync_Tests() Logging.WriteInfo($"Type {type?.ToString() ?? "NULL"}"); ms.SetLength(0); ms.Position = 0; - await ms.WriteNullableAsync(type); + await ms.WriteNullableAsync(type, sc); Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); ms.Position = 0; - Assert.AreEqual(type, await ms.ReadTypeNullableAsync()); + Assert.AreEqual(type, await ms.ReadTypeNullableAsync(dc)); } } } diff --git a/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs index 59206af..568df04 100644 --- a/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs +++ b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs @@ -12,9 +12,11 @@ public void CustomVersion_Tests() try { using MemoryStream ms = new(); - ms.WriteSerializerVersion(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteSerializerVersion(sc); ms.Position = 0; - int temp = ms.ReadSerializerVersion(); + int temp = ms.ReadSerializerVersion(dc); Assert.AreEqual(StreamSerializer.Version, temp); Assert.AreEqual(1, temp >> 8); } @@ -31,9 +33,11 @@ public async Task CustomVersionAsync_Tests() try { using MemoryStream ms = new(); - await ms.WriteSerializerVersionAsync(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteSerializerVersionAsync(sc); ms.Position = 0; - int temp = await ms.ReadSerializerVersionAsync(); + int temp = await ms.ReadSerializerVersionAsync(dc); Assert.AreEqual(StreamSerializer.Version, temp); Assert.AreEqual(1, temp >> 8); } diff --git a/src/Stream-Serializer-Extensions Tests/TestObject2.cs b/src/Stream-Serializer-Extensions Tests/TestObject2.cs index 65e33b7..aadb8d1 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject2.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject2.cs @@ -8,21 +8,21 @@ internal class TestObject2 : StreamSerializerBase, ITestObject { public TestObject2() : base(1) { } - public TestObject2(Stream stream, int version) : base(stream, version, 1) { } + public TestObject2(IDeserializationContext context) : base(context, 1) { } public bool Value { get; set; } public virtual bool CompareWith(ITestObject other) => other is TestObject2 obj && Value == obj.Value; - protected override void Serialize(Stream stream) => stream.Write(Value); + protected override void Serialize(ISerializationContext context) => context.Stream.Write(Value, context); - protected override async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) - => await stream.WriteAsync(Value, cancellationToken).DynamicContext(); + protected override async Task SerializeAsync(ISerializationContext context) + => await context.Stream.WriteAsync(Value, context).DynamicContext(); - protected override void Deserialize(Stream stream, int version) - => Value = stream.ReadBool(version); + protected override void Deserialize(IDeserializationContext context) + => Value = context.Stream.ReadBool(context); - protected override async Task DeserializeAsync(Stream stream, int version, CancellationToken cancellationToken) - => Value = await stream.ReadBoolAsync(version, cancellationToken: cancellationToken).DynamicContext(); + protected override async Task DeserializeAsync(IDeserializationContext context) + => Value = await context.Stream.ReadBoolAsync(context).DynamicContext(); } } diff --git a/src/Stream-Serializer-Extensions/ContextCached.cs b/src/Stream-Serializer-Extensions/ContextCached.cs new file mode 100644 index 0000000..8711ba4 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ContextCached.cs @@ -0,0 +1,32 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Enable caching in context temporary (if not caching) + /// + public readonly record struct ContextCached : IDisposable + { + /// + /// Dispose action + /// + private readonly Action DisposeAction; + + /// + /// Constructor + /// + /// Context + public ContextCached(ISerializerContext context) + { + bool disable = context.EnableCache(), + disposed = false; + DisposeAction = () => + { + if (disposed) return; + disposed = true; + if (disable) context.DisableCache(); + }; + } + + /// + public void Dispose() => DisposeAction(); + } +} diff --git a/src/Stream-Serializer-Extensions/ContextRecursion.cs b/src/Stream-Serializer-Extensions/ContextRecursion.cs index ee0a211..833d031 100644 --- a/src/Stream-Serializer-Extensions/ContextRecursion.cs +++ b/src/Stream-Serializer-Extensions/ContextRecursion.cs @@ -1,14 +1,14 @@ namespace wan24.StreamSerializerExtensions { /// - /// Context recursion (should only be disposed once!) + /// Context recursion /// public readonly record struct ContextRecursion : IDisposable { /// /// Dispose action /// - private readonly ISerializerContext Context; + private readonly Action DisposeAction; /// /// Constructor @@ -17,10 +17,16 @@ public ContextRecursion(ISerializerContext context) { context.RecursionLevel++; - Context = context; + bool disposed = false; + DisposeAction = () => + { + if (disposed) return; + disposed = true; + context.RecursionLevel--; + }; } /// - public void Dispose() => Context.RecursionLevel--; + public void Dispose() => DisposeAction(); } } diff --git a/src/Stream-Serializer-Extensions/ContextUncached.cs b/src/Stream-Serializer-Extensions/ContextUncached.cs new file mode 100644 index 0000000..d76e0ca --- /dev/null +++ b/src/Stream-Serializer-Extensions/ContextUncached.cs @@ -0,0 +1,32 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Disable caching in context temporary (if caching) + /// + public readonly record struct ContextUncached : IDisposable + { + /// + /// Dispose action + /// + private readonly Action DisposeAction; + + /// + /// Constructor + /// + /// Context + public ContextUncached(ISerializerContext context) + { + bool enable = context.DisableCache(), + disposed = false; + DisposeAction = () => + { + if (disposed) return; + disposed = true; + if (enable) context.EnableCache(); + }; + } + + /// + public void Dispose() => DisposeAction(); + } +} diff --git a/src/Stream-Serializer-Extensions/DeserializerContext.cs b/src/Stream-Serializer-Extensions/DeserializerContext.cs index e4e37ad..7868e0f 100644 --- a/src/Stream-Serializer-Extensions/DeserializerContext.cs +++ b/src/Stream-Serializer-Extensions/DeserializerContext.cs @@ -5,8 +5,47 @@ namespace wan24.StreamSerializerExtensions /// /// Stream deserializer context /// - public class DeserializerContext : SerializerContextBase, IDeserializationContext + public class DeserializerContext : DeserializerContext, IDeserializationContext { + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Serializer version + /// Cache size + /// Cancellation token + public DeserializerContext(Stream stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = default) + : base(stream, version, cacheSize, cancellationToken) + { } + + /// + /// Constructor + /// + /// Base deserializer context + /// Serializer version + public DeserializerContext(DeserializerContext baseContext, int version) : base(baseContext, version) { } + + /// + /// Create a temporary instance which uses another serializer version + /// + /// New serializer version + /// Temporary instance (don't forget to dispose!) + new public DeserializerContext WithSerializerVersion(int version) => new(this, version); + + /// + IDeserializationContext IDeserializationContext.WithSerializerVersion(int version) => WithSerializerVersion(version); + } + + /// + /// Stream deserializer context + /// + /// Stream type + public class DeserializerContext : SerializerContextBase, IDeserializationContext where T : Stream + { + /// + /// Base context + /// + protected readonly DeserializerContext? _BaseContext = null; /// /// Cache /// @@ -19,13 +58,24 @@ public class DeserializerContext : SerializerContextBase, IDeserializationContex /// Serializer version /// Cache size /// Cancellation token - public DeserializerContext(Stream stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = default) + public DeserializerContext(T stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = default) : base(stream, version, cacheSize, cancellationToken) { _Cache = _CacheSize > 0 ? StreamSerializer.ObjectCachePool.RentClean(_CacheSize) : Array.Empty(); CacheIndexSize = _CacheSize > byte.MaxValue ? 2 : 1; } + /// + /// Constructor + /// + /// Base deserializer context + /// Serializer version + public DeserializerContext(DeserializerContext baseContext, int version) : base(baseContext, version) + { + _BaseContext = baseContext; + _Cache = baseContext._Cache; + } + /// /// Cache /// @@ -49,6 +99,15 @@ public override int CacheSize { EnsureUndisposed(); if (value == _CacheSize) return; + if (_BaseContext != null) + { + _BaseContext.CacheSize = value; + _CacheSize = _BaseContext._CacheSize; + RealCacheSize = _BaseContext.RealCacheSize; + CacheIndexSize = _BaseContext.CacheIndexSize; + _Cache = _BaseContext._Cache; + return; + } if (value < 1) { _CacheSize = value; @@ -76,7 +135,7 @@ public override int CacheSize } /// - public T AddToCache(T obj) + public tObject AddToCache(tObject obj) { int index = CacheOffset; if (index >= _CacheSize) return obj; @@ -86,7 +145,7 @@ public T AddToCache(T obj) } /// - public bool TryReadCached(out T? obj) + public bool TryReadCached(out tObject? obj) { EnsureUndisposed(); obj = default; @@ -99,14 +158,14 @@ public bool TryReadCached(out T? obj) case SequenceTypes.Cached: int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - obj = SerializerException.Wrap(() => (T)_Cache[index]); + obj = SerializerException.Wrap(() => (tObject)_Cache[index]); return true; default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); } } /// - public async Task<(bool Succeed, T? Object)> TryReadCachedAsync() + public async Task<(bool Succeed, tObject? Object)> TryReadCachedAsync() { EnsureUndisposed(); if (!IsCacheEnabled) return (false, default); @@ -120,13 +179,13 @@ public bool TryReadCached(out T? obj) ? await Stream.ReadOneByteAsync(this).DynamicContext() : await Stream.ReadUShortAsync(this).DynamicContext(); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - return (true, SerializerException.Wrap(() => (T)_Cache[index])); + return (true, SerializerException.Wrap(() => (tObject)_Cache[index])); default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); } } /// - public bool TryReadCachedObject(out T? obj, bool readType = false) + public bool TryReadCachedObject(out tObject? obj, bool readType = false) { EnsureUndisposed(); obj = default; @@ -163,7 +222,7 @@ public bool TryReadCachedObject(out T? obj, bool readType = false) case SequenceTypes.Cached: int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - obj = SerializerException.Wrap(() => (T)_Cache[index]); + obj = SerializerException.Wrap(() => (tObject)_Cache[index]); if (readType) LastObjectType = obj!.GetObjectSerializerInfo().ObjectType; return true; default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); @@ -171,7 +230,7 @@ public bool TryReadCachedObject(out T? obj, bool readType = false) } /// - public async Task<(bool Succeed, T? Object)> TryReadCachedObjectAsync(bool readType = false) + public async Task<(bool Succeed, tObject? Object)> TryReadCachedObjectAsync(bool readType = false) { EnsureUndisposed(); if (!IsCacheEnabled) return (false, default); @@ -211,7 +270,7 @@ public bool TryReadCachedObject(out T? obj, bool readType = false) ? await Stream.ReadOneByteAsync(this).DynamicContext() : await Stream.ReadUShortAsync(this).DynamicContext(); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - T obj = SerializerException.Wrap(() => (T)_Cache[index])!; + tObject obj = SerializerException.Wrap(() => (tObject)_Cache[index])!; if (readType) LastObjectType = obj.GetObjectSerializerInfo().ObjectType; return (true, obj); default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); @@ -219,7 +278,7 @@ public bool TryReadCachedObject(out T? obj, bool readType = false) } /// - public bool TryReadCachedObjectCountable(out T? obj, out long len, bool readType = false) + public bool TryReadCachedObjectCountable(out tObject? obj, out long len, bool readType = false) { EnsureUndisposed(); obj = default; @@ -245,7 +304,7 @@ public bool TryReadCachedObjectCountable(out T? obj, out long len, bool readT case SequenceTypes.Cached: int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - obj = SerializerException.Wrap(() => (T)_Cache[index]); + obj = SerializerException.Wrap(() => (tObject)_Cache[index]); LastObjectType = obj!.GetObjectSerializerInfo().ObjectType; return true; default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); @@ -253,7 +312,7 @@ public bool TryReadCachedObjectCountable(out T? obj, out long len, bool readT } /// - public async Task<(bool Succeed, T? Object, long Length)> TryReadCachedObjectCountableAsync(bool readType = false) + public async Task<(bool Succeed, tObject? Object, long Length)> TryReadCachedObjectCountableAsync(bool readType = false) { EnsureUndisposed(); if (!IsCacheEnabled) return (false, default, 0); @@ -279,13 +338,13 @@ public bool TryReadCachedObjectCountable(out T? obj, out long len, bool readT ? await Stream.ReadOneByteAsync(this).DynamicContext() : await Stream.ReadUShortAsync(this).DynamicContext(); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - return (true, SerializerException.Wrap(() => (T)_Cache[index]), 0); + return (true, SerializerException.Wrap(() => (tObject)_Cache[index]), 0); default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); } } /// - public bool TryReadCachedNumber(out T? obj, bool readType = false) where T : struct, IConvertible + public bool TryReadCachedNumber(out tObject? obj, bool readType = false) where tObject : struct, IConvertible { EnsureUndisposed(); obj = default; @@ -322,7 +381,7 @@ public bool TryReadCachedNumber(out T? obj, bool readType = false) where T : case SequenceTypes.Cached: int index = CacheIndexSize == 1 || st.ContainsAllFlags(SequenceTypes.SmallIndex) ? Stream.ReadOneByte(this) : Stream.ReadUShort(this); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - obj = SerializerException.Wrap(() => (T)_Cache[index]); + obj = SerializerException.Wrap(() => (tObject)_Cache[index]); LastNumberType = obj.GetNumberType(); return true; default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); @@ -330,7 +389,7 @@ public bool TryReadCachedNumber(out T? obj, bool readType = false) where T : } /// - public async Task<(bool Succeed, T? Object)> TryReadCachedNumberAsync(bool readType = false) where T : struct, IConvertible + public async Task<(bool Succeed, tObject? Object)> TryReadCachedNumberAsync(bool readType = false) where tObject : struct, IConvertible { EnsureUndisposed(); if (!IsCacheEnabled) return (false, default); @@ -368,17 +427,29 @@ public bool TryReadCachedNumber(out T? obj, bool readType = false) where T : ? await Stream.ReadOneByteAsync(this).DynamicContext() : await Stream.ReadUShortAsync(this).DynamicContext(); if (index < 0 || index >= CacheOffset) throw new SerializerException($"Invalid cache index #{index}", new InvalidDataException()); - T num = SerializerException.Wrap(() => (T)_Cache[index]); + tObject num = SerializerException.Wrap(() => (tObject)_Cache[index]); LastNumberType = num.GetNumberType(); return (true, num); default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); } } + /// + /// Create a temporary instance which uses another serializer version + /// + /// New serializer version + /// Temporary instance (don't forget to dispose!) + public DeserializerContext WithSerializerVersion(int version) => new(this, version); + + /// + IDeserializationContext IDeserializationContext.WithSerializerVersion(int version) => WithSerializerVersion(version); + /// protected override void Dispose(bool disposing) { - if (_Cache.Length != 0) StreamSerializer.ObjectCachePool.Return(_Cache); + base.Dispose(disposing); + if (_BaseContext == null && _Cache.Length != 0) + StreamSerializer.ObjectCachePool.Return(_Cache); } } } diff --git a/src/Stream-Serializer-Extensions/IDeserializationContext.cs b/src/Stream-Serializer-Extensions/IDeserializationContext.cs index 8d447ae..8302366 100644 --- a/src/Stream-Serializer-Extensions/IDeserializationContext.cs +++ b/src/Stream-Serializer-Extensions/IDeserializationContext.cs @@ -75,5 +75,11 @@ public interface IDeserializationContext : ISerializerContext /// Read the type flags? /// If succeed and the number Task<(bool Succeed, T? Object)> TryReadCachedNumberAsync(bool readType = false) where T : struct, IConvertible; + /// + /// Create a temporary instance which uses another serializer version + /// + /// New serializer version + /// Temporary instance (don't forget to dispose!) + IDeserializationContext WithSerializerVersion(int version); } } diff --git a/src/Stream-Serializer-Extensions/ISerializerContext.cs b/src/Stream-Serializer-Extensions/ISerializerContext.cs index 2a87a42..ea03c50 100644 --- a/src/Stream-Serializer-Extensions/ISerializerContext.cs +++ b/src/Stream-Serializer-Extensions/ISerializerContext.cs @@ -13,6 +13,10 @@ public interface ISerializerContext : IDisposableObject /// Stream Stream { get; } /// + /// Stream type + /// + Type StreamType { get; } + /// /// Serializer version /// int Version { get; } diff --git a/src/Stream-Serializer-Extensions/ItemSerializerContext.cs b/src/Stream-Serializer-Extensions/ItemSerializerContext.cs index 922f1b8..9354585 100644 --- a/src/Stream-Serializer-Extensions/ItemSerializerContext.cs +++ b/src/Stream-Serializer-Extensions/ItemSerializerContext.cs @@ -1,5 +1,4 @@ using wan24.Core; -using wan24.ObjectValidation; namespace wan24.StreamSerializerExtensions { diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs index b42df92..5ef6b19 100644 --- a/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs @@ -136,7 +136,7 @@ public void Deserialize(IDeserializationContext context) } if (ObjectType.IsGeneric()) { - if (Recursion >= SerializerContextBase.MaxRecursion) + if (Recursion >= SerializerContext.MaxRecursion) throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); int len = context.Stream.ReadOneSByte(context); IsGenericTypeDefinition = len < 0; @@ -148,6 +148,7 @@ public void Deserialize(IDeserializationContext context) } else { + using ContextRecursion cr = new(context); List list = new(len); SerializedTypeInfo info; for (int i = 0; i < len; i++) @@ -164,8 +165,9 @@ public void Deserialize(IDeserializationContext context) } else if (ObjectType.IsArray()) { - if (Recursion >= SerializerContextBase.MaxRecursion) + if (Recursion >= SerializerContext.MaxRecursion) throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + using ContextRecursion cr = new(context); ElementType = new() { Recursion = Recursion + 1 @@ -227,7 +229,7 @@ public async Task DeserializeAsync(IDeserializationContext context) } if (ObjectType.IsGeneric()) { - if (Recursion >= SerializerContextBase.MaxRecursion) + if (Recursion >= SerializerContext.MaxRecursion) throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); int len = await context.Stream.ReadOneSByteAsync(context).DynamicContext(); IsGenericTypeDefinition = len < 0; @@ -239,6 +241,7 @@ public async Task DeserializeAsync(IDeserializationContext context) } else { + using ContextRecursion cr = new(context); List list = new(len); SerializedTypeInfo info; for (int i = 0; i < len; i++) @@ -255,8 +258,9 @@ public async Task DeserializeAsync(IDeserializationContext context) } else if (ObjectType.IsArray()) { - if (Recursion >= SerializerContextBase.MaxRecursion) + if (Recursion >= SerializerContext.MaxRecursion) throw new SerializerException($"Avoided possible endless recursion (possibly manipulated byte sequence)", new StackOverflowException()); + using ContextRecursion cr = new(context); ElementType = new() { Recursion = Recursion + 1 diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs index 0a0ea61..dcf8084 100644 --- a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs @@ -261,7 +261,7 @@ private void SetTypeInfo(Type type) } if (type.IsGenericType) { - if (Recursion >= SerializerContextBase.MaxRecursion) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + if (Recursion >= SerializerContext.MaxRecursion) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); IsGenericTypeDefinition = type.IsGenericTypeDefinition; if (IsGenericTypeDefinition) { @@ -277,8 +277,9 @@ private void SetTypeInfo(Type type) } else if (type.IsArray) { - if (Recursion >= SerializerContextBase.MaxRecursion) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); - ElementType = new(type.GetElementType()!) { Recursion = Recursion + 1 }; + if (Recursion >= SerializerContext.MaxRecursion) throw new InvalidOperationException("Type information branches too deep and won't be deserializable"); + ElementType = From(type.GetElementType()!); + ElementType.Recursion = Recursion + 1; ArrayRank = type.GetArrayRank(); } Cache.TryAdd(type.GetHashCode(), this); diff --git a/src/Stream-Serializer-Extensions/SerializerContext.cs b/src/Stream-Serializer-Extensions/SerializerContext.cs index 2fe673f..fd847de 100644 --- a/src/Stream-Serializer-Extensions/SerializerContext.cs +++ b/src/Stream-Serializer-Extensions/SerializerContext.cs @@ -5,7 +5,24 @@ namespace wan24.StreamSerializerExtensions /// /// Stream serializer writing context /// - public class SerializerContext : SerializerContextBase, ISerializationContext + public class SerializerContext : SerializerContext + { + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Cache size + /// Cancellation token + public SerializerContext(Stream stream, int? cacheSize = null, CancellationToken cancellationToken = default) + : base(stream, cacheSize, cancellationToken) + { } + } + + /// + /// Stream serializer writing context + /// + /// Stream type + public class SerializerContext : SerializerContextBase, ISerializationContext where T : Stream { /// /// Cache @@ -18,7 +35,7 @@ public class SerializerContext : SerializerContextBase, ISerializationContext /// Stream (won't be disposed) /// Cache size /// Cancellation token - public SerializerContext(Stream stream, int? cacheSize = null, CancellationToken cancellationToken = default) + public SerializerContext(T stream, int? cacheSize = null, CancellationToken cancellationToken = default) : base(stream, StreamSerializer.Version, cacheSize, cancellationToken) { _Cache = _CacheSize > 0 ? StreamSerializer.HashCodeCachePool.RentClean(_CacheSize) : Array.Empty(); @@ -72,7 +89,7 @@ public override int CacheSize } /// - public bool TryWriteCached(T? obj) + public bool TryWriteCached(tObject? obj) { EnsureUndisposed(); // Ensure using the cache @@ -97,7 +114,7 @@ public bool TryWriteCached(T? obj) } /// - public async Task TryWriteCachedAsync(T? obj) + public async Task TryWriteCachedAsync(tObject? obj) { EnsureUndisposed(); // Ensure using the cache @@ -122,7 +139,7 @@ public async Task TryWriteCachedAsync(T? obj) } /// - public bool TryWriteCached(T? obj, ObjectTypes? objType, bool writeType = false) + public bool TryWriteCached(tObject? obj, ObjectTypes? objType, bool writeType = false) { EnsureUndisposed(); // Ensure using the cache @@ -201,7 +218,7 @@ public bool TryWriteCached(T? obj, ObjectTypes? objType, bool writeType = fal } /// - public async Task TryWriteCachedAsync(T? obj, ObjectTypes? objType, bool writeType = false) + public async Task TryWriteCachedAsync(tObject? obj, ObjectTypes? objType, bool writeType = false) { EnsureUndisposed(); // Ensure using the cache @@ -280,7 +297,7 @@ public async Task TryWriteCachedAsync(T? obj, ObjectTypes? objType, boo } /// - public bool TryWriteCachedCountable(T? obj, long? len, bool writeType = false) + public bool TryWriteCachedCountable(tObject? obj, long? len, bool writeType = false) { EnsureUndisposed(); // Ensure using the cache @@ -355,7 +372,7 @@ public bool TryWriteCachedCountable(T? obj, long? len, bool writeType = false } /// - public async Task TryWriteCachedCountableAsync(T? obj, long? len, bool writeType = false) + public async Task TryWriteCachedCountableAsync(tObject? obj, long? len, bool writeType = false) { EnsureUndisposed(); // Ensure using the cache @@ -430,7 +447,7 @@ public async Task TryWriteCachedCountableAsync(T? obj, long? len, bool } /// - public bool TryWriteCached(T? num, NumberTypes? numberType, bool writeType = false) where T : struct, IConvertible + public bool TryWriteCached(tObject? num, NumberTypes? numberType, bool writeType = false) where tObject : struct, IConvertible { EnsureUndisposed(); // Ensure using the cache @@ -510,7 +527,7 @@ public bool TryWriteCached(T? num, NumberTypes? numberType, bool writeType = } /// - public async Task TryWriteCachedAsync(T? num, NumberTypes? numberType, bool writeType = false) where T : struct, IConvertible + public async Task TryWriteCachedAsync(tObject? num, NumberTypes? numberType, bool writeType = false) where tObject : struct, IConvertible { EnsureUndisposed(); // Ensure using the cache @@ -652,6 +669,7 @@ protected bool WriteNotCached(int hashCode) /// protected override void Dispose(bool disposing) { + base.Dispose(disposing); if (_Cache.Length != 0) StreamSerializer.HashCodeCachePool.Return(_Cache); } } diff --git a/src/Stream-Serializer-Extensions/SerializerContextBase.cs b/src/Stream-Serializer-Extensions/SerializerContextBase.cs index d6b5dc3..6f40271 100644 --- a/src/Stream-Serializer-Extensions/SerializerContextBase.cs +++ b/src/Stream-Serializer-Extensions/SerializerContextBase.cs @@ -1,4 +1,6 @@ using System.Buffers; +using System.Collections.Concurrent; +using System.Collections.Generic; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -8,6 +10,15 @@ namespace wan24.StreamSerializerExtensions /// public abstract class SerializerContextBase : DisposableBase, ISerializerContext { + /// + /// Serialization context table + /// + public static readonly ConcurrentDictionary SerializationContextTable = new(); + /// + /// Deserialization context table + /// + public static readonly ConcurrentDictionary DeserializationContextTable = new(); + /// /// Cache size /// @@ -20,12 +31,13 @@ public abstract class SerializerContextBase : DisposableBase, ISerializerContext /// /// Constructor /// - /// Stream (won't be disposed) + /// Stream /// Serializer version - /// Cache size + /// Cache size (1-) /// Cancellation token protected SerializerContextBase(Stream stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = default) : base() { + if (version != null) this.EnsureValidArgument(nameof(version), 1, StreamSerializer.VERSION, version.Value & byte.MaxValue); if (cacheSize != null) { this.EnsureValidArgument(nameof(cacheSize), 0, ushort.MaxValue + 1, cacheSize.Value); @@ -34,6 +46,37 @@ protected SerializerContextBase(Stream stream, int? version = null, int? cacheSi Stream = stream; Version = version ?? StreamSerializer.Version; Cancellation = cancellationToken; + if(this is ISerializationContext sc) + { + SerializationContextTable.TryAdd(stream.GetHashCode(), sc); + } + else if(this is IDeserializationContext dc) + { + DeserializationContextTable.TryAdd(stream.GetHashCode(), dc); + } + } + + /// + /// Constructor + /// + /// Base deserializer context + /// Serializer version + protected SerializerContextBase(SerializerContextBase baseContext, int version) : base() + { + this.EnsureValidArgument(nameof(baseContext), baseContext as IDeserializationContext, () => $"{nameof(baseContext)} is a {baseContext.GetType()}, but must be a {typeof(IDeserializationContext)}"); + this.EnsureValidArgument(nameof(version), 1, StreamSerializer.VERSION, version & byte.MaxValue); + baseContext.EnsureUndisposed(); + BaseContext = baseContext; + Stream = baseContext.Stream; + Version = version; + Cancellation = baseContext.Cancellation; + _RecursionLevel = baseContext.RecursionLevel; + BufferPool = baseContext.BufferPool; + _CacheSize = baseContext.CacheSize; + RealCacheSize = baseContext.RealCacheSize; + CacheIndexSize = baseContext.CacheIndexSize; + CacheOffset = baseContext.CacheOffset; + Nullable = baseContext.Nullable; } /// @@ -46,9 +89,15 @@ protected SerializerContextBase(Stream stream, int? version = null, int? cacheSi /// public static int MaxRecursion { get; set; } = 32; + /// + public SerializerContextBase? BaseContext { get; } + /// public Stream Stream { get; } + /// + public abstract Type StreamType { get; } + /// public int Version { get; } @@ -104,7 +153,7 @@ public int RecursionLevel public bool EnableCache() { if (IsCacheEnabled || RealCacheSize == 0) return false; - CacheSize = RealCacheSize; + _CacheSize = RealCacheSize; return true; } @@ -112,7 +161,7 @@ public bool EnableCache() public bool DisableCache() { if (!IsCacheEnabled) return false; - CacheSize = 0; + _CacheSize = 0; return true; } @@ -129,5 +178,56 @@ public virtual async ValueTask DisposeStreamAsync() await DisposeAsync().DynamicContext(); await Stream.DisposeAsync().DynamicContext(); } + + /// + protected override void Dispose(bool disposing) + { + if (BaseContext == null) + { + int shc = Stream.GetHashCode(); + if (this is ISerializationContext && SerializationContextTable.TryGetValue(shc, out ISerializationContext? sc) && sc == this) + { + SerializationContextTable.TryRemove(shc, out _); + } + else if (this is IDeserializationContext && DeserializationContextTable.TryGetValue(shc, out IDeserializationContext? dc) && dc == this) + { + DeserializationContextTable.TryRemove(shc, out _); + } + } + } + } + + /// + /// Base class for a stream serializer context + /// + /// Stream type + public abstract class SerializerContextBase : SerializerContextBase where T : Stream + { + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Serializer version + /// Cache size + /// Cancellation token + protected SerializerContextBase(T stream, int? version = null, int? cacheSize = null, CancellationToken cancellationToken = default) + : base(stream, version, cacheSize, cancellationToken) + => GenericStream = stream; + + /// + /// Constructor + /// + /// Base deserializer context + /// Serializer version + protected SerializerContextBase(SerializerContextBase baseContext, int version) : base(baseContext, version) + => GenericStream = baseContext.GenericStream; + + /// + /// Stream + /// + public T GenericStream { get; } + + /// + public override Type StreamType => typeof(T); } } diff --git a/src/Stream-Serializer-Extensions/SerializerHelper.cs b/src/Stream-Serializer-Extensions/SerializerHelper.cs index 19fb305..8fbb628 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -88,7 +88,7 @@ public static T ValidateDeserializedObject(this T value) where T : notnull public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerVersion = true) { using MemoryStream ms = new(); - using SerializerContext context = new(ms); + using SerializerContext context = new(ms); if (includeSerializerVersion) ms.WriteSerializerVersion(context); ms.WriteSerialized(obj, context); return ms.ToArray(); @@ -108,9 +108,11 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV public static T ToObject(this byte[] bytes, bool includesSerializerVersion = true) where T : class, IStreamSerializer, new() { using MemoryStream ms = new(bytes); - using DeserializerContext context = new(ms); + using DeserializerContext context = new(ms); int version = includesSerializerVersion ? ms.ReadSerializerVersion(context) : StreamSerializer.Version; - using DeserializerContext objContext = includesSerializerVersion && version != StreamSerializer.Version ? new(ms, version) : context; + using DeserializerContext objContext = includesSerializerVersion && version != StreamSerializer.Version + ? context.WithSerializerVersion(version) + : context; return ms.ReadSerialized(context); } } diff --git a/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs b/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs index d15261a..e531521 100644 --- a/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs +++ b/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs @@ -18,6 +18,18 @@ public static T WithKeyOptions(this T options, ISerializerOptions? keyOptions return options; } + /// + /// Remove key serializer options + /// + /// Options type + /// Options + /// Options + public static T WithoutKeyOptions(this T options) where T : ISerializerOptions + { + options.KeyOptions = null; + return options; + } + /// /// Configure value serializer options /// @@ -30,5 +42,17 @@ public static T WithValueOptions(this T options, ISerializerOptions? valueOpt options.ValueOptions = valueOptions; return options; } + + /// + /// Remove value serializer options + /// + /// Options type + /// Options + /// Options + public static T WithoutValueOptions(this T options) where T : ISerializerOptions + { + options.ValueOptions = null; + return options; + } } } diff --git a/src/Stream-Serializer-Extensions/SerializerTypes.cs b/src/Stream-Serializer-Extensions/SerializerTypes.cs index a5160c1..f6aeddc 100644 --- a/src/Stream-Serializer-Extensions/SerializerTypes.cs +++ b/src/Stream-Serializer-Extensions/SerializerTypes.cs @@ -6,15 +6,15 @@ public enum SerializerTypes { /// - /// Any type serializer + /// Any type serializer (uses ) /// Any, /// - /// Any object + /// Any object (uses ) /// AnyObject, /// - /// Registered serializer + /// Registered serializer ( f.e.) /// Serializer, /// @@ -70,7 +70,7 @@ public enum SerializerTypes /// Stream, /// - /// CLR type + /// CLR type (using ) /// Type } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs index caa4cae..ff2bd52 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.String.cs @@ -176,9 +176,16 @@ public static Task ReadString32Async(this Stream stream, IDeserializatio [SkipLocalsInit] private static string ReadString(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - int len = ReadNumber(context.Stream, context); + if (context.TryReadCachedObjectCountable(out string? res, out long l)) + //FIXME How to validate the correct length in this case? + return res ?? throw new SerializerException("Non-nullable string expected, but NULL deserialized", new InvalidDataException()); + int len = (int)l; SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0) return string.Empty; + if (len == 0) + { + if (context.SerializerVersion > 2) throw new SerializerException($"Deserialized empty string", new InvalidDataException()); + return string.Empty;// Compatibility with serializer version 2 + } if (len <= Settings.StackAllocBorder) { Span buffer = stackalloc byte[len]; @@ -212,9 +219,15 @@ private static string ReadString(IDeserializationContext context, int minLen, in #endif private static async Task ReadStringAsync(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - int len = await ReadNumberAsync(context.Stream, context).DynamicContext(); + (bool cached, string? res, long l) = await context.TryReadCachedObjectCountableAsync().DynamicContext(); + if (cached) return res ?? throw new SerializerException("Non-nullable string expected, but NULL deserialized", new InvalidDataException()); + int len = (int)l; SerializerHelper.EnsureValidLength(len, minLen, maxLen); - if (len == 0) return string.Empty; + if (len == 0) + { + if (context.SerializerVersion > 2) throw new SerializerException($"Deserialized empty string", new InvalidDataException()); + return string.Empty;// Compatibility with serializer version 2 + } byte[] buffer = await ReadSerializedDataAsync(context.Stream, len, context).DynamicContext(); try { @@ -240,7 +253,7 @@ private static async Task ReadStringAsync(IDeserializationContext contex [SkipLocalsInit] private static string? ReadNullableString(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - int? len; + int len; switch (context.SerializerVersion)// Serializer version switch { case 1: @@ -252,25 +265,29 @@ private static async Task ReadStringAsync(IDeserializationContext contex break; default: { - len = ReadNumberNullable(context.Stream, context); - if (len == null) return null; + if (context.TryReadCachedObjectCountable(out string? res, out long l)) return res; + len = (int)l; } break; } - SerializerHelper.EnsureValidLength(len.Value, minLen, maxLen); - if (len == 0) return string.Empty; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) + { + if (context.SerializerVersion > 2) throw new SerializerException($"Deserialized empty string", new InvalidDataException()); + return string.Empty;// Compatibility with serializer version 2 + } if (len <= Settings.StackAllocBorder) { - Span buffer = stackalloc byte[len.Value]; + Span buffer = stackalloc byte[len]; if (context.Stream.Read(buffer) != len) throw new SerializerException($"Failed to read {len} bytes serialized data", new IOException()); return action(buffer); } else { - byte[] buffer = ReadSerializedData(context.Stream, len.Value, context); + byte[] buffer = ReadSerializedData(context.Stream, len, context); try { - return action(buffer.AsSpan(0, len.Value)); + return action(buffer.AsSpan(0, len)); } finally { @@ -292,7 +309,7 @@ private static async Task ReadStringAsync(IDeserializationContext contex #endif private static async Task ReadNullableStringAsync(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - int? len; + int len; switch (context.SerializerVersion)// Serializer version switch { case 1: @@ -304,17 +321,22 @@ private static async Task ReadStringAsync(IDeserializationContext contex break; default: { - len = await ReadNumberNullableAsync(context.Stream, context).DynamicContext(); - if (len == null) return null; + (bool cached, string? res, long l) = await context.TryReadCachedObjectCountableAsync().DynamicContext(); + if (cached) return res; + len = (int)l; } break; } - SerializerHelper.EnsureValidLength(len.Value, minLen, maxLen); - if (len == 0) return string.Empty; - byte[] buffer = await ReadSerializedDataAsync(context.Stream, len.Value, context).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len == 0) + { + if (context.SerializerVersion > 2) throw new SerializerException($"Deserialized empty string", new InvalidDataException()); + return string.Empty;// Compatibility with serializer version 2 + } + byte[] buffer = await ReadSerializedDataAsync(context.Stream, len, context).DynamicContext(); try { - return action(buffer.AsSpan(0, len.Value)); + return action(buffer.AsSpan(0, len)); } finally { diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs index 23f854a..ea48eb9 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs @@ -46,7 +46,9 @@ public static partial class StreamExtensions #endif public static int ReadSerializerVersion(this Stream stream, IDeserializationContext context) { - int res = ReadNumber(stream, context); + // The serializer version number sequence is fixed to serializer version #2 + using DeserializerContext versionContext = new(stream, version: 2, cacheSize: 0, context.Cancellation); + int res = ReadNumber(stream, versionContext); if (res < 1 || (res & byte.MaxValue) > StreamSerializer.VERSION) throw new SerializerException($"Invalid or unsupported stream serializer version #{res}", new InvalidDataException()); return res; @@ -64,7 +66,9 @@ public static int ReadSerializerVersion(this Stream stream, IDeserializationCont #endif public static async Task ReadSerializerVersionAsync(this Stream stream, IDeserializationContext context) { - int res = await ReadNumberAsync(stream, context).DynamicContext(); + // The serializer version number sequence is fixed to serializer version #2 + using DeserializerContext versionContext = new(stream, version: 2, cacheSize: 0, context.Cancellation); + int res = await ReadNumberAsync(stream, versionContext).DynamicContext(); if (res < 1 || (res & byte.MaxValue) > StreamSerializer.VERSION) throw new SerializerException($"Invalid or unsupported stream serializer version #{res}", new InvalidDataException()); return res; diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs b/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs index dfca80a..1bd3f24 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs @@ -9,18 +9,21 @@ public static partial class StreamExtensions /// /// Create a serialization context for writing to the stream /// + /// Stream type /// Stream (won't be disposed) /// Cache size /// Cancellation token /// Context (don't forget to dispose!) [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ISerializationContext CreateSerializationContext(this Stream stream, int? cacheSize = null, CancellationToken cancellationToken = default) - => new SerializerContext(stream, cacheSize, cancellationToken); + public static SerializerContext CreateSerializationContext(this T stream, int? cacheSize = null, CancellationToken cancellationToken = default) + where T : Stream + => new(stream, cacheSize, cancellationToken); /// /// Create a deserialization context for reading from the stream /// + /// Stream type /// Stream (won't be disposed) /// Serializer version /// Cache size @@ -28,12 +31,13 @@ public static ISerializationContext CreateSerializationContext(this Stream strea /// Context (don't forget to dispose!) [TargetedPatchingOptOut("Tiny method")] [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static IDeserializationContext CreateDeserializationContext( - this Stream stream, - int? version = null, - int? cacheSize = null, + public static DeserializerContext CreateDeserializationContext( + this T stream, + int? version = null, + int? cacheSize = null, CancellationToken cancellationToken = default ) - => new DeserializerContext(stream, version, cacheSize, cancellationToken); + where T : Stream + => new(stream, version, cacheSize, cancellationToken); } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs index 98d1d5c..37d9398 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.String.cs @@ -226,15 +226,12 @@ public static Task WriteString32NullableAsync(this Task stream, [SkipLocalsInit] private static Stream WriteString(ISerializationContext context, string value, int lenShift, StringWriter_Delegate action) { - if (value.Length == 0) - { - Write(context.Stream, (byte)NumberTypes.Zero, context); - return context.Stream; - } - int len = value.Length << lenShift; + int len = value == null ? 0 : value.Length << lenShift; if (len <= Settings.StackAllocBorder) { - Span buffer = stackalloc byte[len]; + Span buffer = (value?.Length ?? 0) == 0 ? Array.Empty() : stackalloc byte[len]; + len = value == null ? 0 : action(buffer); + if (context.TryWriteCachedCountable(value, value == null ? null : len)) return context.Stream; context.Stream.Write(buffer[..action(buffer)]); return context.Stream; } @@ -244,13 +241,13 @@ private static Stream WriteString(ISerializationContext context, string value, i try { len = action(data); - WriteNumber(context.Stream, len, context); - return WriteSerializedData(context, data, len); + return context.TryWriteCachedCountable(value, len) + ? context.Stream + : WriteSerializedData(context, data, len); } - catch + finally { StreamSerializer.BufferPool.Return(data); - throw; } } } @@ -268,18 +265,16 @@ private static Stream WriteString(ISerializationContext context, string value, i #endif private static async Task WriteStringAsync(ISerializationContext context, string value, int lenShift, StringWriter_Delegate action) { - if (value.Length == 0) return await WriteAsync(context.Stream, (byte)NumberTypes.Zero, context).DynamicContext(); - byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); + byte[] data = (value?.Length ?? 0) == 0 ? Array.Empty() : StreamSerializer.BufferPool.Rent(value!.Length << lenShift); try { - int len = action(data); - await WriteNumberAsync(context.Stream, len, context).DynamicContext(); + int len = value == null ? 0 : action(data); + if (await context.TryWriteCachedCountableAsync(value, value == null ? null : len).DynamicContext()) return context.Stream; await WriteSerializedDataAsync(context, data, len).DynamicContext(); } - catch + finally { - StreamSerializer.BufferPool.Return(data); - throw; + if (data.Length != 0) StreamSerializer.BufferPool.Return(data); } return context.Stream; } @@ -298,21 +293,13 @@ private static async Task WriteStringAsync(ISerializationContext context [SkipLocalsInit] private static Stream WriteNullableString(ISerializationContext context, string? value, int lenShift, StringWriter_Delegate action) { - if (value == null) - { - Write(context.Stream, (byte)NumberTypes.IsNull, context); - return context.Stream; - } - if (value.Length == 0) - { - Write(context.Stream, (byte)NumberTypes.Zero, context); - return context.Stream; - } - int len = value.Length << lenShift; + int len = value == null ? 0 : value.Length << lenShift; if (len <= Settings.StackAllocBorder) { - Span buffer = stackalloc byte[len]; - context.Stream.Write(buffer[..action(buffer)]); + Span buffer = (value?.Length ?? 0) == 0 ? Array.Empty() : stackalloc byte[len]; + len = value == null ? 0 : action(buffer); + if (context.TryWriteCachedCountable(value, value == null ? null : len)) return context.Stream; + context.Stream.Write(buffer[..len]); return context.Stream; } else @@ -320,13 +307,14 @@ private static Stream WriteNullableString(ISerializationContext context, string? byte[] data = StreamSerializer.BufferPool.Rent(len); try { - WriteNumber(context.Stream, len, context); - return WriteSerializedData(context, data, action(data)); + len = action(data); + return context.TryWriteCachedCountable(value, len) + ? context.Stream + : WriteSerializedData(context, data, len); } - catch + finally { StreamSerializer.BufferPool.Return(data); - throw; } } } @@ -344,19 +332,16 @@ private static Stream WriteNullableString(ISerializationContext context, string? #endif private static async Task WriteNullableStringAsync(ISerializationContext context, string? value, int lenShift, StringWriter_Delegate action) { - if (value == null) return await WriteAsync(context.Stream, (byte)NumberTypes.IsNull, context).DynamicContext(); - if (value.Length == 0) return await WriteAsync(context.Stream, (byte)NumberTypes.Zero, context).DynamicContext(); - byte[] data = StreamSerializer.BufferPool.Rent(value.Length << lenShift); + byte[] data = (value?.Length ?? 0) == 0 ? Array.Empty() : StreamSerializer.BufferPool.Rent(value!.Length << lenShift); try { - int len = action(data); - await WriteNumberAsync(context.Stream, len, context).DynamicContext(); + int len = (value?.Length ?? 0) == 0 ? 0 : action(data); + if (await context.TryWriteCachedCountableAsync(value, value == null ? null : len).DynamicContext()) return context.Stream; await WriteSerializedDataAsync(context, data, len).DynamicContext(); } - catch + finally { - StreamSerializer.BufferPool.Return(data); - throw; + if (data.Length != 0) StreamSerializer.BufferPool.Return(data); } return context.Stream; } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs index e905a94..1f0a2a2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.cs @@ -40,6 +40,7 @@ static StreamExtensions() #endif public static Stream WriteSerializerVersion(this Stream stream, ISerializationContext context) { + // The serializer version number sequence is fixed to serializer version #2 (object n, NumberTypes nt) = StreamSerializer.Version.GetNumberAndType(); Write(stream, (byte)nt, context); switch (n) @@ -66,6 +67,7 @@ public static Stream WriteSerializerVersion(this Stream stream, ISerializationCo #endif public static async Task WriteSerializerVersionAsync(this Stream stream, ISerializationContext context) { + // The serializer version number sequence is fixed to serializer version #2 (object n, NumberTypes nt) = StreamSerializer.Version.GetNumberAndType(); await WriteAsync(stream, (byte)nt, context).DynamicContext(); switch (n) From a3fc69e37d70286d8a5c2075ae188e49ae85ab01 Mon Sep 17 00:00:00 2001 From: nd Date: Sat, 22 Jul 2023 19:10:10 +0200 Subject: [PATCH 17/17] Update + Added `StreamSerializerValueBase` which extends `ValueObjectBase` from `wan24-Core` --- .../StreamExtensions.Read.Basic.cs | 12 +- .../StreamSerializerValueBase.cs | 160 ++++++++++++++++++ 2 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 src/Stream-Serializer-Extensions/StreamSerializerValueBase.cs diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs index 97a9576..8da22bf 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs @@ -656,8 +656,10 @@ private static async Task ReadNumericAsync(IDeserializationContext context break; default: { - if (size > 2 && context.TryReadCachedNumber(out T? res)) return res; - switch (size > 2 && context.IsCacheEnabled ? context.LastNumberType!.Value : (NumberTypes)ReadOneByte(context.Stream, context)) + if (size > 2 && context.TryReadCachedNumber(out T? res, readType: true)) return res; + switch (size > 2 && context.IsCacheEnabled + ? context.LastNumberType!.Value + : (NumberTypes)ReadOneByte(context.Stream, context)) { case NumberTypes.IsNull: return null; case NumberTypes.MinValue: return min; @@ -700,10 +702,12 @@ private static async Task ReadNumericAsync(IDeserializationContext context { if (size > 2) { - (bool cached, T? res) = await context.TryReadCachedNumberAsync().DynamicContext(); + (bool cached, T? res) = await context.TryReadCachedNumberAsync(readType: true).DynamicContext(); if (cached) return res; } - switch (size > 2 && context.IsCacheEnabled ? context.LastNumberType!.Value : (NumberTypes)await ReadOneByteAsync(context.Stream, context).DynamicContext()) + switch (size > 2 && context.IsCacheEnabled + ? context.LastNumberType!.Value + : (NumberTypes)await ReadOneByteAsync(context.Stream, context).DynamicContext()) { case NumberTypes.IsNull: return null; case NumberTypes.MinValue: return min; diff --git a/src/Stream-Serializer-Extensions/StreamSerializerValueBase.cs b/src/Stream-Serializer-Extensions/StreamSerializerValueBase.cs new file mode 100644 index 0000000..8f3af17 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamSerializerValueBase.cs @@ -0,0 +1,160 @@ +using System.ComponentModel.DataAnnotations; +using wan24.Core; +using wan24.ObjectValidation; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Base class for a stream serializing value object type + /// + /// Final type + public abstract class StreamSerializerValueBase : ValueObjectBase, IObjectValidatable, IStreamSerializerVersion where T : StreamSerializerValueBase + { + /// + /// Base object version + /// + public const int BASE_VERSION = 1; + + /// + /// Object version + /// + private readonly int? _ObjectVersion; + /// + /// Serialized object version + /// + private int? _SerializedObjectVersion = null; + /// + /// Serializer version + /// + private int? _SerializerVersion = null; + + /// + /// Constructor + /// + /// Object version + protected StreamSerializerValueBase(int? objectVersion = null) : base() + => _ObjectVersion = objectVersion ?? GetType().GetCustomAttributeCached()?.Version; + + /// + /// Constructor + /// + /// Context + /// Object version + protected StreamSerializerValueBase(IDeserializationContext context, int? objectVersion = null) : base() + { + _ObjectVersion = objectVersion; + DeserializeInt(context); + } + + /// + int? IStreamSerializerVersion.ObjectVersion => _ObjectVersion; + + /// + int? IStreamSerializerVersion.SerializedObjectVersion => _SerializedObjectVersion; + + /// + int? IStreamSerializerVersion.SerializerVersion => _SerializerVersion; + + /// + /// Serialize + /// + /// Context + protected abstract void Serialize(ISerializationContext context); + + /// + /// Serialize + /// + /// Context + protected virtual async Task SerializeAsync(ISerializationContext context) + { + await Task.Yield(); + Serialize(context); + } + + /// + /// Serialize + /// + /// Context + private void SerializeInt(ISerializationContext context) + { + context.Stream.WriteSerializerVersion(context) + .WriteNumber(BASE_VERSION, context); + if (_ObjectVersion != null) context.Stream.WriteNumber(_ObjectVersion.Value, context); + Serialize(context); + } + + /// + /// Serialize + /// + /// Context + private async Task SerializeIntAsync(ISerializationContext context) + { + await context.Stream.WriteSerializerVersionAsync(context).DynamicContext(); + await context.Stream.WriteNumberAsync(BASE_VERSION, context).DynamicContext(); + if (_ObjectVersion != null) + await context.Stream.WriteNumberAsync(_ObjectVersion.Value, context).DynamicContext(); + await SerializeAsync(context).DynamicContext(); + } + + /// + /// Deserialize + /// + /// Context + protected abstract void Deserialize(IDeserializationContext context); + + /// + /// Deserialize + /// + /// Context + protected virtual async Task DeserializeAsync(IDeserializationContext context) + { + await Task.Yield(); + Deserialize(context); + } + + /// + /// Deserialize + /// + /// Context + private void DeserializeInt(IDeserializationContext context) + { + _SerializerVersion = context.Stream.ReadSerializerVersion(context); + using DeserializerContext objContext = new(context.Stream, _SerializedObjectVersion, context.CacheSize, context.Cancellation); + int bv = context.Stream.ReadNumber(objContext); + if (bv < 1 || bv > BASE_VERSION) throw new SerializerException($"Invalid base object version {bv}", new InvalidDataException()); + if (_ObjectVersion != null) _SerializedObjectVersion = StreamSerializerAdapter.ReadSerializedObjectVersion(objContext, _ObjectVersion.Value); + Deserialize(objContext); + } + + /// + /// Deserialize + /// + /// Context + private async Task DeserializeIntAsync(IDeserializationContext context) + { + _SerializerVersion = await context.Stream.ReadSerializerVersionAsync(context).DynamicContext(); + using DeserializerContext objContext = new(context.Stream, _SerializedObjectVersion, context.CacheSize, context.Cancellation); + int bv = await context.Stream.ReadNumberAsync(objContext).DynamicContext(); + if (bv < 1 || bv > BASE_VERSION) throw new SerializerException($"Invalid base object version {bv}", new InvalidDataException()); + if (_ObjectVersion != null) + _SerializedObjectVersion = await StreamSerializerAdapter.ReadSerializedObjectVersionAsync(objContext, _ObjectVersion.Value) + .DynamicContext(); + await DeserializeAsync(objContext).DynamicContext(); + } + + /// + void IStreamSerializer.Serialize(ISerializationContext context) => SerializeInt(context); + + /// + Task IStreamSerializer.SerializeAsync(ISerializationContext context) => SerializeIntAsync(context); + + /// + void IStreamSerializer.Deserialize(IDeserializationContext context) => DeserializeInt(context); + + /// + Task IStreamSerializer.DeserializeAsync(IDeserializationContext context) => DeserializeIntAsync(context); + + /// + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) => ValidatableObjectBase.ObjectValidatable(this); + } +}