diff --git a/README.md b/README.md index b53b42e..c85de16 100644 --- a/README.md +++ b/README.md @@ -15,38 +15,107 @@ 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 -**NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. +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. -## Methods +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. + +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. -The `Write` and `WriteAsync` methods will be extended with supported types, -while serializing some types is being done with specialized methods: +**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. -| Type | Serialization method | Deserialization method | +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 | | --- | --- | --- | -| `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 @@ -54,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 | @@ -77,7 +143,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. @@ -88,10 +155,11 @@ 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`. +`StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom +`StreamSerializerAttribute` and override the `GetStream` method. ## Structure serialization @@ -118,9 +186,34 @@ 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. + +## 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 @@ -329,23 +422,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 +457,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 @@ -467,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 @@ -491,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 cb8a58e..621bb25 100644 --- a/docs/api/toc.html +++ b/docs/api/toc.html @@ -17,6 +17,9 @@ wan24.StreamSerializerExtensions -

NOTE: Arrays, lists and dictionaries with nullable values aren't supported.

+

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.

+

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
IStreamSerializer (class)WriteSerializedReadSerialized
IStreamSerializer (structure)WriteSerializedStructReadSerializedStruct
StructuresWriteStructReadStruct
Array (variable length)WriteArrayReadArray
Array (fixed length)WriteFixedArrayReadFixedArray
StructureWriteStruct*ReadStruct*IListWriteListReadList
(any other)WriteAnyObject*ReadAnyObject*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:

@@ -172,7 +298,7 @@

Methods

- + @@ -197,17 +323,19 @@

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 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.

+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 +359,28 @@

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.

    +

    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 @@ -412,19 +559,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 +590,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 @@ -546,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.

    @@ -564,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 766195a..0e23248 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, @@ -21,7 +21,19 @@ "output": { ".html": { "relative_path": "api/toc.html", - "hash": "31xEXtlTOylVjAwoClUnE3apTrHUGXslSx13lGZiGcw=" + "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": "R6StkhSDWirNJl76m8gCJBXe8g0+nsDeGWuPGjuK8cE=" + "hash": "x7xazC9YV/qsSpSvDJS33CPAca31SdsZ+BWaE1gCVEU=" } }, "is_incremental": false, @@ -45,7 +57,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerConfig-1.html", - "hash": "ckPJUWv9fs8kca04BwZ8j/LUqw2Kdu7LEPvhmS6qedE=" + "hash": "EeHe5UWf9GdvUH/bUNNCBZ8Ut9pix3ScLCl0WEC1UQ4=" } }, "is_incremental": false, @@ -57,7 +69,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncDeserializer_Delegate.html", - "hash": "/yblOwaxROO7RELUXxMsiA4NNbzq9tuswEiCcFB3Z1s=" + "hash": "kGYJBc/papZ7XJS1JqamfZA0qWaDj6B4TyQpSav3svg=" } }, "is_incremental": false, @@ -69,7 +81,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.AsyncSerializer_Delegate.html", - "hash": "ETsAoI6ObOnBw6HJziJmh+WSOUWdc/kzAagnGfh1ajM=" + "hash": "e8Wad05btsYzzY1l47gmCtUPkfGz32Vy+htfwe5MqpI=" } }, "is_incremental": false, @@ -81,7 +93,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Deserializer_Delegate.html", - "hash": "V9SjMiyUx44ntZCzKjZZHaQyFhDds5pWYQ8pZ+3Kb3U=" + "hash": "K565NqeFYlj2ogy1hGF8d4WxRofa5HlQtcPdOEjuft0=" } }, "is_incremental": false, @@ -93,7 +105,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.Serializer_Delegate.html", - "hash": "N5b6Cn4EAfzUWeR0OspIEq7mG5WmNd7EDd4X4c5Z4GE=" + "hash": "d1LdQ6vSS9ocxsa0deZYcO7yuCOPSdscnjl+hPXC68U=" } }, "is_incremental": false, @@ -105,7 +117,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.AutoStreamSerializerInfo.html", - "hash": "RbE7MyD0/VkTROSogduRJSudfZsA0LGUc0SUWxLdrIs=" + "hash": "wIGFjg/sWyKR3fgkGScfVoiRQAzY0PlA2ZGam72dcvs=" } }, "is_incremental": false, @@ -117,7 +129,31 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DefaultSerializerOptions.html", - "hash": "jxseELK5Q5Qb+cmI/NECDLQv9Lg42IDAS8xC+7fGa34=" + "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": "qUilmC7U+rYbKnhCnTCrzkVILcAtyA/s9GF4lIoXx+c=" + "hash": "lOvrKKzEYAcHgrWp2rI6NHAtE5Tfsa3p0tMb7ih5fB8=" } }, "is_incremental": false, @@ -141,7 +177,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.DisposableStreamSerializerBase.html", - "hash": "eO3SV6VG0Tpgs9G0IW6atN6jhj0Y0Xe7xIneMsRBBZg=" + "hash": "jJAN8+P6DG1xWISrxEg690+e0MAx6EIlgxEwYJvsogI=" } }, "is_incremental": false, @@ -153,7 +189,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamAsyncEnumeratorBase-1.html", - "hash": "LNNskpq71EWugv+KoJPiKXZj9STzuJCMvAFkvbXWhDU=" + "hash": "HaYYgFvHPDAERSZLAziQeFVnTyHv0eZL4+i/AqmeA84=" } }, "is_incremental": false, @@ -165,7 +201,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamEnumeratorBase-1.html", - "hash": "J7BhN41LGjmyShxq+jv1ZDm8OhbP33JG0tBzPH64oM4=" + "hash": "GOLcPQLoxa9OS+tI0Xdri5c1GB4BPKwzSGTimKkyYq8=" } }, "is_incremental": false, @@ -177,7 +213,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberAsyncEnumerator-1.html", - "hash": "yNv85j1btksBLzS7BY4E6IZfT/XK14EKuF7e3DMYx6w=" + "hash": "uDFgDvFz9bkIiJH7j2XXRqhIuBH47PXDePXKqP5UDsE=" } }, "is_incremental": false, @@ -189,7 +225,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamNumberEnumerator-1.html", - "hash": "pmYRGO+NtKXN7d0LO1FyrmOIB1WLreltG2h1XqgMF7Y=" + "hash": "3UxZ7gcjwxLvh+Th6JKzuPG0VwwNcFG9oyIERQ2YRTk=" } }, "is_incremental": false, @@ -201,7 +237,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerAsyncEnumerator-1.html", - "hash": "PwjWrNL8MYuDFZm1IfPcDsJSVHGfZLj+rFsJLCEJ404=" + "hash": "sfy6rgYg2JxVWQTluN8qIwXtuiZjcmhCzTDf5E+0lXo=" } }, "is_incremental": false, @@ -213,7 +249,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamSerializerEnumerator-1.html", - "hash": "to0nIc8voGGjhFuZe2e2byAfQ9v+eRTZ6pSBe04f6is=" + "hash": "bponbnQi/DTSCsaqvpWWQPYULWOSwTjB9A4pAOe8FuA=" } }, "is_incremental": false, @@ -225,7 +261,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringAsyncEnumerator.html", - "hash": "JauzNetQ6Ng15gTF3RD/ny97UudIZmSsqMWkUr6Z43I=" + "hash": "M2FZAZ1bLBSBNqfgn6xsVWxhSsi+q/PhB7k6StQvq24=" } }, "is_incremental": false, @@ -237,7 +273,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.Enumerator.StreamStringEnumerator.html", - "hash": "DFjyisIOABJ4cSIoPzXyAnt1JD1qXcRwQns14qRFp94=" + "hash": "1bjQJ/NzvgxFRri+Vl/JmsYM3WbGZ4caM1c9A9cjFDg=" } }, "is_incremental": false, @@ -261,7 +297,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializer.html", - "hash": "4BubP6hbkw5FmgQSyHfDGZlTgy+/1/Fj+bFA+CxLOmk=" + "hash": "EqwMjPkviITKYxgrOwHIwIxMPc7pIKZLxUigEAbZjSU=" } }, "is_incremental": false, @@ -273,7 +309,43 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IAutoStreamSerializerConfig.html", - "hash": "96iL2pCfoc07C28wadGtGVByGBCEGh5TfBegaZkC+HY=" + "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": "mxMM6F/3R3+hc6OP1OpSp5nmeGmFYoTJ2ICa//ruUWc=" + "hash": "omDTv+rA8FNtyoxCMB7RfSMVNoU2Z4rKSFGwzJte2yM=" } }, "is_incremental": false, @@ -297,7 +369,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializer.html", - "hash": "gWuWTA9XCmnecl1DjvDhZQZ9WgUqRL6D0R8TAwvuNis=" + "hash": "celwFSHqSVAWVY6KYSFyRBfHh+25wq9rajNlPzY3fcU=" } }, "is_incremental": false, @@ -309,7 +381,31 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.IStreamSerializerVersion.html", - "hash": "fHZhnug25W7rjkMHiAT2IPgs0Yg+Xv5MBViBjHm0AUk=" + "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": "7gDKv/e2xS222Sv1OfGmEdReJWOYttnNikOrd9rN3RE=" + "hash": "E0fkJJW11yHs/vY6Q2O3IHCyg5s19fXRgzQAoLhv2kM=" } }, "is_incremental": false, @@ -333,7 +429,55 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.ObjectTypes.html", - "hash": "hwmdshPXs3IpEay42YCNEDqpl/IFQNpEV2tbvi3iMUM=" + "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": "ilnD/Iak4Z3xXiaTsOureDE7WM0/bHXUd0Z5s6IALwQ=" + "hash": "QbItJ4e4G4y8YNjNCOIndg3Ao2SK1vvvUrxIw65fxNE=" } }, "is_incremental": false, @@ -357,7 +501,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerException.html", - "hash": "rrMG4Cgkc3oZV97DTFhC4Sd9/9/Vb0WABoZFrQ1vbKA=" + "hash": "QKyyVliuyBzHhwMSMwIDB1aDi4JhG72DGT7YttZb9DM=" } }, "is_incremental": false, @@ -369,7 +513,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerHelper.html", - "hash": "au3P8ou36L9oxtZeaNuBKEBSsMP/mF2S3pbjMdZjNEs=" + "hash": "0GAchLXClWklOJ0rguWWpPlUa+OVMIoytZ1lNldu0TI=" } }, "is_incremental": false, @@ -381,7 +525,79 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.SerializerOptionsBase.html", - "hash": "2MUaxdH6wfbEUE1RIGmFRGRGDTlLvBb/FeVp+tLY7FE=" + "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": "lGnTNVSiqu7Y5zyi60T6oN0KySajBPDf8PrEApCuDEY=" + "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": "Z8Lu+xNesSJCdsojm2qQsKwkOrlksqPzzaOGNz5A12g=" + "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": "3b0erSBYe845BLHMBLV8Lmr7/1jQEcy/S37NCtihn2U=" + "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": "/ygeolXDSPKtsBvGfTmSpYyIw/Ykfwsf7ss7D5K4rgg=" + "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": "Mx+w2r6QdHUWbCIeHJ0ATQocFeEs2+XNFZnc7hBeU74=" + "hash": "I701Um8Ys0MiVemO0IHVRSNNYqEZpDSwhBrzkX6Hu08=" } }, "is_incremental": false, @@ -453,7 +669,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindAsyncSerializer_Delegate.html", - "hash": "lIqL7OFNK6xa7VTyM2taiLMI18KZbPB0bN+2jalryrE=" + "hash": "xC/zuQEUk6wsnBrkGwBctu17k1VlRCCUcRG6CHheA8A=" } }, "is_incremental": false, @@ -465,7 +681,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncDeserializer_Delegate.html", - "hash": "jPb/H1GGk1+eaVpuUiY4AcFzm329ROmyAl9a4nBJVlo=" + "hash": "mczqR6jgMPf5f7X6JIthNklk3w2v2CNAH6dFWYklvgk=" } }, "is_incremental": false, @@ -477,7 +693,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.FindSyncSerializer_Delegate.html", - "hash": "RwXtYxRCXoi6TegaJXR63qI0qTpkUNF1gSTtvtOsCTc=" + "hash": "V7c7fQ+1csCuYvFnYRwHH/Ad0kDDCgbyDQmxEVmoaaw=" } }, "is_incremental": false, @@ -489,7 +705,19 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Init_Delegate.html", - "hash": "QFsV8nLwvINWulJVdmIegjb73IyYrVddY/Qo6q01q0U=" + "hash": "fD8cUK0Q28eoFOaBZQNpJypsXjFZIAgbVS8OP6/phsE=" + } + }, + "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": "ixVkPhIEpsxi2bUqP/v0T8oY0FMxAXCcQQli1SfY1I0=" } }, "is_incremental": false, @@ -501,7 +729,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.LoadType_Delegate.html", - "hash": "8TMyn1/yHx/EwmMkHN/sOfe1eswzgIjjxokIXSKFZ1c=" + "hash": "SGx88tYDO21qx2bPJnNuWDSh4IOviWd+UH+ktsEy/Vk=" } }, "is_incremental": false, @@ -509,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": "x8PxfPlxsHV7XJwPbevNvpluh6R6BbRQ5W8wYn2a0XQ=" + "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.Serializer_Delegate.html", + "hash": "I/XayGmf3CrSE6z0f0Wkm1FC2eQyNvLIf2k9pJ8U1tg=" } }, "is_incremental": false, @@ -525,7 +753,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializer.html", - "hash": "2UqQD+PwTMZ4kER9OlNenEdSkHYxYLYIdnVIZoVVe0I=" + "hash": "9avvAndTywF4uaUHuhC8znOjIgKy1uuLk/IT5Og+3m0=" } }, "is_incremental": false, @@ -537,7 +765,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAdapter.html", - "hash": "lxr4mQyBZk8f1wLHGgllapR/jorzQ6uQ8r+ISnShCxw=" + "hash": "C8ZZBO1G+lSPgNyvSsnihcbxvmqx/lv6O7pUDjr7EXw=" } }, "is_incremental": false, @@ -549,7 +777,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.SerializerOptionsFactory_Delegate.html", - "hash": "/IfPkMYiCCcSGN8T7ZgyzFuf6iqd4ERx5D62jqUnCIM=" + "hash": "NBjcDfbfb3Hd7KnzwBgC0rjSb3CtkfzjXZhDWGteuvA=" } }, "is_incremental": false, @@ -561,7 +789,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.StreamFactory_Delegate.html", - "hash": "/D3k62aY4/jQpEAT+X9PC9VLnvJt9kOWVZS781WtDkg=" + "hash": "U2jB0Y9BzAAjP+7WofvIHB3AWfsA3v87vmXSIOvcKnE=" } }, "is_incremental": false, @@ -573,7 +801,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerAttribute.html", - "hash": "TZMUtz9nfv+u9Bp6UC3bO0t7+k6FGjb3vDrFhcbxElU=" + "hash": "pinHOWlfSX+BkclETMP37t3tTykUMhJHmPRWg/qk6zs=" } }, "is_incremental": false, @@ -585,7 +813,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerBase.html", - "hash": "mpYV5LFl/G+d4zCFHbmRBYSi4Fjoc5yxEQwSPI9PT3Q=" + "hash": "WWGlGqkzcmfRphy7nmK6IOlGxdW26q6bqb3LrFBBUoA=" } }, "is_incremental": false, @@ -597,7 +825,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.StreamSerializerModes.html", - "hash": "3+8XKX9EjFpdTC+yht5ol6zh/bE83RNH9xqywOQxIBo=" + "hash": "Vmnp8p9jBrEHKC32+/T8ShfzdDYJKMlaRWHe2BHo2TE=" } }, "is_incremental": false, @@ -609,7 +837,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.TypeLoadEventArgs.html", - "hash": "ncKgk8j7f2KfQou33lpmIh8rrTQts53cyc2bvRHCl9w=" + "hash": "DD+JH2QLKrxA92jAit7bs+EXqgIQgjFuxNhlCd1quDg=" } }, "is_incremental": false, @@ -621,7 +849,7 @@ "output": { ".html": { "relative_path": "api/wan24.StreamSerializerExtensions.html", - "hash": "U4AOXd9VNbkUlYgP9+6vhtg9jsfUlZ/LxcgokdjE2og=" + "hash": "msvB0sfxjafF9p0hUBlUD2nCPfKuEDlbvnIfF+00J1M=" } }, "is_incremental": false, @@ -633,7 +861,7 @@ "output": { ".html": { "relative_path": "articles/intro.html", - "hash": "pHue7mNcMUyCoQ3x6yUSoKLnvVWG57+H8jHHsCT6w5Y=" + "hash": "6W/AuNFxl7jOrleuw2b5EeERMSpPSZV8QR4SuBYsaSU=" } }, "is_incremental": false, @@ -657,7 +885,7 @@ "output": { ".html": { "relative_path": "index.html", - "hash": "HFs69W1ioFN3N15xqYOZ26CxRalSRkJHIuMQeFSr4l0=" + "hash": "1mTyzsLUdmke/TF7KJxfcdG6r0FZYIxL56hQTVTVK/g=" } }, "is_incremental": false, @@ -696,7 +924,7 @@ "ManagedReferenceDocumentProcessor": { "can_incremental": false, "incrementalPhase": "build", - "total_file_count": 50, + "total_file_count": 69, "skipped_file_count": 0 }, "TocDocumentProcessor": { diff --git a/docs/xrefmap.yml b/docs/xrefmap.yml index da98876..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,12 +327,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_ @@ -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(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_ @@ -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 @@ -2120,18 +4391,97 @@ 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_ + 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 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.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_ @@ -2139,6 +4489,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.SerializerHelper.EnsureNotNull nameWithType: SerializerHelper.EnsureNotNull +- 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_ @@ -2158,12 +4517,77 @@ 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.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_ @@ -2171,12 +4595,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_ @@ -2184,12 +4602,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_ @@ -2197,6 +4618,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_ @@ -2210,12 +4640,25 @@ 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.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_ @@ -2223,12 +4666,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,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_ @@ -2249,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_ @@ -2262,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_ @@ -2288,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_ @@ -2301,6 +4835,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_ @@ -2326,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_ @@ -2365,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_ @@ -2394,34 +4979,37 @@ 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 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_ @@ -2480,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 @@ -2493,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 @@ -2518,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_ @@ -2534,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_ @@ -2541,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_ @@ -2557,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_ @@ -2573,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_ @@ -2589,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_ @@ -2605,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_ @@ -2621,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_ @@ -2646,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_ @@ -2662,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_ @@ -2678,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_ @@ -2694,27 +5518,38 @@ 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_ - 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_ @@ -2722,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_ @@ -2738,18 +5570,12 @@ 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,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_ @@ -2757,15 +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.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_ @@ -2773,15 +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.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_ @@ -2789,15 +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.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_ @@ -2805,15 +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.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_ @@ -2821,15 +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.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_ @@ -2837,27 +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.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.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_ @@ -2865,15 +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.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_ @@ -2881,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_ @@ -2906,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_ @@ -2922,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_ @@ -2938,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_ @@ -2954,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_ @@ -2970,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_ @@ -2986,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_ @@ -3002,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_ @@ -3018,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_ @@ -3034,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_ @@ -3050,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_ @@ -3066,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_ @@ -3082,6 +5902,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDecimalNullableAsync nameWithType: StreamExtensions.ReadDecimalNullableAsync +- 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_ @@ -3089,15 +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.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_ @@ -3105,27 +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.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.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_ @@ -3133,15 +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.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_ @@ -3149,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_ @@ -3174,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_ @@ -3190,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_ @@ -3206,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_ @@ -3222,6 +6042,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadDoubleNullableAsync nameWithType: StreamExtensions.ReadDoubleNullableAsync +- 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_ @@ -3229,15 +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.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_ @@ -3245,27 +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.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.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_ @@ -3273,15 +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.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_ @@ -3289,15 +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.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_ @@ -3305,15 +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,``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_ @@ -3321,24 +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.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_ @@ -3346,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_ @@ -3362,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_ @@ -3378,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_ @@ -3394,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_ @@ -3410,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_ @@ -3426,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_ @@ -3442,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_ @@ -3458,6 +6296,38 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadIntNullableAsync nameWithType: StreamExtensions.ReadIntNullableAsync +- 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_ @@ -3465,15 +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.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_ @@ -3481,27 +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.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.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_ @@ -3509,15 +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.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_ @@ -3525,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_ @@ -3550,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_ @@ -3566,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_ @@ -3582,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_ @@ -3598,6 +6462,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadLongNullableAsync nameWithType: StreamExtensions.ReadLongNullableAsync +- 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_ @@ -3605,15 +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.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_ @@ -3621,39 +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.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.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_ @@ -3661,15 +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.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_ @@ -3677,15 +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.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_ @@ -3693,15 +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.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_ @@ -3709,27 +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.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.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_ @@ -3737,15 +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.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_ @@ -3753,36 +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.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__ - 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_ @@ -3790,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_ @@ -3806,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_ @@ -3822,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_ @@ -3838,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_ @@ -3854,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_ @@ -3870,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_ @@ -3886,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_ @@ -3902,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_ @@ -3909,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_ @@ -3925,30 +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.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__ - 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_ @@ -3956,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_ @@ -3972,12 +6896,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_ @@ -3985,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_ @@ -4001,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_ @@ -4026,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_ @@ -4042,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_ @@ -4049,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_ @@ -4065,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_ @@ -4081,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_ @@ -4097,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_ @@ -4119,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_ @@ -4132,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_ @@ -4148,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_ @@ -4164,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_ @@ -4180,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_ @@ -4196,6 +7122,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadShortNullableAsync nameWithType: StreamExtensions.ReadShortNullableAsync +- 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_ @@ -4203,15 +7138,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,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_ @@ -4219,15 +7154,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,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_ @@ -4235,15 +7170,15 @@ 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(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_ @@ -4251,24 +7186,12 @@ 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.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_ @@ -4276,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_ @@ -4292,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_ @@ -4308,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_ @@ -4324,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_ @@ -4340,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_ @@ -4356,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_ @@ -4372,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_ @@ -4388,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_ @@ -4404,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_ @@ -4420,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_ @@ -4436,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_ @@ -4459,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_ @@ -4475,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 @@ -4503,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_ @@ -4519,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_ @@ -4544,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_ @@ -4560,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_ @@ -4576,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_ @@ -4592,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_ @@ -4608,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_ @@ -4624,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_ @@ -4640,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_ @@ -4656,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_ @@ -4672,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_ @@ -4688,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_ @@ -4704,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_ @@ -4720,6 +7650,90 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.ReadUShortNullableAsync nameWithType: StreamExtensions.ReadUShortNullableAsync +- 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_ @@ -4727,114 +7741,21 @@ 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,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_ @@ -4842,21 +7763,39 @@ 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_ - 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(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_ @@ -4864,6 +7803,53 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyAsync nameWithType: StreamExtensions.WriteAnyAsync +- 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_ @@ -4871,21 +7857,39 @@ 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_ - 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(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_ @@ -4893,6 +7897,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAnyNullableAsync nameWithType: StreamExtensions.WriteAnyNullableAsync +- 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_ @@ -4900,15 +7910,21 @@ 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,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_ @@ -4916,27 +7932,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,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_ @@ -4944,15 +7945,21 @@ 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,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_ @@ -4960,15 +7967,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,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_ @@ -4976,15 +7980,21 @@ 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,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_ @@ -4992,27 +8002,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},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_ @@ -5020,15 +8018,24 @@ 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},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_ @@ -5036,87 +8043,201 @@ 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_ - 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(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_ @@ -5124,6 +8245,24 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteAsync nameWithType: StreamExtensions.WriteAsync +- 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_ @@ -5131,42 +8270,42 @@ 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_ - 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(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_ @@ -5174,6 +8313,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesAsync nameWithType: StreamExtensions.WriteBytesAsync +- 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_ @@ -5181,24 +8329,24 @@ 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_ - 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(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_ @@ -5206,6 +8354,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteBytesNullableAsync nameWithType: StreamExtensions.WriteBytesNullableAsync +- 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_ @@ -5213,15 +8367,21 @@ 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,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_ @@ -5229,27 +8389,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,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_ @@ -5257,15 +8402,21 @@ 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,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_ @@ -5273,15 +8424,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,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_ @@ -5289,15 +8437,30 @@ 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,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_ @@ -5305,27 +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.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.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_ @@ -5333,15 +8499,30 @@ 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},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_ @@ -5349,15 +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(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_ @@ -5365,15 +8561,39 @@ 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,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_ @@ -5381,15 +8601,159 @@ 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,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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIf + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIf + nameWithType: StreamExtensions.WriteIf +- 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_ + 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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNull + nameWithType: StreamExtensions.WriteIfNotNull +- 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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteIfNotNullAsync + nameWithType: StreamExtensions.WriteIfNotNullAsync +- 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_ @@ -5397,15 +8761,21 @@ 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,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_ @@ -5413,27 +8783,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,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_ @@ -5441,15 +8796,21 @@ 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,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_ @@ -5457,15 +8818,123 @@ 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},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_ @@ -5473,222 +8942,240 @@ 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_ - 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(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_ @@ -5696,6 +9183,62 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableAsync nameWithType: StreamExtensions.WriteNullableAsync +- 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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCount + nameWithType: StreamExtensions.WriteNullableCount +- 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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteNullableCountAsync + nameWithType: StreamExtensions.WriteNullableCountAsync +- 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_ @@ -5703,15 +9246,30 @@ 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,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_ @@ -5719,21 +9277,33 @@ 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.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.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_ @@ -5741,21 +9311,28 @@ 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.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_ @@ -5763,15 +9340,30 @@ 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},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_ @@ -5779,15 +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(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_ @@ -5795,15 +9402,21 @@ 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,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_ @@ -5811,27 +9424,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,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_ @@ -5839,15 +9437,21 @@ 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,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_ @@ -5855,15 +9459,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,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_ @@ -5871,21 +9472,30 @@ 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_ - 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.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_ @@ -5893,6 +9503,80 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedAsync nameWithType: StreamExtensions.WriteSerializedAsync +- 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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedData + nameWithType: StreamExtensions.WriteSerializedData +- 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_ + 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,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_ @@ -5900,21 +9584,30 @@ 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_ - 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.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_ @@ -5922,6 +9615,112 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedNullableAsync nameWithType: StreamExtensions.WriteSerializedNullableAsync +- 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_ + 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},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_ + 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},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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStruct + nameWithType: StreamExtensions.WriteSerializedStruct +- 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_ + commentId: Overload:wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync + isSpec: "True" + fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializedStructAsync + nameWithType: StreamExtensions.WriteSerializedStructAsync +- 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_ @@ -5929,21 +9728,21 @@ 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_ - 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(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_ @@ -5951,6 +9750,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteSerializerVersionAsync nameWithType: StreamExtensions.WriteSerializerVersionAsync +- 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_ @@ -5958,24 +9766,24 @@ 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_ - 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(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_ @@ -5983,6 +9791,15 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamAsync nameWithType: StreamExtensions.WriteStreamAsync +- 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_ @@ -5990,24 +9807,24 @@ 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_ - 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(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_ @@ -6015,6 +9832,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStreamNullableAsync nameWithType: StreamExtensions.WriteStreamNullableAsync +- 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_ @@ -6022,15 +9845,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,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_ @@ -6038,21 +9858,21 @@ 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_ - 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(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_ @@ -6060,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_ @@ -6067,21 +9893,21 @@ 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.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(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_ @@ -6089,6 +9915,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString16NullableAsync nameWithType: StreamExtensions.WriteString16NullableAsync +- 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_ @@ -6096,21 +9928,21 @@ 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_ - 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(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_ @@ -6118,6 +9950,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteString32Async nameWithType: StreamExtensions.WriteString32Async +- 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_ @@ -6125,21 +9963,21 @@ 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_ - 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(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_ @@ -6147,12 +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(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_ @@ -6160,6 +10007,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringAsync nameWithType: StreamExtensions.WriteStringAsync +- 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_ @@ -6167,21 +10020,21 @@ 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_ - 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(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_ @@ -6189,6 +10042,12 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamExtensions.WriteStringNullableAsync nameWithType: StreamExtensions.WriteStringNullableAsync +- 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_ @@ -6196,15 +10055,30 @@ 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.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_ @@ -6212,15 +10086,30 @@ 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.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_ @@ -6228,15 +10117,30 @@ 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.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_ @@ -6244,15 +10148,24 @@ 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.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 @@ -6265,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 @@ -6302,12 +10215,50 @@ references: isSpec: "True" fullName: wan24.StreamSerializerExtensions.StreamSerializer.BufferPool nameWithType: StreamSerializer.BufferPool -- 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(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_ + 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@,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_ @@ -6346,13 +10297,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* @@ -6400,12 +10351,37 @@ 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 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_ @@ -6438,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 @@ -6474,25 +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.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.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 @@ -6511,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 @@ -6536,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_ @@ -6549,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_ @@ -6587,15 +10589,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_ @@ -6616,12 +10618,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},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_ @@ -6629,6 +10634,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__ @@ -6645,12 +10663,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},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_ @@ -6658,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_ @@ -6671,19 +10692,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_ @@ -6697,12 +10705,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},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_ @@ -6804,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_ @@ -6843,6 +10854,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 @@ -6869,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 @@ -6972,12 +11002,19 @@ 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.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 @@ -7062,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__ @@ -7080,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_ @@ -7093,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_ @@ -7106,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_ @@ -7119,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_ @@ -7132,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_ @@ -7145,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_ @@ -7162,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_ @@ -7179,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_ @@ -7196,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/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 Docs/index.md b/src/Stream-Serializer-Extensions Docs/index.md index b53b42e..c85de16 100644 --- a/src/Stream-Serializer-Extensions Docs/index.md +++ b/src/Stream-Serializer-Extensions Docs/index.md @@ -15,38 +15,107 @@ 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 -**NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. +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. -## Methods +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. + +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. -The `Write` and `WriteAsync` methods will be extended with supported types, -while serializing some types is being done with specialized methods: +**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. -| Type | Serialization method | Deserialization method | +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 | | --- | --- | --- | -| `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 @@ -54,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 | @@ -77,7 +143,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. @@ -88,10 +155,11 @@ 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`. +`StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom +`StreamSerializerAttribute` and override the `GetStream` method. ## Structure serialization @@ -118,9 +186,34 @@ 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. + +## 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 @@ -329,23 +422,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 +457,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 @@ -467,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 @@ -491,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 07b6f5a..084cb5a 100644 --- a/src/Stream-Serializer-Extensions Docs/log.txt +++ b/src/Stream-Serializer-Extensions Docs/log.txt @@ -51,5 +51,32 @@ {"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"} +{"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"} +{"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"} +{"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"} +{"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"} +{"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/AutoStreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs new file mode 100644 index 0000000..2ef7026 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/AutoStreamSerializer_Tests.cs @@ -0,0 +1,277 @@ +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 SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + 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, sc) + .WriteSerialized(test5a, sc) + .WriteSerialized(test5b, sc); + ms.Position = 0; + { + Assert.AreEqual(stream.Length, stream.Position); + using TestObject5 test5_2 = ms.ReadSerialized(dc); + 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(dc); + 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(dc); + 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 SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + 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, sc) + .WriteSerializedAsync(test5a, sc) + .WriteSerializedAsync(test5b, sc); + ms.Position = 0; + { + Assert.AreEqual(stream.Length, stream.Position); + using TestObject5 test5_2 = await ms.ReadSerializedAsync(dc); + 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(dc); + 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(dc); + 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(); + 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(dc); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3a temp = ms.ReadAnyObject(dc); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3b temp = ms.ReadAnyObject(dc); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsFalse(temp.Field3); + } + } + + [TestMethod] + public async Task OptOutAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3a temp = await ms.ReadAnyObjectAsync(dc); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject3b temp = await ms.ReadAnyObjectAsync(dc); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsFalse(temp.Field3); + } + } + + [TestMethod] + public void OptIn_Tests() + { + using MemoryStream ms = new(); + 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(dc); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject4a temp = ms.ReadAnyObject(dc); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject4b temp = ms.ReadAnyObject(dc); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsFalse(temp.Field3); + } + } + + [TestMethod] + public async Task OptInAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc); + Assert.IsTrue(temp.Field1); + Assert.IsFalse(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + TestObject4a temp = await ms.ReadAnyObjectAsync(dc); + Assert.IsTrue(temp.Field1); + Assert.IsTrue(temp.Field2); + Assert.IsTrue(temp.Field3); + } + { + 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 new file mode 100644 index 0000000..965e6bc --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/CustomStreamSerializer_Tests.cs @@ -0,0 +1,106 @@ +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)] = (c, v) => + { + syncSerializer++; + c.Stream.Write(((TestObject)v!).Value, c); + }; + StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (c, v) => + { + asyncSerializer++; + await c.Stream.WriteAsync(((TestObject)v!).Value, c); + }; + StreamSerializer.SyncDeserializer[typeof(TestObject)] = (c, t) => + { + syncDeserializer++; + return new TestObject() { Value = c.Stream.ReadBool(c) }; + }; + StreamSerializer.AsyncDeserializer[typeof(TestObject)] = DeserializeTestObject; + try + { + using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteObject(new TestObject() { Value = true }, sc); + ms.Position = 0; + Assert.IsTrue(ms.ReadObject(dc).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)] = (c, v) => + { + syncSerializer++; + c.Stream.Write(((TestObject)v!).Value, c); + }; + StreamSerializer.AsyncSerializer[typeof(TestObject)] = async (c, v) => + { + asyncSerializer++; + await c.Stream.WriteAsync(((TestObject)v!).Value, c); + }; + StreamSerializer.SyncDeserializer[typeof(TestObject)] = (c, t) => + { + syncDeserializer++; + return new TestObject() { Value = c.Stream.ReadBool(c) }; + }; + StreamSerializer.AsyncDeserializer[typeof(TestObject)] = DeserializeTestObject; + try + { + using MemoryStream ms = new(); + 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(dc)).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(IDeserializationContext context, Type type) + { + AsyncDeserializer++; + return new TestObject() { Value = await context.Stream.ReadBoolAsync(context) }; + } + } +} 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/SerializerHelper_Tests.cs b/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs new file mode 100644 index 0000000..dc6d450 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/SerializerHelper_Tests.cs @@ -0,0 +1,273 @@ +using System.Reflection; +using wan24.Core; +using wan24.StreamSerializerExtensions; + +//TODO Add more tests + +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/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/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.Any.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs new file mode 100644 index 0000000..11e16b0 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Any.cs @@ -0,0 +1,179 @@ +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 SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + 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()); + }), + (typeof(Type), (a,b)=>Assert.AreEqual(a,b,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, sc); + ms.Position = 0; + b = ms.ReadAny(dc); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + ms.WriteAnyNullable(true, sc); + ms.Position = 0; + Assert.AreEqual(true, ms.ReadAnyNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteAnyNullable(null, sc); + ms.Position = 0; + Assert.IsNull(ms.ReadAnyNullable(dc)); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = true; + } + } + + [TestMethod] + public async Task AnyAsync_Tests() + { + StreamExtensions.AnyObjectAttributeRequired = false; + 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; + (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()); + }), + (typeof(Type), (a,b)=>Assert.AreEqual(a,b,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, sc); + ms.Position = 0; + b = await ms.ReadAnyAsync(dc); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + await ms.WriteAnyNullableAsync(true, sc); + ms.Position = 0; + Assert.AreEqual(true, await ms.ReadAnyNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteAnyNullableAsync(null, sc); + ms.Position = 0; + Assert.IsNull(await ms.ReadAnyNullableAsync(dc)); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = 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..4b98c7e --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Array.cs @@ -0,0 +1,169 @@ +using System.Collections; +using System.Security.Cryptography; +using wan24.Core; +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + 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, sc); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + CompareArray(arr, ms.ReadArray(dc)); + arr = Array.Empty(); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArray(arr, sc); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArrayNullable(null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadArrayNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteArrayNullable(arr, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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(); + 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, sc); + ms.Position = 0; + CompareArray(arr, ms.ReadArray(dc)); + } + finally + { + foreach (object? o in arr) (o as IDisposable)?.Dispose(); + } + } + } + + [TestMethod] + 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, sc); + Assert.AreEqual(4L, ms.Length); + ms.Position = 0; + CompareArray(arr, await ms.ReadArrayAsync(dc)); + arr = Array.Empty(); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteArrayAsync(arr, sc); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteArrayNullableAsync(null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadArrayNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteArrayNullableAsync(arr, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(await ms.ReadArrayNullableAsync(dc)); + } + + private static void CompareArray(Array a, Array b) + { + Assert.AreEqual(a.Length, b.Length); + 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.Bool.cs b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs new file mode 100644 index 0000000..90bb725 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bool.cs @@ -0,0 +1,67 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Bool_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.Write(false, sc); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsFalse(ms.ReadBool(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((bool?)null, sc); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsNull(ms.ReadBoolNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(true, sc); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsTrue(ms.ReadBoolNullable(dc)); + } + + [TestMethod] + public async Task BoolAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteAsync(false, sc); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsFalse(await ms.ReadBoolAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((bool?)null, sc); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + Assert.IsNull(await ms.ReadBoolNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(true, sc); + Assert.AreEqual(1L, ms.Position); + ms.Position = 0; + 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 new file mode 100644 index 0000000..fe91e01 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Byte.cs @@ -0,0 +1,175 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void SByte_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((sbyte)-123, sc); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)-123, ms.ReadOneSByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((sbyte?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadOneByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(sbyte.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MinValue, ms.ReadOneSByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(sbyte.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MaxValue, ms.ReadOneSByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((sbyte)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)0, ms.ReadOneSByteNullable(dc)); + } + + [TestMethod] + public async Task SByteAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((sbyte)-123, sc); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)-123, await ms.ReadOneSByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((sbyte?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadOneByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(sbyte.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MinValue, await ms.ReadOneSByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(sbyte.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(sbyte.MaxValue, await ms.ReadOneSByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((sbyte)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((sbyte)0, await ms.ReadOneSByteNullableAsync(dc)); + } + + [TestMethod] + public void Byte_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((byte)123, sc); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)123, ms.ReadOneByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((byte?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadOneByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(byte.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MinValue, ms.ReadOneByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(byte.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MaxValue, ms.ReadOneByteNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((byte)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)0, ms.ReadOneByteNullable(dc)); + } + + [TestMethod] + public async Task ByteAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((byte)123, sc); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual((byte)123, await ms.ReadOneByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((byte?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadOneByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(byte.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MinValue, await ms.ReadOneByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(byte.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(byte.MaxValue, await ms.ReadOneByteNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((byte)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..b84a658 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Bytes.cs @@ -0,0 +1,69 @@ +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(); + 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(dc); + Assert.AreEqual((int)data.Length, len); + Assert.IsTrue(data.SequenceEqual(temp)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteBytesNullable(data, sc); + Assert.AreEqual(22L, ms.Length); + ms.Position = 0; + 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, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadBytesNullable(dc)); + } + + [TestMethod] + public async Task BytesAsync_Tests() + { + byte[] data = new byte[20]; + Random.Shared.NextBytes(data); + using MemoryStream ms = new(); + 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(dc); + Assert.AreEqual((int)data.Length, len); + Assert.IsTrue(data.SequenceEqual(temp)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteBytesNullableAsync(data, sc); + Assert.AreEqual(22L, ms.Length); + ms.Position = 0; + 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, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..ff96064 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Decimal.cs @@ -0,0 +1,91 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Decimal_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((decimal)-1234567890123456789, sc); + Assert.AreEqual(17L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)-1234567890123456789, ms.ReadDecimalNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((decimal?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadDecimalNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(decimal.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MinValue, ms.ReadDecimalNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(decimal.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MaxValue, ms.ReadDecimalNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((decimal)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)0, ms.ReadDecimalNullable(dc)); + } + + [TestMethod] + public async Task DecimalAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((decimal)-1234567890123456789, sc); + Assert.AreEqual(17L, ms.Length); + ms.Position = 0; + Assert.AreEqual((decimal)-1234567890123456789, await ms.ReadDecimalNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((decimal?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadDecimalNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(decimal.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MinValue, await ms.ReadDecimalNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(decimal.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(decimal.MaxValue, await ms.ReadDecimalNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((decimal)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..30dc6f4 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Dict.cs @@ -0,0 +1,84 @@ +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(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + Dictionary dict = new() + { + {0, true }, + {1, false } + }; + ms.WriteDict(dict, sc); + ms.Position = 0; + CompareDict(dict, ms.ReadDict(dc)); + dict.Clear(); + ms.SetLength(0); + ms.Position = 0; + ms.WriteDict(dict, sc); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + ms.WriteDictNullable(null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadDictNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteDictNullable(dict, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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, sc); + ms.Position = 0; + CompareDict(dict, await ms.ReadDictAsync(dc)); + dict.Clear(); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteDictAsync(dict, sc); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteDictNullableAsync(null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadDictNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteDictNullableAsync(dict, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(await ms.ReadDictNullableAsync(dc)); + } + + 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)); + CompareObjects(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..9346266 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Double.cs @@ -0,0 +1,91 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Double_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((double)-12345678901, sc); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)-12345678901, ms.ReadDoubleNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((double?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadDoubleNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(double.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MinValue, ms.ReadDoubleNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(double.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MaxValue, ms.ReadDoubleNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((double)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)0, ms.ReadDoubleNullable(dc)); + } + + [TestMethod] + public async Task DoubleAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((double)-12345678901, sc); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((double)-12345678901, await ms.ReadDoubleNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((double?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadDoubleNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(double.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MinValue, await ms.ReadDoubleNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(double.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(double.MaxValue, await ms.ReadDoubleNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((double)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..dbe2624 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Enum.cs @@ -0,0 +1,43 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Enum_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteEnum(TestEnum.Zero, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(TestEnum.Zero, ms.ReadEnum(dc)); + } + + [TestMethod] + public async Task EnumAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteEnumAsync(TestEnum.Zero, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..36e5981 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Float.cs @@ -0,0 +1,91 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Float_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((float)-123456, sc); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)-123456, ms.ReadFloatNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((float?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadFloatNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(float.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MinValue, ms.ReadFloatNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(float.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MaxValue, ms.ReadFloatNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((float)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)0, ms.ReadFloatNullable(dc)); + } + + [TestMethod] + public async Task FloatAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((float)-123456, sc); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((float)-123456, await ms.ReadFloatNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((float?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadFloatNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(float.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MinValue, await ms.ReadFloatNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(float.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(float.MaxValue, await ms.ReadFloatNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((float)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..aff232a --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Int.cs @@ -0,0 +1,175 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Int_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((int)-123456, sc); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)-123456, ms.ReadIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((int?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(int.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MinValue, ms.ReadIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(int.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MaxValue, ms.ReadIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((int)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)0, ms.ReadIntNullable(dc)); + } + + [TestMethod] + public async Task IntAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((int)-123456, sc); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)-123456, await ms.ReadIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((int?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(int.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MinValue, await ms.ReadIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(int.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(int.MaxValue, await ms.ReadIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((int)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((int)0, await ms.ReadIntNullableAsync(dc)); + } + + [TestMethod] + public void UInt_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((uint)123456, sc); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)123456, ms.ReadUIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((uint?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadUIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(uint.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MinValue, ms.ReadUIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(uint.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MaxValue, ms.ReadUIntNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((uint)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)0, ms.ReadUIntNullable(dc)); + } + + [TestMethod] + public async Task UIntAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((uint)123456, sc); + Assert.AreEqual(5L, ms.Length); + ms.Position = 0; + Assert.AreEqual((uint)123456, await ms.ReadUIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((uint?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadUIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(uint.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MinValue, await ms.ReadUIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(uint.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(uint.MaxValue, await ms.ReadUIntNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((uint)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..8ce65b6 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.List.cs @@ -0,0 +1,80 @@ +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(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + List list = new() + { + true, + false + }; + ms.WriteList(list, sc); + ms.Position = 0; + CompareList(list, ms.ReadList(dc)); + list.Clear(); + ms.SetLength(0); + ms.Position = 0; + ms.WriteList(list, sc); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + ms.WriteListNullable(null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadListNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteListNullable(list, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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, sc); + ms.Position = 0; + CompareList(list, await ms.ReadListAsync(dc)); + list.Clear(); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteListAsync(list, sc); + Assert.AreEqual(1L, ms.Length); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteListNullableAsync(null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadListNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteListNullableAsync(list, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNotNull(await ms.ReadListNullableAsync(dc)); + } + + private static void CompareList(IList a, IList b) + { + Assert.AreEqual(a.Count, b.Count); + for (int i = 0; i < a.Count; i++) CompareObjects(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..647e340 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Long.cs @@ -0,0 +1,175 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Long_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((long)-12345678901, sc); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)-12345678901, ms.ReadLongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((long?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadLongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(long.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MinValue, ms.ReadLongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(long.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MaxValue, ms.ReadLongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((long)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)0, ms.ReadLongNullable(dc)); + } + + [TestMethod] + public async Task LongAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((long)-12345678901, sc); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)-12345678901, await ms.ReadLongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((long?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadLongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(long.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MinValue, await ms.ReadLongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(long.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(long.MaxValue, await ms.ReadLongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((long)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((long)0, await ms.ReadLongNullableAsync(dc)); + } + + [TestMethod] + public void ULong_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ulong)12345678901, sc); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)12345678901, ms.ReadULongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ulong?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadULongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ulong.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MinValue, ms.ReadULongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ulong.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MaxValue, ms.ReadULongNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ulong)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)0, ms.ReadULongNullable(dc)); + } + + [TestMethod] + public async Task ULongAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ulong)12345678901, sc); + Assert.AreEqual(9L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ulong)12345678901, await ms.ReadULongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ulong?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadULongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ulong.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MinValue, await ms.ReadULongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ulong.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ulong.MaxValue, await ms.ReadULongNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ulong)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..e27fbad --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Number.cs @@ -0,0 +1,87 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + 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), + (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, 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, dc), $"{info.Number.GetType()} {info.Number}"); + ms.SetLength(0); + ms.Position = 0; + } + ms.WriteNumberNullable(123, sc); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual(123, ms.ReadNumberNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNumberNullable((int?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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), + (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, 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, dc), $"{info.Number.GetType()} {info.Number}"); + ms.SetLength(0); + ms.Position = 0; + } + await ms.WriteNumberNullableAsync(123, sc); + Assert.AreEqual(2L, ms.Length); + ms.Position = 0; + Assert.AreEqual(123, await ms.ReadNumberNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNumberNullableAsync((int?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..6cce418 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Object.cs @@ -0,0 +1,177 @@ +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 SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + 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, sc); + ms.Position = 0; + b = ms.ReadObject(info.Object.GetType(), dc); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + ms.WriteObjectNullable(true, sc); + ms.Position = 0; + Assert.AreEqual(true, ms.ReadObjectNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteObjectNullable(null, sc); + ms.Position = 0; + Assert.IsNull(ms.ReadObjectNullable(typeof(bool), dc)); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = true; + } + } + + [TestMethod] + public async Task ObjectAsync_Tests() + { + StreamExtensions.AnyObjectAttributeRequired = false; + 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; + (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, sc); + ms.Position = 0; + b = await ms.ReadObjectAsync(info.Object.GetType(), dc); + info.Comparer(info.Object, b); + ms.SetLength(0); + ms.Position = 0; + } + await ms.WriteObjectNullableAsync(true, sc); + ms.Position = 0; + Assert.AreEqual(true, await ms.ReadObjectNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteObjectNullableAsync(null, sc); + ms.Position = 0; + Assert.IsNull(await ms.ReadObjectNullableAsync(typeof(bool), dc)); + } + finally + { + StreamExtensions.AnyObjectAttributeRequired = true; + } + } + } +} 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..fd400f2 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Serialized.cs @@ -0,0 +1,57 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + 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, sc); + ms.Position = 0; + Assert.IsTrue(ms.ReadSerialized(dc).Value); + ms.SetLength(0); + ms.Position = 0; + ms.WriteSerializedNullable(obj, sc); + ms.Position = 0; + Assert.IsTrue(ms.ReadSerializedNullable(dc)?.Value); + ms.SetLength(0); + ms.Position = 0; + ms.WriteSerializedNullable((TestObject2?)null, sc); + ms.Position = 0; + 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, sc); + ms.Position = 0; + Assert.IsTrue((await ms.ReadSerializedAsync(dc)).Value); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteSerializedNullableAsync(obj, sc); + ms.Position = 0; + Assert.IsTrue((await ms.ReadSerializedNullableAsync(dc))?.Value); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteSerializedNullableAsync((TestObject2?)null, sc); + ms.Position = 0; + 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 new file mode 100644 index 0000000..7bf6156 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Short.cs @@ -0,0 +1,175 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void Short_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((short)-1234, sc); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)-1234, ms.ReadShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((short?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(short.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MinValue, ms.ReadShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(short.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MaxValue, ms.ReadShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((short)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)0, ms.ReadShortNullable(dc)); + } + + [TestMethod] + public async Task ShortAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((short)-1234, sc); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)-1234, await ms.ReadShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((short?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(short.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MinValue, await ms.ReadShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(short.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(short.MaxValue, await ms.ReadShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((short)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((short)0, await ms.ReadShortNullableAsync(dc)); + } + + [TestMethod] + public void UShort_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ushort)1234, sc); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)1234, ms.ReadUShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ushort?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadUShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ushort.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MinValue, ms.ReadUShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(ushort.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MaxValue, ms.ReadUShortNullable(dc)); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable((ushort)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)0, ms.ReadUShortNullable(dc)); + } + + [TestMethod] + public async Task UShortAsync_Tests() + { + using MemoryStream ms = new(); + 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(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ushort)1234, sc); + Assert.AreEqual(3L, ms.Length); + ms.Position = 0; + Assert.AreEqual((ushort)1234, await ms.ReadUShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ushort?)null, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.IsNull(await ms.ReadUShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ushort.MinValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MinValue, await ms.ReadUShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync(ushort.MaxValue, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + Assert.AreEqual(ushort.MaxValue, await ms.ReadUShortNullableAsync(dc)); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteNullableAsync((ushort)0, sc); + Assert.AreEqual(1L, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..5aa8dd7 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.String.cs @@ -0,0 +1,117 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + public void String_Tests() + { + using MemoryStream ms = new(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + + string str = "abcdef"; + ms.WriteString(str, sc); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString(dc)); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + ms.WriteString(str, sc); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString(dc)); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + ms.WriteString16(str, sc); + Assert.AreEqual(((long)str.Length << 1) + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString16(dc)); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß\U0001F642"; + ms.WriteString32(str, sc); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadString32(dc)); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdef"; + ms.WriteStringNullable(str, sc); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, ms.ReadStringNullable(dc)); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + ms.WriteStringNullable(null, sc); + Assert.AreEqual(1, ms.Length); + ms.Position = 0; + Assert.IsNull(ms.ReadStringNullable(dc)); + Assert.AreEqual(ms.Length, ms.Position); + } + + [TestMethod] + 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, sc); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadStringAsync(dc)); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + await ms.WriteStringAsync(str, sc); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadStringAsync(dc)); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß"; + await ms.WriteString16Async(str, sc); + Assert.AreEqual(((long)str.Length << 1) + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadString16Async(dc)); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdefäüöß\U0001F642"; + await ms.WriteString32Async(str, sc); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadString32Async(dc)); + + ms.SetLength(0); + ms.Position = 0; + str = "abcdef"; + await ms.WriteStringNullableAsync(str, sc); + Assert.AreEqual((long)str.Length + 2, ms.Length); + ms.Position = 0; + Assert.AreEqual(str, await ms.ReadStringNullableAsync(dc)); + Assert.AreEqual(ms.Length, ms.Position); + + ms.SetLength(0); + ms.Position = 0; + await ms.WriteStringNullableAsync(null, sc); + Assert.AreEqual(1, ms.Length); + ms.Position = 0; + 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 new file mode 100644 index 0000000..976e9ae --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Struct.cs @@ -0,0 +1,59 @@ +using wan24.StreamSerializerExtensions; + +namespace Stream_Serializer_Extensions_Tests +{ + public partial class StreamExtensions_Tests + { + [TestMethod] + 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, sc); + ms.Position = 0; + Assert.IsTrue(ms.ReadStruct(dc).Value); + ms.SetLength(0); + ms.Position = 0; + + ms.WriteStructNullable(ts, sc); + ms.Position = 0; + Assert.IsTrue(ms.ReadStructNullable(dc)?.Value); + ms.SetLength(0); + ms.Position = 0; + + ms.WriteStructNullable((TestStruct?)null, sc); + ms.Position = 0; + Assert.AreEqual(1L, ms.Length); + 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, sc); + ms.Position = 0; + Assert.IsTrue((await ms.ReadStructAsync(dc)).Value); + ms.SetLength(0); + ms.Position = 0; + + await ms.WriteStructNullableAsync(ts, sc); + ms.Position = 0; + Assert.IsTrue((await ms.ReadStructNullableAsync(dc))?.Value); + ms.SetLength(0); + ms.Position = 0; + + await ms.WriteStructNullableAsync((TestStruct?)null, sc); + ms.Position = 0; + Assert.AreEqual(1L, ms.Length); + 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 new file mode 100644 index 0000000..12a9a95 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamExtensions_Tests.Type.cs @@ -0,0 +1,98 @@ +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(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + 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), + typeof(Type) + }) + { + Logging.WriteInfo($"Type {type} ({SerializedTypeInfo.From(type)})"); + ms.SetLength(0); + ms.Position = 0; + ms.Write(type, sc); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); + ms.Position = 0; + Assert.AreEqual(type, ms.ReadType(dc)); + } + foreach (Type? type in new Type?[] + { + typeof(bool), + null + }) + { + Logging.WriteInfo($"Type {type?.ToString() ?? "NULL"}"); + ms.SetLength(0); + ms.Position = 0; + ms.WriteNullable(type, sc); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); + ms.Position = 0; + Assert.AreEqual(type, ms.ReadTypeNullable(dc)); + } + } + + [TestMethod] + 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), + typeof(bool[]), + typeof(bool[,]), + typeof(List), + typeof(Dictionary), + typeof(List<>), + typeof(Dictionary<,>), + typeof(IDisposable), + typeof(Stream), + typeof(StreamExtensions_Tests), + typeof(Type) + }) + { + Logging.WriteInfo($"Type {type} ({SerializedTypeInfo.From(type)})"); + ms.SetLength(0); + ms.Position = 0; + await ms.WriteAsync(type, sc); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); + ms.Position = 0; + Assert.AreEqual(type, await ms.ReadTypeAsync(dc)); + } + 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, sc); + Logging.WriteInfo($"\tSerialized to {ms.Length} bytes"); + ms.Position = 0; + Assert.AreEqual(type, await ms.ReadTypeNullableAsync(dc)); + } + } + } +} 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 Tests/StreamSerializer_Tests.cs b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs new file mode 100644 index 0000000..568df04 --- /dev/null +++ b/src/Stream-Serializer-Extensions Tests/StreamSerializer_Tests.cs @@ -0,0 +1,71 @@ +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(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + ms.WriteSerializerVersion(sc); + ms.Position = 0; + int temp = ms.ReadSerializerVersion(dc); + 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(); + using SerializerContext sc = new(ms); + using DeserializerContext dc = new(ms); + await ms.WriteSerializerVersionAsync(sc); + ms.Position = 0; + int temp = await ms.ReadSerializerVersionAsync(dc); + 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.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 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 831eb51..aadb8d1 100644 --- a/src/Stream-Serializer-Extensions Tests/TestObject2.cs +++ b/src/Stream-Serializer-Extensions Tests/TestObject2.cs @@ -4,29 +4,25 @@ namespace Stream_Serializer_Extensions_Tests { // Testing StreamSerializerBase - internal class TestObject2 : StreamSerializerBase + 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; } - protected override void Serialize(Stream stream) => stream.Write(Value); + public virtual bool CompareWith(ITestObject other) => other is TestObject2 obj && Value == obj.Value; - protected override async Task SerializeAsync(Stream stream, CancellationToken cancellationToken) - => await stream.WriteAsync(Value, cancellationToken).DynamicContext(); + protected override void Serialize(ISerializationContext context) => context.Stream.Write(Value, context); - protected override void Deserialize(Stream stream, int version) - { - if (((IStreamSerializerVersion)this).SerializedObjectVersion != 1) throw new SerializerException("Invalid serialized object version"); - Value = stream.ReadBool(version); - } + protected override async Task SerializeAsync(ISerializationContext context) + => await context.Stream.WriteAsync(Value, context).DynamicContext(); - 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(); - } + protected override void Deserialize(IDeserializationContext context) + => Value = context.Stream.ReadBool(context); + + protected override async Task DeserializeAsync(IDeserializationContext context) + => Value = await context.Stream.ReadBoolAsync(context).DynamicContext(); } } 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-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 333f219..331163c 100644 --- a/src/Stream-Serializer-Extensions.sln +++ b/src/Stream-Serializer-Extensions.sln @@ -7,26 +7,51 @@ 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 +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 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}.Release|Any CPU.ActiveCfg = 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}.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 adc873c..ce01cbe 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)}"); } /// @@ -35,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 a834dbc..1b15bde 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 @@ -26,7 +27,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) { @@ -55,25 +56,26 @@ public AutoStreamSerializerConfig(bool initDefaultValues = true) /// Serialize /// /// Object - /// Stream - public void Serialize(T obj, Stream stream) + /// Context + public void Serialize(T obj, ISerializationContext context) { - (PropertyInfo[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); + 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 { 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()); - info.Serialize(this, obj, 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, context); } } @@ -81,26 +83,26 @@ 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) { - (PropertyInfo[] properties, List? usedDefaultValue, byte[]? defaultValueBits, int? defaultValueBitsLength) = PrepareSerialization(obj); + 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 { 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()); - await info.SerializeAsync(this, obj, stream, cancellationToken).DynamicContext(); + 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, context).DynamicContext(); } } @@ -108,23 +110,29 @@ 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) { - PropertyInfo[] 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) { - 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(context.Stream, (int)Math.Ceiling((decimal)props.Length / 8), context) + ); } - 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()); - info.Deserialize(this, obj, stream, 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, context); } } @@ -132,20 +140,22 @@ 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) { - PropertyInfo[] 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) { - 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(context.Stream, (int)Math.Ceiling((decimal)props.Length / 8), context) + .DynamicContext() ); } foreach (PropertyInfo pi in properties) @@ -153,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(); } } @@ -163,42 +173,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,35 +225,33 @@ 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; - if (defaultValueBits == null) throw new ArgumentNullException(nameof(defaultValueBits)); + ArgumentValidationHelper.EnsureValidArgument(nameof(defaultValueBits), defaultValueBits); 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 { - StreamSerializer.BufferPool.Return(defaultValueBits); + StreamSerializer.BufferPool.Return(defaultValueBits!); } return usedDefaultValue; } diff --git a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs index 6a7a725..fbc2bbe 100644 --- a/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs +++ b/src/Stream-Serializer-Extensions/AutoStreamSerializerInfo.cs @@ -1,5 +1,4 @@ -using System.Reflection; -using wan24.Core; +using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -12,17 +11,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? @@ -60,23 +60,27 @@ public AutoStreamSerializerInfo(PropertyInfo 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.GetValue(obj)); + context.Stream.WriteObjectNullable(Property.Getter!(obj), context); } else { - stream.WriteObject(Property.GetValue(obj) ?? throw new SerializerException($"{Property.DeclaringType}.{Property.Name} value is NULL", new InvalidDataException())); + context.Stream.WriteObject( + Property.Getter!(obj) + ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()), + context + ); } } else { - Serializer(config, this, obj, Property.GetValue(obj), stream); + Serializer(config, this, obj, Property.Getter!(obj), context); } } @@ -86,27 +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.GetValue(obj), cancellationToken).DynamicContext(); + await context.Stream.WriteObjectNullableAsync(Property.Getter!(obj), context).DynamicContext(); } else { - await stream.WriteObjectAsync( - Property.GetValue(obj) ?? throw new SerializerException($"{Property.DeclaringType}.{Property.Name} value is NULL", new InvalidDataException()), - cancellationToken + await context.Stream.WriteObjectAsync( + Property.Getter!(obj) + ?? throw new SerializerException($"{Property.Property.DeclaringType}.{Property.Property.Name} value is NULL", new InvalidDataException()), + context ).DynamicContext(); } } else { - await AsyncSerializer(config, this, obj, Property.GetValue(obj), stream, cancellationToken).DynamicContext(); + await AsyncSerializer(config, this, obj, Property.Getter!(obj), context).DynamicContext(); } } @@ -116,26 +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) { - if (IsNullable) + ISerializerOptions? options = Property.GetSerializerOptions(context); + context.WithOptions(options); + try { - Property.SetValue(obj, StreamExtensions.ReadObjectNullableMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAuto(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default))); + Property.Setter!(obj, IsNullable + ? context.Stream.ReadObjectNullable(Property.Property.PropertyType, context) + : context.Stream.ReadObject(Property.Property.PropertyType, context)); } - else + finally { - Property.SetValue(obj, StreamExtensions.ReadObjectMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAuto(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default))); + context.WithoutOptions(); } } else { - Property.SetValue(obj, Deserializer(config, this, obj, stream, version)); + Property.Setter!(obj, Deserializer(config, this, obj, context)); } } @@ -145,33 +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) where T : IAutoStreamSerializer + /// Context + public async Task DeserializeAsync(IAutoStreamSerializerConfig config, T obj, IDeserializationContext context) + where T : IAutoStreamSerializer { if (AsyncDeserializer == null) { - if (IsNullable) + ISerializerOptions? options = Property.GetSerializerOptions(context); + context.WithOptions(options); + try { - Property.SetValue( - obj, - await StreamExtensions.ReadObjectNullableAsyncMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAutoAsync(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default), cancellationToken).DynamicContext() - ); + Property.Setter!(obj, IsNullable + ? await context.Stream.ReadObjectNullableAsync(Property.Property.PropertyType, context).DynamicContext() + : await context.Stream.ReadObjectAsync(Property.Property.PropertyType, context).DynamicContext()); } - else + finally { - Property.SetValue( - obj, - await StreamExtensions.ReadObjectAsyncMethod.MakeGenericMethod(Property.PropertyType) - .InvokeAutoAsync(obj: null, stream, version, Property.GetSerializerOptions(stream, version, default), cancellationToken).DynamicContext() - ); + context.WithoutOptions(); } } else { - Property.SetValue(obj, await AsyncDeserializer(config, this, obj, stream, version, cancellationToken).DynamicContext()); + Property.Setter!(obj, await AsyncDeserializer(config, this, obj, context).DynamicContext()); } } @@ -181,9 +181,15 @@ await StreamExtensions.ReadObjectAsyncMethod.MakeGenericMethod(Property.Property /// Configuration /// Info /// Object - /// Value to serialize - /// Stream - public delegate void Serializer_Delegate(IAutoStreamSerializerConfig config, AutoStreamSerializerInfo info, IAutoStreamSerializer obj, object? value, Stream stream); + /// Value + /// Context + public delegate void Serializer_Delegate( + IAutoStreamSerializerConfig config, + AutoStreamSerializerInfo info, + IAutoStreamSerializer obj, + object? value, + ISerializationContext context + ); /// /// Delegate for a serializer @@ -191,16 +197,14 @@ await StreamExtensions.ReadObjectAsyncMethod.MakeGenericMethod(Property.Property /// 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 ); /// @@ -209,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 @@ -220,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/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 new file mode 100644 index 0000000..833d031 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ContextRecursion.cs @@ -0,0 +1,32 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Context recursion + /// + public readonly record struct ContextRecursion : IDisposable + { + /// + /// Dispose action + /// + private readonly Action DisposeAction; + + /// + /// Constructor + /// + /// Context + public ContextRecursion(ISerializerContext context) + { + context.RecursionLevel++; + bool disposed = false; + DisposeAction = () => + { + if (disposed) return; + disposed = true; + 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/DefaultSerializerOptions.cs b/src/Stream-Serializer-Extensions/DefaultSerializerOptions.cs index 1409a59..05e5b21 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,8 @@ 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) { } } } + +//TODO Use EnsureCorrectType diff --git a/src/Stream-Serializer-Extensions/DeserializerContext.cs b/src/Stream-Serializer-Extensions/DeserializerContext.cs new file mode 100644 index 0000000..7868e0f --- /dev/null +++ b/src/Stream-Serializer-Extensions/DeserializerContext.cs @@ -0,0 +1,455 @@ +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Stream deserializer context + /// + 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 + /// + protected object[] _Cache; + + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Serializer version + /// Cache size + /// Cancellation token + 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 + /// + 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 (_BaseContext != null) + { + _BaseContext.CacheSize = value; + _CacheSize = _BaseContext._CacheSize; + RealCacheSize = _BaseContext.RealCacheSize; + CacheIndexSize = _BaseContext.CacheIndexSize; + _Cache = _BaseContext._Cache; + 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 tObject AddToCache(tObject obj) + { + int index = CacheOffset; + if (index >= _CacheSize) return obj; + _Cache[index] = obj!; + CacheOffset = index + 1; + return obj; + } + + /// + public bool TryReadCached(out tObject? 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(() => (tObject)_Cache[index]); + return true; + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public async Task<(bool Succeed, tObject? 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(() => (tObject)_Cache[index])); + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public bool TryReadCachedObject(out tObject? 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(() => (tObject)_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, tObject? 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()); + 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()); + } + } + + /// + public bool TryReadCachedObjectCountable(out tObject? 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(() => (tObject)_Cache[index]); + LastObjectType = obj!.GetObjectSerializerInfo().ObjectType; + return true; + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public async Task<(bool Succeed, tObject? 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(() => (tObject)_Cache[index]), 0); + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public bool TryReadCachedNumber(out tObject? obj, bool readType = false) where tObject : 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(() => (tObject)_Cache[index]); + LastNumberType = obj.GetNumberType(); + return true; + default: throw new SerializerException($"Invalid sequence type {st}", new InvalidDataException()); + } + } + + /// + public async Task<(bool Succeed, tObject? Object)> TryReadCachedNumberAsync(bool readType = false) where tObject : 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()); + 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) + { + base.Dispose(disposing); + if (_BaseContext == null && _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 47182e4..8b9ec04 100644 --- a/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs +++ b/src/Stream-Serializer-Extensions/DisposableStreamSerializerBase.cs @@ -1,12 +1,11 @@ using System.ComponentModel.DataAnnotations; -using System.Reflection; using wan24.Core; using wan24.ObjectValidation; 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 { @@ -32,138 +31,128 @@ 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 /// - /// 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; - Deserialize(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 30ce695..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); - if (type.IsAbstract) throw new ArgumentException("Non-abstract type required", nameof(tEnumerator)); - StreamAsyncEnumeratorBase enumerator = Activator.CreateInstance(type, stream, version, cancellationToken) as StreamAsyncEnumeratorBase + ArgumentValidationHelper.EnsureValidArgument(nameof(type), !type.IsAbstract, () => "Non-abstract type required"); + 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 53da62b..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); - if (type.IsAbstract) throw new ArgumentException("Non-abstract type required", nameof(tEnumerator)); - using StreamEnumeratorBase enumerator = Activator.CreateInstance(type, stream, version) as StreamEnumeratorBase + ArgumentValidationHelper.EnsureValidArgument(nameof(tEnumerator), !type.IsAbstract, () => "Non-abstract type required"); + 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..8302366 --- /dev/null +++ b/src/Stream-Serializer-Extensions/IDeserializationContext.cs @@ -0,0 +1,85 @@ +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; + /// + /// 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/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..ea03c50 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ISerializerContext.cs @@ -0,0 +1,94 @@ +using System.Buffers; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Interface for a serializer context + /// + public interface ISerializerContext : IDisposableObject + { + /// + /// Stream + /// + Stream Stream { get; } + /// + /// Stream type + /// + Type StreamType { 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/ISerializerOptions.cs b/src/Stream-Serializer-Extensions/ISerializerOptions.cs index 5c479bd..235842f 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,12 +10,28 @@ public interface ISerializerOptions /// /// Target property /// - PropertyInfo? Property { get; } + PropertyInfoExt? Property { get; } /// /// Stream serializer attribute /// 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/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..9354585 --- /dev/null +++ b/src/Stream-Serializer-Extensions/ItemSerializerContext.cs @@ -0,0 +1,164 @@ +using wan24.Core; + +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 562dfde..aa87ef1 100644 --- a/src/Stream-Serializer-Extensions/NumberTypes.cs +++ b/src/Stream-Serializer-Extensions/NumberTypes.cs @@ -39,13 +39,13 @@ 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, /// /// (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 9d00fe2..475440e 100644 --- a/src/Stream-Serializer-Extensions/ObjectTypes.cs +++ b/src/Stream-Serializer-Extensions/ObjectTypes.cs @@ -14,6 +14,12 @@ public enum ObjectTypes : byte /// Boolean /// Bool = 1, +#pragma warning disable CA1069 // Double value + /// + /// + /// + True = 1, +#pragma warning restore CA1069 // Double value /// /// Byte /// @@ -79,16 +85,68 @@ public enum ObjectTypes : byte /// Struct = 17, /// + /// String UTF-16 + /// + String16 = 18, + /// + /// String UTF-32 + /// + String32 = 19, + /// + /// + /// + ClrType = 20, + /// + /// Using the object type from the type 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 + /// + /// 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) + /// Empty (array, list, etc.) /// Empty = 128, +#pragma warning disable CA1069 // Double value + /// + /// Zero numeric value + /// + Zero = 128, + /// + /// + /// + 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 b53b42e..c85de16 100644 --- a/src/Stream-Serializer-Extensions/README.md +++ b/src/Stream-Serializer-Extensions/README.md @@ -15,38 +15,107 @@ 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 -**NOTE**: Arrays, lists and dictionaries with nullable values aren't supported. +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. -## Methods +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. + +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. -The `Write` and `WriteAsync` methods will be extended with supported types, -while serializing some types is being done with specialized methods: +**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. -| Type | Serialization method | Deserialization method | +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 | | --- | --- | --- | -| `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 @@ -54,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 | @@ -77,7 +143,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. @@ -88,10 +155,11 @@ 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`. +`StreamSerializerAttribute.StreamFactoryMethod`. Or you create a custom +`StreamSerializerAttribute` and override the `GetStream` method. ## Structure serialization @@ -118,9 +186,34 @@ 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. + +## 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 @@ -329,23 +422,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 +457,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 @@ -467,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 @@ -491,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 new file mode 100644 index 0000000..5ef6b19 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.IStreamSerializer.cs @@ -0,0 +1,329 @@ +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(ISerializationContext context) + { + 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) + { + context.Stream.Write(ToClrType().GetHashCode(), context); + return; + } + else if (Name != null) + { + context.Stream.WriteString(Name, context); + } + if (ObjectType.IsGeneric()) + { + int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Count; + 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()) + { + context.Stream.WriteSerialized(ElementType!, context); + if (!ObjectType.IsNotRanked()) context.Stream.Write((byte)(ArrayRank - 1), context); + } + } + + /// + public async Task SerializeAsync(ISerializationContext context) + { + await context.Stream.WriteAsync((byte)VERSION, context).DynamicContext(); + await context.Stream.WriteAsync( + (byte)(ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled ? ObjectType | ObjectTypes.Cached : ObjectType), + context + ) + .DynamicContext(); + if (ObjectType.ContainsAllFlags(ObjectTypes.Serializable) && StreamSerializer.TypeCacheEnabled) + { + await context.Stream.WriteAsync(ToClrType().GetHashCode(), context).DynamicContext(); + return; + } + else if (Name != null) + { + await context.Stream.WriteStringAsync(Name, context).DynamicContext(); + } + if (ObjectType.IsGeneric()) + { + int len = IsGenericTypeDefinition ? GenericParameterCount : GenericParameters.Count; + await context.Stream.WriteAsync((sbyte)(IsGenericTypeDefinition ? -len : len), context).DynamicContext(); + if (!IsGenericTypeDefinition) + for (int i = 0; i < len; i++) + await context.Stream.WriteSerializedAsync(GenericParameters[i], context).DynamicContext(); + } + else if (ObjectType.IsArray()) + { + await context.Stream.WriteSerializedAsync(ElementType!, context).DynamicContext(); + if (!ObjectType.IsNotRanked()) await context.Stream.WriteAsync((byte)(ArrayRank - 1), context).DynamicContext(); + } + } + + /// + 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 = context.Version; + if (ObjectType == ObjectTypes.Null) + { + 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)context.Stream.ReadOneByte(context); + } + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Serializable: + if (StreamSerializer.TypeCacheEnabled && ObjectType.ContainsAllFlags(ObjectTypes.Cached)) + { + 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()); + 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 = context.Stream.ReadString(context, minLen: 1, maxLen: short.MaxValue); + } + break; + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = context.Stream.ReadString(context, minLen: 1, maxLen: short.MaxValue); + break; + } + if (ObjectType.IsGeneric()) + { + 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; + if (len < 0) len = -len; + SerializerHelper.EnsureValidLength(len, 1); + if (IsGenericTypeDefinition) + { + GenericParameterCount = len; + } + else + { + using ContextRecursion cr = new(context); + List list = new(len); + SerializedTypeInfo info; + for (int i = 0; i < len; i++) + { + info = new() + { + Recursion = Recursion + 1 + }; + info.Deserialize(context); + list.Add(info); + } + GenericParameters = list.AsReadOnly(); + } + } + else if (ObjectType.IsArray()) + { + 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 + }; + ElementType.Deserialize(context); + if (!ObjectType.IsNotRanked()) + { + ArrayRank = context.Stream.ReadOneByte(context) + 1; + if (ArrayRank == 0) throw new SerializerException("No array rank", new InvalidDataException()); + } + else + { + ArrayRank = 1; + } + } + } + + /// + 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 = context.Version; + if (ObjectType == ObjectTypes.Null) + { + 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 context.Stream.ReadOneByteAsync(context).DynamicContext(); + } + switch (ObjectType.RemoveFlags()) + { + case ObjectTypes.Serializable: + if (StreamSerializer.TypeCacheEnabled && ObjectType.ContainsAllFlags(ObjectTypes.Cached)) + { + 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()); + 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 context.Stream.ReadStringAsync(context, minLen: 1, maxLen: short.MaxValue).DynamicContext(); + } + break; + case ObjectTypes.Stream: + case ObjectTypes.Struct: + case ObjectTypes.Object: + Name = await context.Stream.ReadStringAsync(context, minLen: 1, maxLen: short.MaxValue).DynamicContext(); + break; + } + if (ObjectType.IsGeneric()) + { + 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; + if (len < 0) len = -len; + SerializerHelper.EnsureValidLength(len, 1); + if (IsGenericTypeDefinition) + { + GenericParameterCount = len; + } + else + { + using ContextRecursion cr = new(context); + List list = new(len); + SerializedTypeInfo info; + for (int i = 0; i < len; i++) + { + info = new() + { + Recursion = Recursion + 1 + }; + await info.DeserializeAsync(context).DynamicContext(); + list.Add(info); + } + GenericParameters = list.AsReadOnly(); + } + } + else if (ObjectType.IsArray()) + { + 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 + }; + await ElementType.DeserializeAsync(context).DynamicContext(); + if (!ObjectType.IsNotRanked()) + { + ArrayRank = await context.Stream.ReadOneByteAsync(context).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) + /// + /// Context + /// Object version + /// Object type + /// Instance + public static SerializedTypeInfo From(IDeserializationContext context, int objVersion, ObjectTypes objType = ObjectTypes.Null) + { + SerializedTypeInfo res = new() + { + SerializedObjectVersion = objVersion, + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)context.Stream.ReadOneByte(context) : objType + }; + res.Deserialize(context); + return res; + } + + /// + /// Deserialize with a pre-red object version (and type) + /// + /// Context + /// Object version + /// Object type + /// Instance + public static async Task FromAsync(IDeserializationContext context, int objVersion, ObjectTypes objType = ObjectTypes.Null) + { + SerializedTypeInfo res = new() + { + SerializedObjectVersion = objVersion, + ObjectType = objType == ObjectTypes.Null ? (ObjectTypes)await context.Stream.ReadOneByteAsync(context).DynamicContext() : objType + }; + await res.DeserializeAsync(context).DynamicContext(); + return res; + } + } +} diff --git a/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs new file mode 100644 index 0000000..dcf8084 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializedTypeInfo.cs @@ -0,0 +1,313 @@ +using System.Collections.Concurrent; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Text; +using wan24.Core; +using wan24.ObjectValidation; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Serialized type informations + /// + public sealed partial class SerializedTypeInfo : ValidatableObjectBase + { + /// + /// Cache + /// + private static readonly ConcurrentDictionary Cache = new(); + + /// + /// CLR type + /// + private Type? ClrType = null; + /// + /// As string + /// + private string? AsString = null; + + /// + /// Constructor + /// + public SerializedTypeInfo() : base() { } + + /// + /// Constructor + /// + /// Type + public SerializedTypeInfo(Type type) : base() => SetTypeInfo(type); + + /// + /// Constructor + /// + /// Object type + 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; } + + /// + /// Is a generic type definition? + /// + public bool IsGenericTypeDefinition { get; private set; } + + /// + /// Generic parameters + /// + [CountLimit(sbyte.MaxValue)] + [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 CLR type is known + /// + [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; + } + } + } + + /// + /// Determine if the type is serializable + /// + [NoValidation] + 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 && !IsGenericTypeDefinition && GenericParameters.Count == 0; + + /// + /// Get as CLR type + /// + /// CLR type + public Type ToClrType() + { + ClrType ??= TypeHelper.Instance.GetType(ToString()) ?? throw new TypeLoadException($"{AsString} 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() + { + Type res = ClrType == null + ? ClrType = StreamSerializer.LoadType(ToString()) + : StreamSerializer.IsTypeAllowed(ClrType) + ? ClrType + : throw new InvalidOperationException( + $"\"{ToString()}\" is not an allowed deserializable type (see {nameof(StreamSerializer)}.{nameof(StreamSerializer.AllowedTypes)})" + ); + Cache.TryAdd(res.GetHashCode(), this); + return res; + } + + /// + 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: + 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}" + : 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(); + 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.Count}"; + StringBuilder sb = new($"{Name}`{GenericParameters.Count}["); + 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(); + } + + /// + /// 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 >= SerializerContext.MaxRecursion) 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 >= 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); + } + + /// + /// Cast as + /// + /// + public static implicit operator Type(SerializedTypeInfo info) => info.ToClrType(); + + /// + /// Cast as serializable flag + /// + /// + public static implicit operator bool(SerializedTypeInfo info) => info.IsSerializable; + + /// + /// Cast from + /// + /// + public static implicit operator SerializedTypeInfo(Type type) => From(type); + + /// + /// Get an instance + /// + /// + /// Instance + public static SerializedTypeInfo From(Type type) => Cache.TryGetValue(type.GetHashCode(), out SerializedTypeInfo? res) ? res : new(type); + } +} diff --git a/src/Stream-Serializer-Extensions/SerializerContext.cs b/src/Stream-Serializer-Extensions/SerializerContext.cs new file mode 100644 index 0000000..fd847de --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerContext.cs @@ -0,0 +1,676 @@ +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Stream serializer writing context + /// + 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 + /// + protected int[] _Cache; + + /// + /// Constructor + /// + /// Stream (won't be disposed) + /// Cache size + /// Cancellation token + 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(); + 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(tObject? 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(tObject? 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(tObject? 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(tObject? 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(tObject? 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(tObject? 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(tObject? num, NumberTypes? numberType, bool writeType = false) where tObject : 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(tObject? num, NumberTypes? numberType, bool writeType = false) where tObject : 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) + { + 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 new file mode 100644 index 0000000..6f40271 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerContextBase.cs @@ -0,0 +1,233 @@ +using System.Buffers; +using System.Collections.Concurrent; +using System.Collections.Generic; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + /// + /// Base class for a stream serializer context + /// + 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 + /// + protected int _CacheSize = DefaultCacheSize; + /// + /// Current recursion level + /// + protected int _RecursionLevel = 0; + + /// + /// Constructor + /// + /// Stream + /// Serializer version + /// 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); + _CacheSize = cacheSize.Value; + } + 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; + } + + /// + /// 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 SerializerContextBase? BaseContext { get; } + + /// + public Stream Stream { get; } + + /// + public abstract Type StreamType { 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(); + } + + /// + 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/SerializerException.cs b/src/Stream-Serializer-Extensions/SerializerException.cs index 2901f96..428e552 100644 --- a/src/Stream-Serializer-Extensions/SerializerException.cs +++ b/src/Stream-Serializer-Extensions/SerializerException.cs @@ -1,4 +1,8 @@ -namespace wan24.StreamSerializerExtensions +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions { /// /// Thrown on serialization errors @@ -22,5 +26,117 @@ 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")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static void Wrap(Action action, string? message = null) + { + try + { + action(); + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw From(ex, message); + } + } + + /// + /// Wrap an exception in a serializer exception + /// + /// Return type + /// Function + /// Message + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static T Wrap(Func func, string? message = null) + { + try + { + return func(); + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw From(ex, message); + } + } + + /// + /// Wrap an exception in a serializer exception + /// + /// Action + /// Message + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WrapAsync(Func action, string? message = null) + { + try + { + await action().DynamicContext(); + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw From(ex, message); + } + } + + /// + /// Wrap an exception in a serializer exception + /// + /// Return type + /// Function + /// Message + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WrapAsync(Func> func, string? message = null) + { + try + { + return await func().DynamicContext(); + } + catch (SerializerException) + { + throw; + } + catch (Exception 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.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 f039236..8fbb628 100644 --- a/src/Stream-Serializer-Extensions/SerializerHelper.cs +++ b/src/Stream-Serializer-Extensions/SerializerHelper.cs @@ -1,518 +1,28 @@ -using System.Collections; -using System.ComponentModel.DataAnnotations; -using System.Reflection; +using System.ComponentModel.DataAnnotations; using System.Runtime; -using wan24.Core; +using System.Runtime.CompilerServices; +using wan24.ObjectValidation; + +//TODO Write/read enumerables namespace wan24.StreamSerializerExtensions { /// /// Helper /// - public static class SerializerHelper + public static partial class SerializerHelper { - /// - /// Remove flags - /// - /// Type - /// Type without flags - [TargetedPatchingOptOut("Tiny method")] - public static NumberTypes RemoveFlags(this NumberTypes type) => type & ~NumberTypes.FLAGS; - - /// - /// Remove value flags - /// - /// Type - /// Type without value flags - [TargetedPatchingOptOut("Tiny method")] - public static NumberTypes RemoveValueFlags(this NumberTypes type) => type & ~NumberTypes.VALUE_FLAGS; - - /// - /// Is unsigned? - /// - /// Type - /// Unsigned? - [TargetedPatchingOptOut("Tiny method")] - public static bool IsUnsigned(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.Unsigned); - - /// - /// Is min. value? - /// - /// Type - /// Min.value? - [TargetedPatchingOptOut("Tiny method")] - public static bool IsMinValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MinValue); - - /// - /// Is max. value? - /// - /// Type - /// Max. value? - [TargetedPatchingOptOut("Tiny method")] - public static bool IsMaxValue(this NumberTypes type) => type.ContainsAllFlags(NumberTypes.MaxValue); - - /// - /// Is zero? - /// - /// Type - /// Zero? - [TargetedPatchingOptOut("Tiny method")] - 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")] - public static bool HasValueFlags(this NumberTypes type) => (type & NumberTypes.VALUE_FLAGS) != 0; - - /// - /// Remove flags - /// - /// Type - /// Type without flags - [TargetedPatchingOptOut("Tiny method")] - public static ObjectTypes RemoveFlags(this ObjectTypes type) => type & ~ObjectTypes.FLAGS; - - /// - /// Is empty? - /// - /// Type - /// Empty? - [TargetedPatchingOptOut("Tiny method")] - public static bool IsEmpty(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Empty); - - /// - /// Is unsigned? - /// - /// Type - /// Unsigned? - [TargetedPatchingOptOut("Tiny method")] - public static bool IsUnsigned(this ObjectTypes type) => type.ContainsAllFlags(ObjectTypes.Unsigned); - - /// - /// Is a number? - /// - /// Type - /// A number? - public static bool IsNumber(this ObjectTypes type) => type.RemoveFlags() switch - { - ObjectTypes.Short => true, - ObjectTypes.Int => true, - ObjectTypes.Long => true, - ObjectTypes.Float => true, - ObjectTypes.Double => true, - ObjectTypes.Decimal => true, - _ => false - }; - - /// - /// Get the type of a number - /// - /// Number - /// Use the flags? - /// Number type - public static NumberTypes GetNumberType(this object number, bool useFlags = true) - => number switch - { - sbyte => useFlags - ? (sbyte)number switch - { - 0 => NumberTypes.Zero, - sbyte.MinValue => NumberTypes.Byte | NumberTypes.MinValue, - sbyte.MaxValue => NumberTypes.Byte | NumberTypes.MaxValue, - _ => NumberTypes.Byte - } - : NumberTypes.Byte, - byte => useFlags - ? (byte)number 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 - { - 0 => NumberTypes.Zero, - short.MinValue => NumberTypes.Short | NumberTypes.MinValue, - short.MaxValue => NumberTypes.Short | NumberTypes.MaxValue, - _ => NumberTypes.Short - } - : NumberTypes.Short, - ushort => useFlags - ? (ushort)number 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 - { - 0 => NumberTypes.Zero, - int.MinValue => NumberTypes.Int | NumberTypes.MinValue, - int.MaxValue => NumberTypes.Int | NumberTypes.MaxValue, - _ => NumberTypes.Int - } - : NumberTypes.Int, - uint => useFlags - ? (uint)number 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 - { - 0 => NumberTypes.Zero, - long.MinValue => NumberTypes.Long | NumberTypes.MinValue, - long.MaxValue => NumberTypes.Long | NumberTypes.MaxValue, - _ => NumberTypes.Long - } - : NumberTypes.Long, - ulong => useFlags - ? (ulong)number 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 - { - 0 => NumberTypes.Zero, - float.MinValue => NumberTypes.Float | NumberTypes.MinValue, - float.MaxValue => NumberTypes.Float | NumberTypes.MaxValue, - _ => NumberTypes.Float - } - : NumberTypes.Float, - double => useFlags - ? (double)number switch - { - 0 => NumberTypes.Zero, - double.MinValue => NumberTypes.Double | NumberTypes.MinValue, - double.MaxValue => NumberTypes.Double | NumberTypes.MaxValue, - _ => NumberTypes.Double - } - : NumberTypes.Double, - decimal => useFlags - ? (decimal)number 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 - /// Number and type - public static (object Number, NumberTypes Type) GetNumberAndType(this object number) - { - NumberTypes origin = GetNumberType(number), - type; - if (origin == NumberTypes.None) throw new ArgumentException("Not a supported numeric type", nameof(number)); - 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.Int | 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; - } - else - { - num = (sbyte)value; - type = NumberTypes.Int; - } - } - 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.Int | 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; - } - else - { - num = (sbyte)value; - type = NumberTypes.Int; - } - } - } - break; - } - return (num, type); - } - - /// - /// Get object serializer informations - /// - /// Object - /// Informations - public static (Type Type, ObjectTypes ObjectType, bool WriteType, bool WriteObject) GetObjectSerializerInfo(this object obj) - { - 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, - IStreamSerializer => ObjectTypes.Serializable, - _ => ObjectTypes.Null - }; - if (objType == ObjectTypes.Null) - if (type.IsArray) - { - objType = ObjectTypes.Array; - } - else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) - { - objType = ObjectTypes.List; - } - else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<,>)) - { - 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; - } - else - { - writeType = true; - } - break; - case ObjectTypes.List: - if (((IList)obj).Count == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - else - { - writeType = true; - } - break; - case ObjectTypes.Dict: - if (((IDictionary)obj).Count == 0) - { - objType |= ObjectTypes.Empty; - writeObject = false; - } - else - { - writeType = true; - } - break; - case ObjectTypes.Object: - case ObjectTypes.Struct: - case ObjectTypes.Serializable: - writeType = true; - 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 /// + /// Value type /// Value + /// Argument value /// Non-null value [TargetedPatchingOptOut("Tiny method")] - public static object EnsureNotNull(object? value) - { - if (value == null) throw new ArgumentNullException(nameof(value)); - return value; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 @@ -522,9 +32,10 @@ public static object EnsureNotNull(object? value) /// 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; } @@ -536,9 +47,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,12 +60,18 @@ 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")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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,11 +81,16 @@ public static T ValidateObject(this T value) where T : notnull /// Object /// 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(); - if (includeSerializerVersion) ms.WriteSerializerVersion(); - ms.WriteSerialized(obj); + using SerializerContext context = new(ms); + if (includeSerializerVersion) ms.WriteSerializerVersion(context); + ms.WriteSerialized(obj, context); return ms.ToArray(); } @@ -578,48 +101,19 @@ public static byte[] ToBytes(this IStreamSerializer obj, bool includeSerializerV /// Bytes /// 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); - int serializerVersion = StreamSerializer.VERSION; - if (includesSerializerVersion) serializerVersion = ms.ReadSerializerVersion(); - return ms.ReadSerialized(serializerVersion); + using DeserializerContext context = new(ms); + int version = includesSerializerVersion ? ms.ReadSerializerVersion(context) : StreamSerializer.Version; + using DeserializerContext objContext = includesSerializerVersion && version != StreamSerializer.Version + ? context.WithSerializerVersion(version) + : context; + return ms.ReadSerialized(context); } - - /// - /// Get the serializer options - /// - /// Property - /// Stream - /// Serializer version - /// 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); - - /// - /// Get the key serializer options - /// - /// Property - /// Stream - /// Serializer version - /// 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); - - /// - /// Get the value serializer options - /// - /// Property - /// Stream - /// Serializer version - /// 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); } } diff --git a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs index 057f6cc..28c0ca3 100644 --- a/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs +++ b/src/Stream-Serializer-Extensions/SerializerOptionsBase.cs @@ -1,5 +1,5 @@ using System.ComponentModel.DataAnnotations; -using System.Reflection; +using wan24.Core; using wan24.ObjectValidation; namespace wan24.StreamSerializerExtensions @@ -14,48 +14,62 @@ 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?.GetCustomAttribute() ?? - throw (property == null ? new ArgumentNullException(nameof(attr)) : new ArgumentException($"{typeof(StreamSerializerAttribute)} attribute required", nameof(property))); + 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; } + /// + 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) { 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 +82,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 +106,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 +141,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/SerializerOptionsFluentExtensions.cs b/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs new file mode 100644 index 0000000..e531521 --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerOptionsFluentExtensions.cs @@ -0,0 +1,58 @@ +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; + } + + /// + /// 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 + /// + /// Options type + /// Options + /// value options + /// Options + public static T WithValueOptions(this T options, ISerializerOptions? valueOptions) where T : ISerializerOptions + { + 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 new file mode 100644 index 0000000..f6aeddc --- /dev/null +++ b/src/Stream-Serializer-Extensions/SerializerTypes.cs @@ -0,0 +1,77 @@ +namespace wan24.StreamSerializerExtensions +{ + /// + /// Serializer types enumeration + /// + public enum SerializerTypes + { + /// + /// Any type serializer (uses ) + /// + Any, + /// + /// Any object (uses ) + /// + AnyObject, + /// + /// Registered serializer ( f.e.) + /// + 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, + /// + /// CLR type (using ) + /// + Type + } +} diff --git a/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj b/src/Stream-Serializer-Extensions/Stream-Serializer-Extensions.csproj index ff610d0..58f000e 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,20 @@ README.md embedded true + Debug;Release;Trunk + True + + + + False + $(DefineConstants);DEBUG - - + + + + diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Enumerate.cs index ee12d56..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,12 +14,16 @@ public static partial class StreamExtensions /// Object type /// Enumeratortype /// Stream - /// Serializer version + /// Context /// Enumerable [TargetedPatchingOptOut("Just a method adapter")] - public static IEnumerable Enumerate(this Stream stream, int? version = null) + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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 @@ -28,18 +31,18 @@ public static IEnumerable Enumerate(this Stream s /// Object type /// Enumeratortype /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Enumerable - public static async IAsyncEnumerable EnumerateAsync( - this Stream stream, - int? version = null, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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; @@ -50,26 +53,33 @@ public static async IAsyncEnumerable EnumerateAsync /// Object type /// Stream - /// Version + /// Context /// Enumerable [TargetedPatchingOptOut("Just a method adapter")] - public static IEnumerable EnumerateSerialized(this Stream stream, int? version = null) + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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 - public static async IAsyncEnumerable EnumerateSerializedAsync(this Stream stream, int? version = null, [EnumeratorCancellation] CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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; @@ -80,13 +90,17 @@ public static async IAsyncEnumerable EnumerateSerializedAsync(this Stream /// /// Object type /// Stream - /// Version - /// Array pool + /// Context /// Enumerable - public static IEnumerable EnumerateNumber(this Stream stream, int? version = null, ArrayPool? pool = null) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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; } @@ -95,21 +109,19 @@ public static IEnumerable EnumerateNumber(this Stream stream, int? version /// /// Object type /// Stream - /// Version - /// Array pool - /// Cancellation token + /// Context /// Enumerable - public static async IAsyncEnumerable EnumerateNumberAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - [EnumeratorCancellation] CancellationToken cancellationToken = default - ) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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; } @@ -117,14 +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 - public static IEnumerable EnumerateString(this Stream stream, int? version = null, ArrayPool? pool = null, int minLen = 0, int maxLen = int.MaxValue) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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; } @@ -132,24 +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 - 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 - ) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 2cffc47..9810147 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 { @@ -9,434 +11,453 @@ public static partial class StreamExtensions /// Read any object /// /// Stream - /// Serializer version - /// Options + /// Context /// Object - public static object ReadAny(this Stream stream, int? version = null, ISerializerOptions? options = null) - { - try - { - ObjectTypes objType; - byte[] data = ReadSerializedData(stream, len: 1); - try - { - objType = (ObjectTypes)data[0]; - } - finally - { - StreamSerializer.BufferPool.Return(data); - } - return ReadAnyInt(stream, version, objType, options); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 - /// Options + /// CLR type /// 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()) - { - 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()) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static object ReadAnyInt(IDeserializationContext context, ObjectTypes objType, Type? type) + => SerializerException.Wrap(() => { - 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, - stream, - version, - 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, - stream, - version, - 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, - stream, - version, - 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 + 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(), + readType = objType.RequiresType(); + switch (objType.RemoveFlags()) + { + case ObjectTypes.Bool: + return !isEmpty; + case ObjectTypes.Byte: + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(byte) : typeof(sbyte); + break; + default: + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(byte) : typeof(sbyte)) + : isUnsigned + ? ReadOneByte(context.Stream, context) + : ReadOneSByte(context.Stream, context); + } + break; + case ObjectTypes.Short: + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(ushort) : typeof(short); + break; + default: + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(ushort) : typeof(short)) + : isUnsigned + ? ReadUShort(context.Stream, context) + : ReadShort(context.Stream, context); + } + break; + case ObjectTypes.Int: + case ObjectTypes.Long: + case ObjectTypes.Float: + case ObjectTypes.Double: + case ObjectTypes.Decimal: + type = objType.RemoveFlags() switch + { + 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( + 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( + 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( + 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( + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ).Value; + case ObjectTypes.Stream: + readType = false; + break; + 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 = 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(context.Stream, context); + } + if (readType && type == null) +#pragma warning disable IDE0066 // Use switch expression + switch (context.SerializerVersion)// Serializer version switch { - res.Dispose(); - throw; + case 1: + case 2: + type = StreamSerializer.LoadType(ReadString(context.Stream, context, minLen: 1, maxLen: short.MaxValue)); + break; + default: + type = ReadType(context.Stream, context); + break; } - default: - throw new InvalidProgramException(); - } - } +#pragma warning restore IDE0066 // Use switch expression + switch (objType.RemoveFlags()) + { + 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(context.Stream, type!, context)!; + case ObjectTypes.Array: + return isEmpty ? ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)! : ReadArray( + context.Stream, + type!, + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ); + case ObjectTypes.List: + return isEmpty ? Activator.CreateInstance(type!)! : ReadList( + context.Stream, + type!, + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ); + case ObjectTypes.Dict: + return isEmpty ? Activator.CreateInstance(type!)! : ReadDict( + context.Stream, + type!, + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ); + case ObjectTypes.Object: + return ReadObject(context.Stream, type!, context); + case ObjectTypes.Struct: + return ReadStructMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, context.Stream, context)!; + case ObjectTypes.Serializable: + return ReadSerializedObject(context.Stream, type!, context); + case ObjectTypes.Stream: + Stream res = context.Options?.Attribute.GetStream(obj: null, property: null, context) ?? new PooledTempStream(); + if (objType.IsEmpty()) return res; + try + { + return ReadStream(context.Stream, res, context, minLen: context.Options?.GetMinLen(0L) ?? 0, maxLen: context.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue); + } + catch + { + res.Dispose(); + throw; + } + default: + throw new InvalidProgramException(); + } + }); /// /// Read any object /// /// Stream - /// Serializer version - /// Options - /// Cancellation token + /// Context /// Object - public static async Task ReadAnyAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) - { - try - { - 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(); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 - /// Options - /// Cancellation token + /// CLR type /// 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()) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static Task ReadAnyIntAsync(IDeserializationContext context, ObjectTypes objType, Type? type) + => 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 + 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(), + readType = true; + Task task; + switch (objType.RemoveFlags()) + { + case ObjectTypes.Bool: + return !isEmpty; + case ObjectTypes.Byte: + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(byte) : typeof(sbyte); + break; + default: + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(byte) : typeof(sbyte)) + : isUnsigned + ? await ReadOneByteAsync(context.Stream, context).DynamicContext() + : await ReadOneSByteAsync(context.Stream, context).DynamicContext(); + } + break; + case ObjectTypes.Short: + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + type = isUnsigned ? typeof(ushort) : typeof(short); + break; + default: + return isEmpty + ? Convert.ChangeType(0, isUnsigned ? typeof(ushort) : typeof(short)) + : isUnsigned + ? await ReadUShortAsync(context.Stream, context).DynamicContext() + : await ReadShortAsync(context.Stream, context).DynamicContext(); + } + break; + case ObjectTypes.Int: + case ObjectTypes.Long: + case ObjectTypes.Float: + case ObjectTypes.Double: + case ObjectTypes.Decimal: + type = objType.RemoveFlags() switch + { + 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( + 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( + 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( + 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( + context.Stream, + context, + minLen: context.Options?.GetMinLen(0) ?? 0, + maxLen: context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ).DynamicContext()).Value; + case ObjectTypes.Stream: + readType = false; + break; + 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 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(context.Stream, context).DynamicContext(); + } + if (readType && type == null) +#pragma warning disable IDE0066 // Use switch expression + switch (context.SerializerVersion)// Serializer version 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 + 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:// 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(context.Stream, type!, context).DynamicContext(); + case ObjectTypes.Array: + return isEmpty ? ArrayEmptyMethod.MakeGenericMethod(type!.GetElementType()!).InvokeAuto(obj: null)! : await ReadArrayAsync( + context.Stream, + type!, + context, + context.Options?.GetMinLen(0) ?? 0, + 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 - ).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, - stream, - version, - null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), - cancellationToken - )!; - break; - case ObjectTypes.List: - if (isEmpty) return Activator.CreateInstance(type!)!; - task = (Task)ReadListAsyncMethod.MakeGenericMethod(type!.GetGenericArguments()[0]) - .InvokeAuto( - obj: null, - stream, - version, - null, - options?.GetMinLen(0) ?? 0, - options?.GetMaxLen(int.MaxValue) ?? int.MaxValue, - options?.Attribute.GetValueSerializerOptions(property: null, stream, version ?? StreamSerializer.VERSION, cancellationToken), - 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, - stream, - version, - 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 + case ObjectTypes.List: + return isEmpty ? Activator.CreateInstance(type!)! : await ReadListAsync( + context.Stream, + type!, + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue ).DynamicContext(); - } - catch - { - res.Dispose(); - throw; - } - default: - throw new InvalidProgramException(); - } - await task.DynamicContext(); - return task.GetResult(type!); - } + case ObjectTypes.Dict: + return isEmpty ? Activator.CreateInstance(type!)! : await ReadDictAsync( + context.Stream, + type!, + context, + context.Options?.GetMinLen(0) ?? 0, + context.Options?.GetMaxLen(int.MaxValue) ?? int.MaxValue + ).DynamicContext(); + case ObjectTypes.Object: + return await ReadObjectAsync(context.Stream, type!, context).DynamicContext(); + case ObjectTypes.Struct: + task = (Task)ReadStructAsyncMethod.MakeGenericMethod(type!).InvokeAuto(obj: null, context.Stream, context)!; + break; + case ObjectTypes.Serializable: + return await ReadSerializedObjectAsync(context.Stream, type!, context)!.DynamicContext(); + case ObjectTypes.Stream: + Stream res = context.Options?.Attribute.GetStream(obj: null, property: null, context) ?? new PooledTempStream(); + if (objType.IsEmpty()) return res; + try + { + return await ReadStreamAsync( + context.Stream, + res, + context, + minLen: context.Options?.GetMinLen(0L) ?? 0, + maxLen: context.Options?.GetMaxLen(long.MaxValue) ?? long.MaxValue + ).DynamicContext(); + } + catch + { + res.Dispose(); + throw; + } + default: + throw new InvalidProgramException(); + } + await task.DynamicContext(); + return task.GetResult(type!); + }); /// /// Read any object /// /// Stream - /// Serializer version - /// Options + /// Context /// Object - public static object? ReadAnyNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static object? ReadAnyNullable(this Stream stream, IDeserializationContext context) { - try - { - 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); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } + 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 - public static async Task ReadAnyNullableAsync(this Stream stream, int? version = null, ISerializerOptions? options = null, CancellationToken cancellationToken = default) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadAnyNullableAsync(this Stream stream, IDeserializationContext context) { - try - { - 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(); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } + 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 b754ffe..6436926 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Array.cs @@ -1,5 +1,5 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -12,73 +12,44 @@ public static partial class StreamExtensions /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// 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) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static T[] ReadArray(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - if (typeof(T) == typeof(byte)) return (ReadBytes(stream, version, buffer: null, pool, minLen, maxLen) as T[])!; - try - { - 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) - { - throw new SerializerException(message: null, ex); - } + 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, context); } /// /// Read /// - /// Element type /// Stream - /// Serializer version - /// Array pool + /// Array type + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Cancellation token /// Value - public static async Task ReadArrayAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - CancellationToken cancellationToken = default - ) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Array ReadArray(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - if (typeof(T) == typeof(byte)) - return (await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!; - try - { - 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) - { - throw new SerializerException(message: null, ex); - } + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(type), type.IsArray, () => "Not an array type")); + int len = ReadNumber(stream, context); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type elementType = type.GetElementType()!; + Array res = Array.CreateInstance(elementType, len); + return ReadFixedArray(stream, res, context); } /// @@ -86,74 +57,113 @@ public static async Task ReadArrayAsync( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options /// Value [TargetedPatchingOptOut("Tiny method")] - public static T[]? ReadArrayNullable( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - 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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadArrayAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + { + 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, context).DynamicContext(); + } /// /// Read /// - /// Element type /// Stream - /// Serializer version - /// Array pool + /// Array type + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadArrayNullableAsync( - this Stream stream, - 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, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : default(T[]?); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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, context).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Type elementType = type.GetElementType()!; + Array res = Array.CreateInstance(elementType, len); + return await ReadFixedArrayAsync(stream, res, context).DynamicContext(); + } /// /// Read /// /// Element type /// Stream - /// Array - /// Serializer version - /// Value serializer options + /// Context + /// Minimum length + /// Maximum length /// Value - public static T[] ReadFixedArray(this Stream stream, T[] arr, int? version = null, ISerializerOptions? valueOptions = null) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static T[]? ReadArrayNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - try + switch (context.SerializerVersion)// Serializer version switch { - for (int i = 0; i < arr.Length; arr[i] = ReadObject(stream, version, valueOptions), i++) ; - return arr; + case 1: + case 2: + { + return ReadBool(stream, context) ? ReadArray(stream, context, minLen, maxLen) : null; + } + default: + { + 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(), context); + return res; + } } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + } + + /// + /// Read + /// + /// Stream + /// Array type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Array? ReadArrayNullable(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + { + switch (context.SerializerVersion)// Serializer version switch { - throw new SerializerException(message: null, ex); + case 1: + case 2: + { + return ReadBool(stream, context) ? ReadArray(stream, type, context, minLen, maxLen) : null; + } + default: + { + 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)), + context + ); + } } } @@ -162,31 +172,72 @@ public static T[] ReadFixedArray(this Stream stream, T[] arr, int? version = /// /// Element type /// Stream - /// Array - /// Serializer version - /// Value serializer options - /// Cancellation token + /// Context + /// Minimum length + /// Maximum length /// Value - public static async Task ReadFixedArrayAsync( - this Stream stream, - T[] arr, - int? version = null, - ISerializerOptions? valueOptions = null, - CancellationToken cancellationToken = default - ) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadArrayNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - try + switch (context.SerializerVersion)// Serializer version switch { - for (int i = 0; i < arr.Length; arr[i] = await ReadObjectAsync(stream, version, valueOptions, cancellationToken).DynamicContext(), i++) ; - return arr; + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadArrayAsync(stream, context, minLen, maxLen).DynamicContext() + : null; + } + default: + { + 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(), context).DynamicContext(); + return res; + } } - catch (SerializerException) - { - throw; - } - catch (Exception ex) + } + + /// + /// Read + /// + /// Stream + /// Array type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadArrayNullableAsync(this Stream stream, Type type, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + { + switch (context.SerializerVersion)// Serializer version switch { - throw new SerializerException(message: null, ex); + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadArrayAsync(stream, type, context, minLen, maxLen).DynamicContext() + : null; + } + default: + { + 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)), + context + ).DynamicContext(); + } } } } diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs index c89e18d..8da22bf 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Basic.cs @@ -1,5 +1,5 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -11,98 +11,89 @@ public static partial class StreamExtensions /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// 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); - } - } +#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 -#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); - } - } +#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")] - public static bool? ReadBoolNullable(this Stream stream, int? version = null, ArrayPool? pool = null) - => ReadBool(stream, version, pool) ? ReadBool(stream, version, pool) : default(bool?); - - /// - /// Read - /// - /// Stream - /// Serializer version - /// Array pool - /// Cancellation token - /// 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?); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool? ReadBoolNullable(this Stream stream, IDeserializationContext context) + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, context) ? ReadBool(stream, context) : null; + } + default: + { + ObjectTypes type = (ObjectTypes)ReadOneByte(stream, context); + return type switch + { + ObjectTypes.Null => null, + ObjectTypes.True => true, + ObjectTypes.False => false, + _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) + }; + } + } + } /// /// Read /// /// Stream - /// Serializer version + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] - public static sbyte ReadOneSByte(this Stream stream, int? version = null) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadBoolNullableAsync(this Stream stream, IDeserializationContext context) { - try - { - return (sbyte)ReadOneByte(stream, version); - } - catch (Exception ex) + switch (context.SerializerVersion)// Serializer version switch { - throw new SerializerException(message: null, ex); + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadBoolAsync(stream, context).DynamicContext() + : null; + } + default: + { + ObjectTypes type = (ObjectTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return type switch + { + ObjectTypes.Null => null, + ObjectTypes.True => true, + ObjectTypes.False => false, + _ => throw new SerializerException($"Invalid boolean {type}", new InvalidDataException()) + }; + } } } @@ -110,1117 +101,639 @@ public static sbyte ReadOneSByte(this Stream stream, int? version = null) /// Read /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// 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) -#pragma warning restore IDE0060 // Remove unused parameter - { - await Task.Yield(); - return ReadOneSByte(stream, version); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static sbyte ReadOneSByte(this Stream stream, IDeserializationContext context) => (sbyte)ReadOneByte(stream, context); /// /// Read /// /// Stream - /// Serializer version + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] - public static sbyte? ReadOneSByteNullable(this Stream stream, int? version = null) - => ReadBool(stream, version) ? ReadOneSByte(stream, version) : default(sbyte?); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task ReadOneSByteAsync(this Stream stream, IDeserializationContext context) => Task.FromResult(ReadOneSByte(stream, context)); /// /// Read /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// Value -#pragma warning disable IDE0060 // Remove unused parameter - [TargetedPatchingOptOut("Tiny method")] - public static byte ReadOneByte(this Stream stream, int? version = null) -#pragma warning restore IDE0060 // Remove unused parameter - { - try - { - 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); - } - } +#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 - /// Cancellation token + /// Context /// 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) -#pragma warning restore IDE0060 // Remove unused parameter - { - await Task.Yield(); - return ReadOneByte(stream, version); - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static byte ReadOneByte(this Stream stream, IDeserializationContext context) + => SerializerException.Wrap(() => + { + int res = stream.ReadByte(); + if (res < 0) throw new IOException("Failed to read one byte from stream"); + return (byte)res; + }); /// /// Read /// /// Stream - /// Serializer version + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] - public static ushort? ReadOneByteNullable(this Stream stream, int? version = null) - => ReadBool(stream, version) ? ReadOneByte(stream, version) : default(ushort?); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task ReadOneByteAsync(this Stream stream, IDeserializationContext context) => Task.FromResult(ReadOneByte(stream, context)); /// /// Read /// /// Stream - /// Serializer version - /// Cancellation token + /// Context /// 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?); +#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 - /// Array pool + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// 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); - } - } +#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 - /// Cancellation token + /// Context /// 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); - } - } +#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 + /// Context /// 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?); +#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 - /// Cancellation token + /// Context /// 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?); +#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 + /// Context /// Value - public static T ReadNumber(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, IConvertible - => ReadNumberInt(stream, version, numberType: null, pool); +#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 + /// Read a numeric value /// - /// Stream - /// Serializer version - /// Number type - /// Array pool + /// Numeric type + /// Context + /// Serialized data size in bytes + /// Deserializer action /// Value - private static T ReadNumberInt(Stream stream, int? version, NumberTypes? numberType, ArrayPool? pool) where T : struct, IConvertible +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [SkipLocalsInit] + private static T ReadNumeric(IDeserializationContext context, int size, NumericReader_Delegate deserializer) { - 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 (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); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } + 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 - /// - /// 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 /// - /// Stream - /// Serializer version - /// Number type - /// Array pool - /// Cancellation token + /// Numeric type + /// Context + /// Serialized data size in bytes + /// Deserializer action /// Value - private static async Task ReadNumberIntAsync(Stream stream, int? version, NumberTypes? numberType, ArrayPool? pool, CancellationToken cancellationToken) - where T : struct, IConvertible +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task ReadNumericAsync(IDeserializationContext context, int size, NumericReader_Delegate deserializer) { - byte[] data = numberType == null - ? await ReadSerializedDataAsync(stream, len: 1, pool, cancellationToken).DynamicContext() - : (pool ?? StreamSerializer.BufferPool).Rent(minimumLength: 1); + byte[] data = await ReadSerializedDataAsync(context.Stream, size, context).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 deserializer(data.AsSpan(0, size)); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data); + context.BufferPool.Return(data, clearArray: false); } } /// - /// Read + /// Read a nullable numeric /// - /// Stream - /// Serializer version - /// Array pool + /// Numeric type + /// Context + /// Serialized data size in bytes + /// Minimum + /// Maximum + /// Deserializer function 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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [SkipLocalsInit] + private static T? ReadNullableNumeric(IDeserializationContext context, int size, T min, T max, NumericReader_Delegate deserializer) + where T : struct, IConvertible { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch (context.SerializerVersion)// Serializer version switch { case 1: - return ReadBool(stream, version, pool) ? ReadNumber(stream, version, pool) : null; + case 2: + { + if (!ReadBool(context.Stream, context)) return null; + } + break; default: { - 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); + 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; + case NumberTypes.MaxValue: return max; + case NumberTypes.Zero: return default(T); + } } + break; } + 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 + /// Read a nullable numeric /// - /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Numeric type + /// Context + /// Serialized data size in bytes + /// Minimum + /// Maximum + /// Deserializer function to execute, if the red value isn't a default handleable numeric value /// Value - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadNumberNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task ReadNullableNumericAsync(IDeserializationContext context, int size, T min, T max, NumericReader_Delegate deserializer) where T : struct, IConvertible { - 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() - : null; + case 2: + { + if (!await ReadBoolAsync(context.Stream, context).DynamicContext()) return null; + } + break; 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, version, numberType, pool, cancellationToken).DynamicContext(); ; + if (size > 2) + { + (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()) + { + case NumberTypes.IsNull: return null; + case NumberTypes.MinValue: return min; + case NumberTypes.MaxValue: return max; + case NumberTypes.Zero: return default(T); + } } + break; + } + byte[] data = await ReadSerializedDataAsync(context.Stream, size, context).DynamicContext(); + try + { + return deserializer(data); + } + finally + { + 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 717e4bb..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,35 +10,34 @@ 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 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)"); + 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)"); + } 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!); - throw new SerializerException(message: null, ex); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); + throw SerializerException.From(ex); } } @@ -47,45 +45,34 @@ public static (byte[] Value, int Length) ReadBytes(this Stream stream, int? vers /// 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 { - int len = await ReadNumberAsync(stream, version, pool, cancellationToken).DynamicContext(); + int len = await ReadNumberAsync(stream, context).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)"); + if (len != 0) + { + 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!); - throw new SerializerException(message: null, ex); + if (buffer.Length != 0) context.BufferPool.Return(buffer!); + throw SerializerException.From(ex); } } @@ -93,46 +80,96 @@ public static (byte[] Value, int Length) ReadBytes(this Stream stream, int? vers /// 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 - ) - => ReadBool(stream, version, pool) ? ReadBytes(stream, version, buffer, pool, minLen, maxLen) : default((byte[] Value, int Length)?); + public static (byte[] Value, int Length)? ReadBytesNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + return ReadBool(stream, context) ? ReadBytes(stream, context, minLen, maxLen) : null; + } + default: + { + byte[] buffer = Array.Empty(); + try + { + if (ReadNumberNullable(stream, context) is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + 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)"); + } + return (buffer, len); + } + catch (SerializerException) + { + if (buffer.Length != 0) context.BufferPool.Return(buffer!); + throw; + } + catch (Exception ex) + { + if (buffer.Length != 0) context.BufferPool.Return(buffer!); + throw SerializerException.From(ex); + } + } + } + } /// /// 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 - ) - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadBytesAsync(stream, version, buffer, pool, minLen, maxLen, cancellationToken).DynamicContext() - : default((byte[] Value, int Length)?); + public static async Task<(byte[] Value, int Length)?> ReadBytesNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadBytesAsync(stream, context, minLen, maxLen).DynamicContext() + : null; + } + default: + { + byte[] buffer = Array.Empty(); + try + { + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + if (len != 0) + { + 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 (buffer.Length != 0) context.BufferPool.Return(buffer!); + throw; + } + catch (Exception ex) + { + 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 02a404c..612921e 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Dictionary.cs @@ -1,5 +1,6 @@ -using System.Buffers; +using System.Collections; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -13,42 +14,50 @@ 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 /// Value - 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 - ) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Dictionary ReadDict(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) where tKey : notnull { - try - { - 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; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } + int len = ReadNumber(stream, context); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + ReadDictInt(context, res, typeof(tKey), typeof(tValue), len); + return res; + } + + /// + /// Read + /// + /// Stream + /// Dictionary type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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" + )); + 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(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len); + return res; } /// @@ -57,43 +66,121 @@ public static Dictionary ReadDict( /// Key type /// Value type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Cancellation token /// Value - 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, - CancellationToken cancellationToken = default - ) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task> ReadDictAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) where tKey : notnull { - try - { - 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; - } - catch (SerializerException) + int len = await ReadNumberAsync(stream, context).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + await ReadDictIntAsync(context, res, typeof(tKey), typeof(tValue), len).DynamicContext(); + return res; + } + + /// + /// Read + /// + /// Stream + /// Dictionary type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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" + )); + 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(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len).DynamicContext(); + return res; + } + + /// + /// Read + /// + /// Key type + /// Value type + /// Stream + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Dictionary? ReadDictNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + where tKey : notnull + { + switch (context.SerializerVersion)// Serializer version switch { - throw; + case 1: + case 2: + return ReadBool(stream, context) ? ReadDict(stream, context, minLen, maxLen) : null; + default: + { + if (ReadNumberNullable(stream, context) is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + ReadDictInt(context, res, typeof(tKey), typeof(tValue), len); + return res; + } } - catch (Exception ex) + } + + /// + /// Read + /// + /// Stream + /// Dictionary type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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" + )); + switch (context.SerializerVersion)// Serializer version switch { - throw new SerializerException(message: null, ex); + case 1: + case 2: + { + return ReadBool(stream, context) ? ReadDict(stream, type, context, minLen, maxLen) : null; + } + default: + { + 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(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len); + return res; + } } } @@ -103,56 +190,254 @@ res[await ReadObjectAsync(stream, version, keyOptions, cancellationToken). /// Key type /// Value type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options /// Value [TargetedPatchingOptOut("Tiny method")] - 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 - ) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task?> ReadDictNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) 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 + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadDictAsync(stream, context, minLen, maxLen).DynamicContext() + : null; + } + default: + { + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + Dictionary res = new(len); + await ReadDictIntAsync(context, res, typeof(tKey), typeof(tValue), len).DynamicContext(); + return res; + } + } + } /// /// Read /// - /// Key type - /// Value type /// Stream - /// Serializer version - /// Array pool + /// Dictionary type + /// Context /// Minimum length /// Maximum length - /// Key serializer options - /// Value serializer options - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - 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, - CancellationToken cancellationToken = default - ) - where tKey : notnull - => await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadDictAsync(stream, version, pool, minLen, maxLen, keyOptions, valueOptions, cancellationToken).DynamicContext() - : default(Dictionary?); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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" + )); + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadDictAsync(stream, type, context, minLen, maxLen).DynamicContext() + : null; + } + default: + { + 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(context, res, type.GenericTypeArguments[0], type.GenericTypeArguments[1], len).DynamicContext(); + return res; + } + } + } + + /// + /// Read dictionary items + /// + /// Context + /// Dictionary + /// Key type + /// Value type + /// Number of items + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ReadDictInt(IDeserializationContext context, IDictionary dict, Type keyType, Type valueType, int count) + { + using ContextRecursion cr = new(context); + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + 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; + (keyContext.ItemSerializer, keyContext.ItemSyncDeserializer, _) = keyType.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: false); + (valueContext.ItemSerializer, valueContext.ItemSyncDeserializer, _) = valueType.GetItemDeserializerInfo(ObjectTypes.Null, isAsync: false); + object? obj; + for (int i = 0; i < count; i++) + { + if (hasOptions) context.WithOptions(keyOptions); + if (keyContext.ItemSerializer == SerializerTypes.Any) + { + ReadAnyItemHeader(keyContext, i, keyType); + key = (keyContext.ItemSerializer == SerializerTypes.Serializer + ? ReadItem(keyContext) + : ReadAnyInt(context, keyContext.ObjectType, keyContext.ItemType))!; + } + else + { + key = ReadItem(keyContext)!; + } + if (hasOptions) context.WithOptions(valueOptions); + if (valueContext.ItemSerializer == SerializerTypes.Any) + { + obj = ReadAnyItemHeader(valueContext, i, valueType); + if (obj == null && valueContext.ObjectType == ObjectTypes.Null) + { + if (!context.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + value = null; + } + if (obj == null) + { + value = (valueContext.ItemSerializer == SerializerTypes.Serializer + ? ReadItem(valueContext) + : ReadAnyInt(context, valueContext.ObjectType, valueContext.ItemType))!; + if (valueContext.ObjectType.RequiresObjectWriting()) valueContext.AddObject(value); + } + else + { + value = obj; + } + } + else + { + value = ReadItem(valueContext)!; + } + dict[key] = value; + } + break; + } + finally + { + context.WithoutOptions(); + } + } + } + + /// + /// Read dictionary items + /// + /// Context + /// Dictionary + /// Key type + /// Value type + /// Number of items + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task ReadDictIntAsync(IDeserializationContext context, IDictionary dict, Type keyType, Type valueType, int count) + { + 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(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; + (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; + for (int i = 0; i < count; i++) + { + if (hasOptions) context.WithOptions(keyOptions); + if (keyContext.ItemSerializer == SerializerTypes.Any) + { + await ReadAnyItemHeaderAsync(keyContext, i, keyType).DynamicContext(); + key = (keyContext.ItemSerializer == SerializerTypes.Serializer + ? await ReadItemAsync(keyContext).DynamicContext() + : await ReadAnyIntAsync(context, keyContext.ObjectType, keyContext.ItemType).DynamicContext())!; + } + else + { + key = (await ReadItemAsync(keyContext).DynamicContext())!; + } + if (hasOptions) context.WithOptions(valueOptions); + if (valueContext.ItemSerializer == SerializerTypes.Any) + { + obj = await ReadAnyItemHeaderAsync(valueContext, i, valueType).DynamicContext(); + if (obj == null && valueContext.ObjectType == ObjectTypes.Null) + { + if (!context.Nullable) throw new SerializerException($"Deserialized NULL value #{i}", new InvalidDataException()); + value = null; + } + if (obj == null) + { + 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 = obj; + } + } + 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 647fc32..1d7afb2 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Enum.cs @@ -1,5 +1,5 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -12,90 +12,158 @@ public static partial class StreamExtensions /// /// Enumeration type /// Stream - /// Serializer version - /// Array pool + /// Context /// Value - public static T ReadEnum(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum - => ReadEnumInt(stream, version, numberType: null, pool); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 /// - /// Enumeration type /// Stream - /// Serializer version + /// Enumeration type + /// Context + /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 + /// + /// Context + /// Enumeration type /// Number type - /// Array pool /// Value - private static T ReadEnumInt(Stream stream, int? version, NumberTypes? numberType, ArrayPool? pool) where T : struct, Enum - { - try +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static Enum ReadEnumInt(IDeserializationContext context, Type type, NumberTypes? numberType) + => SerializerException.Wrap(() => { - if ((numberType ?? NumberTypes.None) == NumberTypes.Default) return default; - 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 (!res.IsValid()) throw new SerializerException($"Unknown enumeration value {res} for {typeof(T)}"); + IEnumInfo info = type.GetEnumInfo(); + numberType ??= (NumberTypes)ReadOneByte(context.Stream, context); + if (numberType == NumberTypes.Default) return info.DefaultValue; + 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; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Read /// /// Enumeration type /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Context /// Value - public static 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); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 /// - /// Enumeration type /// Stream - /// Serializer version + /// Enumeration type + /// Context + /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 + /// + /// Context + /// Enumeration type /// 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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static Task ReadEnumIntAsync(IDeserializationContext context, Type type, NumberTypes? numberType) + => SerializerException.WrapAsync(async () => { - if ((numberType ?? NumberTypes.None) == NumberTypes.Default) return default; - 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)}"); + IEnumInfo info = type.GetEnumInfo(); + numberType ??= (NumberTypes)await ReadOneByteAsync(context.Stream, context).DynamicContext(); + if (numberType == NumberTypes.Default) return info.DefaultValue; + 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; - } - catch (SerializerException) + }); + + /// + /// Read + /// + /// Enumeration type + /// Stream + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static T? ReadEnumNullable(this Stream stream, IDeserializationContext context) where T : struct, Enum + { + switch (context.SerializerVersion)// Serializer version switch { - throw; + case 1: + { + return ReadBool(stream, context) ? ReadEnum(stream, context) : null; + } + default: + { + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull ? null : (T?)ReadEnumInt(context, typeof(T), numberType); + } } - catch (Exception ex) + } + + /// + /// Read + /// + /// Stream + /// Enumeration type + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Enum? ReadEnumNullable(this Stream stream, Type type, IDeserializationContext context) + { + switch (context.SerializerVersion)// Serializer version switch { - throw new SerializerException(message: null, ex); + case 1: + { + return ReadBool(stream, context) + ? ReadEnum(stream, type, context) + : null; + } + default: + { + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull + ? null + : ReadEnumInt(context, type, numberType); + } } } @@ -104,44 +172,61 @@ private static async Task ReadEnumIntAsync(Stream stream, int? version, Nu /// /// Enumeration type /// Stream - /// Serializer version - /// Array pool + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] - public static T? ReadEnumNullable(this Stream stream, int? version = null, ArrayPool? pool = null) where T : struct, Enum +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadEnumNullableAsync(this Stream stream, IDeserializationContext context) + where T : struct, Enum { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch (context.SerializerVersion)// Serializer version switch { case 1: - return ReadBool(stream, version, pool) ? ReadEnum(stream, version, pool) : default(T?); + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadEnumAsync(stream, context).DynamicContext() + : null; + } default: - NumberTypes numberType = (NumberTypes)ReadOneByte(stream, version); - return numberType == NumberTypes.Null ? default(T?) : ReadEnumInt(stream, version, numberType, pool); + { + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull + ? null + : (T)await ReadEnumIntAsync(context, typeof(T), numberType).DynamicContext(); + } } } /// /// Read /// - /// Enumeration type /// Stream - /// Serializer version - /// Array pool - /// Cancellation token + /// Enumeration type + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadEnumNullableAsync(this Stream stream, int? version = null, ArrayPool? pool = null, CancellationToken cancellationToken = default) - where T : struct, Enum +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadEnumNullableAsync(this Stream stream, Type type, IDeserializationContext context) { - switch ((version ?? StreamSerializer.VERSION) & byte.MaxValue) + switch (context.SerializerVersion)// Serializer version switch { case 1: - return await ReadBoolAsync(stream, version, pool, cancellationToken).DynamicContext() - ? await ReadEnumAsync(stream, version, pool, cancellationToken).DynamicContext() - : default(T?); + { + 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 ? default(T?) : await ReadEnumIntAsync(stream, version, numberType, pool, cancellationToken).DynamicContext(); + { + NumberTypes numberType = (NumberTypes)await ReadOneByteAsync(stream, context).DynamicContext(); + return numberType == NumberTypes.IsNull + ? null + : 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 new file mode 100644 index 0000000..2d645bf --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.FixedArray.cs @@ -0,0 +1,342 @@ +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 + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T[] ReadFixedArray(this Stream stream, T[] arr, IDeserializationContext context) + { + ReadFixedArray(stream, arr.AsSpan(), context); + return arr; + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Span ReadFixedArray(this Stream stream, Span arr, IDeserializationContext context) + { + using ContextRecursion cr = new(context); + try + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0, len = arr.Length; i < len; arr[i] = ReadObject(stream, context), i++) ; + return arr; + } + default: + try + { + Type type = typeof(T); + 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) + { + object? obj; + 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) + { + 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; + } + } + } + else + { + for (int i = 0, len = arr.Length; i < len; arr[i] = (T)ReadItem(itemContext)!, i++) ; + } + return arr; + } + finally + { + context.WithoutOptions(); + } + } + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw SerializerException.From(ex); + } + } + + /// + /// Read + /// + /// Stream + /// Array + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Array ReadFixedArray(this Stream stream, Array arr, IDeserializationContext context) + { + using ContextRecursion cr = new(context); + Type elementType = arr.GetType().GetElementType()!; + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + 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()!; + 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) + { + object? obj; + for (int i = 0, len = arr.Length; i < len; i++) + { + obj = ReadAnyItemHeader(itemContext, i, type); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) + { + 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); + } + } + } + else + { + for (int i = 0, len = arr.Length; i < len; arr.SetValue(ReadItem(itemContext), i), i++) ; + } + return arr; + } + finally + { + context.WithoutOptions(); + } + } + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadFixedArrayAsync(this Stream stream, T[] arr, IDeserializationContext context) + { + await ReadFixedArrayAsync(stream, arr.AsMemory(), context).DynamicContext(); + return arr; + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Array + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task> ReadFixedArrayAsync(this Stream stream, Memory arr, IDeserializationContext context) + { + using ContextRecursion cr = new(context); + T? item; + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0, len = arr.Length; i < len; i++) + { + item = await ReadObjectAsync(stream, context).DynamicContext(); + arr.Span[i] = item; + } + return arr; + } + default: + try + { + Type type = typeof(T); + 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) + { + object? obj; + for (int i = 0, len = arr.Length; i < len; i++) + { + obj = await ReadAnyItemHeaderAsync(itemContext, i, type).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) + { + 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; + } + } + } + else + { + 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(); + } + } + } + + /// + /// Read + /// + /// Stream + /// Array + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadFixedArrayAsync(this Stream stream, Array arr, IDeserializationContext context) + { + using ContextRecursion cr = new(context); + Type elementType = arr.GetType().GetElementType()!; + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + for ( + int i = 0, len = arr.Length; + i < len; + arr.SetValue(await ReadObjectAsync(stream, elementType, context).DynamicContext(), i), i++ + ) ; + return arr; + } + default: + try + { + Type type = arr.GetType().GetElementType()!; + 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) + { + object? obj; + for (int i = 0, len = arr.Length; i < len; i++) + { + obj = await ReadAnyItemHeaderAsync(itemContext, i, type).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) + { + 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); + } + } + } + else + { + 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 new file mode 100644 index 0000000..5de07b1 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Items.cs @@ -0,0 +1,323 @@ +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Items + public static partial class StreamExtensions + { + /// + /// Read an item using a specified serializer + /// + /// Context + /// Item +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static dynamic? ReadItem(ItemDeserializerContext context) + { + IDeserializationContext dc = context.Context; + Type? type = context.ItemType; + if (!context.Nullable) + { + switch (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return ReadSerializedObject(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.Serializer: + { + 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(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, dc.Stream, dc) + ?? throw new SerializerException($"{nameof(ReadStruct)} serialized {type} to NULL"); + 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 (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return ReadSerializedObjectNullable(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc); + case SerializerTypes.Serializer: + { + 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(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 + /// + /// Context + /// Item +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadItemAsync(ItemDeserializerContext context) + { + IDeserializationContext dc = context.Context; + Type? type = context.ItemType; + if (!context.Nullable) + { + switch (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return await ReadSerializedObjectAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.Serializer: + { + if (context.ItemAsyncDeserializer == null) + { + 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(() => context.ItemAsyncDeserializer!(dc, SerializerHelper.EnsureNotNull(type, nameof(type)))); + await task.DynamicContext(); + return task.GetResult(type!); + } + } + 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, dc.Stream, dc) + ?? throw new SerializerException($"{nameof(ReadStruct)} serialized {type} to NULL"); + 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 (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return await ReadSerializedObjectNullableAsync(dc.Stream, SerializerHelper.EnsureNotNull(type, nameof(type)), dc).DynamicContext(); + case SerializerTypes.Serializer: + { + if (!await ReadBoolAsync(dc.Stream, dc).DynamicContext()) return null; + if (context.ItemAsyncDeserializer == 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"); + } + else + { + 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(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, dc.Stream, dc) + ?? throw new SerializerException($"{nameof(ReadStructNullable)} serialized {type} to NULL"); + 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 + /// + /// Context + /// Item index + /// Element type + /// Cached object + public static object? ReadAnyItemHeader(ItemDeserializerContext context, int index, Type elementType) + { + IDeserializationContext dc = context.Context; + bool requireType; + // Read the object type + context.ObjectType = (ObjectTypes)ReadOneByte(dc.Stream, dc); + if (context.ObjectType == ObjectTypes.Null) return null; + // Use the object cache + if (context.ObjectType == ObjectTypes.Cached) + { + 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 (context.ObjectType == ObjectTypes.LastItemType) + { + // Use the last object type + if (index == 0) throw new SerializerException($"Invalid object type {context.ObjectType} for item #{index}", new InvalidDataException()); + requireType = false; + } + else + { + // Ensure correct deserializer informations + context.LastObjectType = context.ObjectType.RequiresObjectWriting() ? context.ObjectType : default; + requireType = context.ObjectType.RequiresType(); + if (requireType) + { + // An object type is required + if (context.ObjectType.IsBasicTypeInfo()) + { + // Read a basic type information + context.ItemType = new SerializedTypeInfo((ObjectTypes)dc.Stream.ReadOneByte(dc)).ToSerializableType(); + context.ObjectType &= ~ObjectTypes.BasicTypeInfo; + } + if (context.ObjectType.IsCached()) + { + // Use a previously cached object type + context.ItemType = context.GetCachedType(ReadOneByte(dc.Stream, dc)); + context.ObjectType &= ~ObjectTypes.Cached; + } + else + { + // Read the object type + 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); + } + (context.ItemSerializer, context.ItemSyncDeserializer, _) = context.ItemType.GetItemDeserializerInfo(context.ObjectType, isAsync: false); + } + else + { + // No object type is required + context.ItemType = null; + context.ItemSerializer = SerializerTypes.Any; + } + } + // Ensure having a valid type serializer configuration + if (requireType && context.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 + /// + /// Context + /// Item index + /// Item element type + /// Item informations + public static async Task ReadAnyItemHeaderAsync(ItemDeserializerContext context, int index, Type elementType) + { + IDeserializationContext dc = context.Context; + bool requireType; + // Read the object type + context.ObjectType = (ObjectTypes)await ReadOneByteAsync(dc.Stream, dc).DynamicContext(); + if (context.ObjectType == ObjectTypes.Null) return null; + // Use the object cache + if (context.ObjectType == ObjectTypes.Cached) + { + 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 (context.ObjectType == ObjectTypes.LastItemType) + { + // Use the last object type + if (index == 0) throw new SerializerException($"Invalid object type {context.ObjectType} for item #{index}", new InvalidDataException()); + requireType = false; + } + else + { + // Ensure correct deserializer informations + context.LastObjectType = context.ObjectType.RequiresObjectWriting() ? context.ObjectType : default; + requireType = context.ObjectType.RequiresType(); + if (requireType) + { + // An object type is required + if (context.ObjectType.IsBasicTypeInfo()) + { + // Read a basic type information + context.ItemType = new SerializedTypeInfo((ObjectTypes)await dc.Stream.ReadOneByteAsync(dc).DynamicContext()).ToSerializableType(); + context.ObjectType &= ~ObjectTypes.BasicTypeInfo; + } + if (context.ObjectType.IsCached()) + { + // Use a previously cached object type + context.ItemType = context.GetCachedType(await ReadOneByteAsync(dc.Stream, dc).DynamicContext()); + context.ObjectType &= ~ObjectTypes.Cached; + } + else + { + // 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); + } + (context.ItemSerializer, context.ItemSyncDeserializer, context.ItemAsyncDeserializer) = + context.ItemType.GetItemDeserializerInfo(context.ObjectType, isAsync: true); + } + else + { + // No object type is required + context.ItemType = null; + context.ItemSerializer = SerializerTypes.Any; + } + } + // Ensure having a valid type serializer configuration + 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 0e2b1db..4ecca31 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.List.cs @@ -1,5 +1,6 @@ -using System.Buffers; +using System.Collections; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -12,38 +13,49 @@ public static partial class StreamExtensions /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options /// Value - public static List ReadList( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null - ) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static List ReadList(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - if (typeof(T) == typeof(byte)) return new List((ReadBytes(stream, version, buffer: null, pool, minLen, maxLen) as T[])!); - try - { - 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) - { - throw new SerializerException(message: null, ex); - } + int len = ReadNumber(stream, context); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + ReadListInt(context, res, typeof(T), len); + return res; + } + + /// + /// Read + /// + /// Stream + /// List type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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" + )); + 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(context, res, itemType, len); + return res; } /// @@ -51,40 +63,120 @@ public static List ReadList( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Cancellation token /// Value - public static async Task> ReadListAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - ISerializerOptions? valueOptions = null, - CancellationToken cancellationToken = default - ) + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task> ReadListAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) { - if (typeof(T) == typeof(byte)) - return new List((await ReadBytesAsync(stream, version, buffer: null, pool, minLen, maxLen, cancellationToken).DynamicContext() as T[])!); - try - { - 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) + int len = await ReadNumberAsync(stream, context).DynamicContext(); + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + await ReadListIntAsync(context, res, typeof(T), len).DynamicContext(); + return res; + } + + /// + /// Read + /// + /// Stream + /// List type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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" + )); + 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(context, res, type.GenericTypeArguments[0], len).DynamicContext(); + return res; + } + + /// + /// Read + /// + /// Element type + /// Stream + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static List? ReadListNullable(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + { + switch (context.SerializerVersion)// Serializer version switch { - throw; + case 1: + case 2: + { + return ReadBool(stream, context) ? ReadList(stream, context, minLen, maxLen) : null; + } + default: + { + if (ReadNumberNullable(stream, context) is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + ReadListInt(context, res, typeof(T), len); + return res; + } } - catch (Exception ex) + } + + /// + /// Read + /// + /// Stream + /// List type + /// Context + /// Minimum length + /// Maximum length + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 (context.SerializerVersion)// Serializer version switch { - throw new SerializerException(message: null, ex); + case 1: + case 2: + { + return ReadBool(stream, context) ? ReadList(stream, type, context, minLen, maxLen) : null; + } + default: + { + 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(context, res, itemType, len); + return res; + } } } @@ -93,49 +185,204 @@ public static async Task> ReadListAsync( /// /// Element type /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length /// Maximum length - /// Value serializer options /// Value [TargetedPatchingOptOut("Tiny method")] - public static List? ReadListNullable( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - 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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task?> ReadListNullableAsync(this Stream stream, IDeserializationContext context, int minLen = 0, int maxLen = int.MaxValue) + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadListAsync(stream, context, minLen, maxLen).DynamicContext() + : null; + } + default: + { + if (await ReadNumberNullableAsync(stream, context).DynamicContext() is not int len) return null; + SerializerHelper.EnsureValidLength(len, minLen, maxLen); + List res = new(len); + await ReadListIntAsync(context, res, typeof(T), len).DynamicContext(); + return res; + } + } + } /// /// Read /// - /// Element type /// Stream - /// Serializer version - /// Array pool + /// List type + /// Context /// Minimum length /// Maximum length - /// Value serializer options - /// Cancellation token /// Value [TargetedPatchingOptOut("Tiny method")] - public static async Task?> ReadListNullableAsync( - this Stream stream, - 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, version, pool, minLen, maxLen, valueOptions, cancellationToken).DynamicContext() - : default(List?); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadListAsync(stream, type, context, minLen, maxLen).DynamicContext() + : null; + } + default: + { + 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(context, res, itemType, len).DynamicContext(); + return res; + } + } + } + + /// + /// Read list items + /// + /// Context + /// List + /// Item type + /// Number of items + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void ReadListInt(IDeserializationContext context, IList list, Type type, int count) + { + using ContextRecursion cr = new(context); + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + for (int i = 0; i < count; list.Add(ReadObject(context.Stream, type, context)), i++) ; + break; + } + default: + try + { + 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) + { + object? obj; + for (int i = 0; i < count; i++) + { + obj = ReadAnyItemHeader(itemContext, i, type); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) + { + 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); + } + } + } + else + { + for (int i = 0; i < count; list.Add(ReadItem(itemContext)), i++) ; + } + break; + } + finally + { + context.WithoutOptions(); + } + } + } + + /// + /// Read list items + /// + /// Context + /// List + /// Item type + /// Number of items + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task ReadListIntAsync(IDeserializationContext context, IList list, Type type, int count) + { + 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(context.Stream, type, context).DynamicContext()), i++) ; + break; + } + default: + try + { + 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) + { + object? obj; + for (int i = 0; i < count; i++) + { + obj = await ReadAnyItemHeaderAsync(itemContext, i, type).DynamicContext(); + if (obj == null && itemContext.ObjectType == ObjectTypes.Null) + { + 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); + } + } + } + else + { + 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 new file mode 100644 index 0000000..7adb455 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Number.cs @@ -0,0 +1,412 @@ +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Number + public static partial class StreamExtensions + { + /// + /// Read + /// + /// Stream + /// Context + /// Value +#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 + /// Context + /// Value +#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 + /// + /// Context + /// Resulting number type + /// Number type + /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [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"); + 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()) + { + 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}"); + } + }); + + /// + /// Read + /// + /// Stream + /// Context + /// Value +#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(context, typeof(T), numberType: null).DynamicContext(); + + /// + /// Read + /// + /// Stream + /// Number type + /// Context + /// Value +#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 + /// + /// Context + /// Resulting number type + /// Number type + /// Value +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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(context.Stream, len: 1, context).DynamicContext() + : context.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 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: + switch (type) + { + case NumberTypes.Byte | NumberTypes.MaxValue | NumberTypes.Unsigned: + return Convert.ChangeType(byte.MaxValue, resType); + } + 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: + 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(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(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(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(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(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(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(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(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(context.Stream, context).DynamicContext(), resType) + }; + default: + throw new SerializerException($"Unknown numeric type {type}"); + } + } + finally + { + context.BufferPool.Return(data); + } + }); + + /// + /// Read + /// + /// Stream + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static T? ReadNumberNullable(this Stream stream, IDeserializationContext context) where T : struct, IConvertible + => SerializerException.Wrap(() => + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + { + return ReadBool(stream, context) ? ReadNumber(stream, context) : null; + } + case 2: + { + NumberTypes numberType = ReadEnum(stream, context); + return numberType == NumberTypes.IsNull ? null : (T?)ReadNumberInt(context, typeof(T), numberType); + } + default: + { + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull ? null : (T?)ReadNumberInt(context, typeof(T), numberType); + } + } + }); + + /// + /// Read + /// + /// Stream + /// Number type + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static object? ReadNumberNullable(this Stream stream, Type type, IDeserializationContext context) + => SerializerException.Wrap(() => + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + { + return ReadBool(stream, context) ? ReadNumber(stream, type, context) : null; + } + case 2: + { + NumberTypes numberType = ReadEnum(stream, context); + return numberType == NumberTypes.IsNull ? null : ReadNumberInt(context, type, numberType); + } + default: + { + NumberTypes numberType = (NumberTypes)ReadOneByte(stream, context); + return numberType == NumberTypes.IsNull ? null : ReadNumberInt(context, type, numberType); + } + } + }); + + /// + /// Read + /// + /// Number type + /// Stream + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task ReadNumberNullableAsync(this Stream stream, IDeserializationContext context) + where T : struct, IConvertible + => SerializerException.WrapAsync(async () => + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadNumberAsync(stream, context).DynamicContext() + : null; + } + case 2: + { + 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, context).DynamicContext(); + return numberType == NumberTypes.IsNull ? null : (T?)await ReadNumberIntAsync(context, typeof(T), numberType).DynamicContext(); + } + } + }); + + /// + /// Read + /// + /// Stream + /// Number type + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task ReadNumberNullableAsync(this Stream stream, Type type, IDeserializationContext context) + => SerializerException.WrapAsync(async () => + { + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + { + return await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadNumberAsync(stream, type, context).DynamicContext() + : null; + } + case 2: + { + 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, 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 49a3be7..7870980 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.Buffers; +using System.ComponentModel.DataAnnotations; using System.Runtime; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; using wan24.ObjectValidation; @@ -10,135 +11,300 @@ namespace wan24.StreamSerializerExtensions // Object public static partial class StreamExtensions { - /// /// Read /// /// Object type /// Stream - /// Serializer version - /// Options + /// Context /// 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 - { - return (T)(deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options) ?? throw new SerializerException($"{typeof(T)} deserialized to NULL")); - } - catch (SerializerException) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static T ReadObject(this Stream stream, IDeserializationContext context) + => SerializerException.Wrap(() => { - throw; - } - catch (Exception ex) + 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); + }); + + /// + /// Read + /// + /// Stream + /// Type + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static object ReadObject(this Stream stream, Type type, IDeserializationContext context) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - } + 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); + }); /// /// Read /// /// Object type /// Stream - /// Serializer version - /// Options - /// Cancellation token + /// Context /// 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) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task ReadObjectAsync(this Stream stream, IDeserializationContext context) + => SerializerException.WrapAsync(async () => { - await Task.Yield(); - return ReadObject(stream, version, options); - } - try - { - Task task = deserializer(stream, typeof(T), version ?? StreamSerializer.Version, options, cancellationToken); + if (typeof(IStreamSerializer).IsAssignableFrom(typeof(T))) + 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, context) + : (T)ReadAnyObject(stream, typeof(T), context); + Task task = deserializer(context, typeof(T)); 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 + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task ReadObjectAsync(this Stream stream, Type type, IDeserializationContext context) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + if (typeof(IStreamSerializer).IsAssignableFrom(type)) + 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, context) + : ReadAnyObject(stream, type, context); + Task task = deserializer(context, type); + await task.DynamicContext(); + return task.GetResult(type); + }); /// /// Read /// /// Object type /// Stream - /// Serializer version - /// Options + /// Context /// Value [TargetedPatchingOptOut("Tiny method")] - public static T? ReadObjectNullable(this Stream stream, int? version = null, ISerializerOptions? options = null) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 + /// + /// Read + /// + /// Stream + /// Object type + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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() +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 + /// + /// Read + /// + /// Stream + /// Object type + /// Context + /// Value + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context) + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadObjectAsync(stream, type, context).DynamicContext() + : null; + /// /// Read any object /// /// 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() { + using ContextRecursion cr = new(context); + // Handle serializable type 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"); + 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, 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(); - for (; done < count; done++) + object? obj; + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + for (int i = 0; i < count; i++) { - 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) + 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) + { + 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); + } + } + // 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 + /// Context + /// Object + public static object ReadAnyObject(this Stream stream, Type type, IDeserializationContext context) + { + using ContextRecursion cr = new(context); + // Handle serializable type + 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, 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}"); + object? obj; + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + 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) + { + 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); + } } - 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)})"); + // 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; } @@ -147,44 +313,145 @@ public static async Task ReadObjectAsync(this Stream stream, int? version /// /// 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() { + using ContextRecursion cr = new(context); + // Handle serializable type Type type = typeof(T); - Task task; if (typeof(IStreamSerializer).IsAssignableFrom(type)) + 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, 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; + T res = new(); + object? obj; + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + for (int i = 0; i < count; i++) { - task = (Task)ReadSerializedAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, version, cancellationToken)!; - await task.DynamicContext(); - return task.GetResult(); + 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) + { + 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); + } } - 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++) + // 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 + /// Context + /// Object + public static async Task ReadAnyObjectAsync(this Stream stream, Type type, IDeserializationContext context) + { + using ContextRecursion cr = new(context); + // Handle serializable type + 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, 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}"); + object? obj; + using ItemDeserializerContext itemContext = new(context); + ISerializerOptions? options; + for (int i = 0; i < count; i++) { - 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()); + 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) + { + 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); + } } - 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)})"); + // 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; } @@ -193,25 +460,60 @@ public static async Task ReadObjectAsync(this Stream stream, int? version /// /// Object type /// Stream - /// Serializer version + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] - public static T? ReadAnyObjectNullable(this Stream stream, int? version = null) where T : class, new() - => ReadBool(stream, version) ? ReadAnyObject(stream, version) : null; +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 + /// Context + /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - public static async Task ReadAnyObjectNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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; + + /// + /// Read any object + /// + /// Stream + /// Object type + /// Context + /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 7a898ea..dfe02eb 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; @@ -14,100 +15,115 @@ 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 - { - 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; - } +#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, 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)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read /// /// Stream /// Object type - /// Serializer version + /// Context /// 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)!; +#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, 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)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read /// /// Object type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// 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; - } +#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, 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)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read /// /// Stream /// Type - /// Serializer version - /// Cancellation token + /// Context /// 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); - } +#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, 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)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read /// /// Object type /// Stream - /// Serializer version + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] - public static T? ReadSerializedNullable(this Stream stream, int? version = null) where T : class, IStreamSerializer +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 /// @@ -115,102 +131,131 @@ public static async Task ReadSerializedObjectAsync(this Stream stream, T /// /// Object type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// Object [TargetedPatchingOptOut("Tiny method")] - 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() +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 + + /// + /// Read + /// + /// Stream + /// Type + /// Context + /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static object? ReadSerializedObjectNullable(this Stream stream, Type type, IDeserializationContext context) + => ReadBool(stream, context) ? ReadSerializedObject(stream, type, context) : null; + + /// + /// Read + /// + /// Stream + /// Type + /// Context + /// Object + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadSerializedObjectNullableAsync(this Stream stream, Type type, IDeserializationContext context) + => await ReadBoolAsync(stream, context).DynamicContext() + ? await ReadSerializedObjectAsync(stream, type, context).DynamicContext() + : null; + /// /// Read /// /// Structure type /// Stream - /// Serializer version + /// Context /// 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; - } +#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, 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)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read /// /// Structure type /// Stream - /// Serializer version - /// Cancellation token + /// Context /// 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; - } +#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, 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)})", + new ObjectValidationException(results) + ); + return res; + }); /// /// Read /// /// Structure type /// Stream - /// Serializer version + /// Context /// Structure [TargetedPatchingOptOut("Tiny method")] - public static T? ReadSerializedStructNullable(this Stream stream, int? version = null) where T : struct, IStreamSerializer - => ReadBool(stream, version) ? ReadSerializedStruct(stream, version) : default(T?); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - public static async Task ReadSerializedStructNullableAsync(this Stream stream, int? version = null, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 4056c85..45ddeae 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Stream.cs @@ -1,5 +1,5 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -10,287 +10,285 @@ public static partial class StreamExtensions /// /// Read a stream /// - /// Target stream type /// 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 - public static T ReadStream( +#pragma warning disable IDE0060 // Remove unused argument + public static Stream ReadStream( this Stream stream, - T target, - int? version = null, - ArrayPool? pool = null, + Stream target, + IDeserializationContext context, int? maxBufferSize = null, long minLen = 0, long maxLen = long.MaxValue ) - where T : Stream - => 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 /// - /// Target stream type - /// 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) /// Target stream - private static T ReadStreamInt( - this Stream stream, - T target, - int? version, - ArrayPool? pool, +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static Stream ReadStreamInt( + IDeserializationContext context, + Stream target, int? maxBufferSize, long minLen, 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) + 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, long.MaxValue, minLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), minLen, long.MaxValue, maxLen); + len ??= context.Stream.ReadNumber(context); + 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) { - red = stream.Read(buffer.Span[..(int)Math.Min(buffer.Length, len.Value - total)]); - if (red < 1) break; - target.Write(buffer.Span[..red]); + // 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 RentedArrayStruct buffer = new((int)len, context.BufferPool, clean: false); + long total = 0; + for (int red = (int)len; red == len; total += red) + { + 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]); + } + 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 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 = context.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 - /// Array pool + /// Context /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes /// Target stream [TargetedPatchingOptOut("Tiny method")] - public static T? ReadStreamNullable( +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream? ReadStreamNullable( this Stream stream, - T target, - int? version = null, - ArrayPool? pool = null, + Stream target, + IDeserializationContext context, 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 (context.SerializerVersion)// Serializer version switch + { + case 1: + { + if (!ReadBool(stream, context)) + { + target.Dispose(); + return null; + } + return ReadStream(stream, target, context, maxBufferSize, minLen, maxLen); + } + default: + { + long len = ReadNumber(stream, context); + if (len == long.MinValue) + { + target.Dispose(); + return null; + } + return ReadStreamInt(context, target, maxBufferSize, minLen, maxLen, len); + } + } + }); /// /// Read a stream /// - /// Target stream type /// 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 - public static Task ReadStreamAsync( + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#pragma warning disable IDE0060 // Remove unused argument + public static Task ReadStreamAsync( this Stream stream, - T target, - int? version = null, - ArrayPool? pool = null, + Stream target, + IDeserializationContext context, int? maxBufferSize = null, long minLen = 0, - long maxLen = long.MaxValue, - CancellationToken cancellationToken = default + long maxLen = long.MaxValue ) - where T : Stream - => 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 /// - /// Target stream type - /// 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 - private static async Task ReadStreamIntAsync( - Stream stream, - T target, - int? version, - ArrayPool? pool, +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static Task ReadStreamIntAsync( + IDeserializationContext context, + Stream target, int? maxBufferSize, long minLen, long maxLen, - long? len, - CancellationToken cancellationToken + 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 ??= 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) + 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, long.MaxValue, minLen); + ArgumentValidationHelper.EnsureValidArgument(nameof(maxLen), minLen, long.MaxValue, maxLen); + len ??= await context.Stream.ReadNumberAsync(context).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) { - 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(); + // 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 RentedArrayStruct buffer = new((int)len, context.BufferPool, clean: false); + long total = 0; + for (int red = (int)len; red == len; total += red) + { + 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], context.Cancellation).DynamicContext(); + } + if (total < minLen) throw new SerializerException($"The stream length doesn't fit the minimum length of {minLen} bytes", new InvalidDataException()); } - if (total != len) throw new SerializerException($"Invalid stream length ({len} bytes proposed, {total} bytes red)", new IOException()); - } - return target; - } + 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 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 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], context.Cancellation).DynamicContext(); + } + if (total != len) throw new SerializerException($"Invalid stream length ({len} bytes proposed, {total} bytes red)", new IOException()); + } + 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 - /// Array pool + /// Context /// Maximum buffer size in bytes /// Minimum stream length /// Maximum stream length in bytes - /// Cancellation token /// Target stream [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStreamNullableAsync( +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task ReadStreamNullableAsync( this Stream stream, - T target, - int? version = null, - ArrayPool? pool = null, + Stream target, + IDeserializationContext context, int? maxBufferSize = null, long minLen = 0, - long maxLen = long.MaxValue, - CancellationToken cancellationToken = default + long maxLen = long.MaxValue ) - 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 (context.SerializerVersion)// Serializer version switch + { + case 1: + { + if (!await ReadBoolAsync(stream, context).DynamicContext()) + { + await target.DisposeAsync().DynamicContext(); + return null; + } + return await ReadStreamAsync(stream, target, context, maxBufferSize, minLen, maxLen).DynamicContext(); + } + default: + { + long len = await ReadNumberAsync(stream, context).DynamicContext(); + if (len == long.MinValue) + { + await target.DisposeAsync().DynamicContext(); + return null; + } + 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 2ccc492..ff2bd52 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; namespace wan24.StreamSerializerExtensions @@ -11,306 +10,345 @@ public static partial class StreamExtensions /// Read /// /// Stream - /// Serializer version - /// Array pool + /// Context /// 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) - { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try - { - return data.AsSpan(0, len).ToUtf8String(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } +#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 - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStringAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - 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) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } +#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 - [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 +#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 - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStringNullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => 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 +#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 - [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 - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } +#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 - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString16Async( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - 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).ToUtf16String(); - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - finally - { - (pool ?? StreamSerializer.BufferPool).Return(data); - } - } +#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 - [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 +#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 - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString16NullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => 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 +#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 - [TargetedPatchingOptOut("Tiny method")] - public static string ReadString32(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 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 + /// Context + /// Minimum length in bytes + /// Maximum length in bytes + /// Value +#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 + /// Context + /// Minimum length in bytes + /// Maximum length in bytes + /// Value +#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 + /// Context + /// Minimum length in bytes + /// Maximum length in bytes + /// Value +#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 + /// + /// Context + /// Minimum length in bytes + /// Maximum length in bytes + /// Action to execute for decoding the resulting string + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [SkipLocalsInit] + private static string ReadString(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - (byte[] data, int len) = ReadBytes(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen); - try + 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 data.AsSpan(0, len).ToUtf32String(); + if (context.SerializerVersion > 2) throw new SerializerException($"Deserialized empty string", new InvalidDataException()); + return string.Empty;// Compatibility with serializer version 2 } - catch (Exception ex) + if (len <= Settings.StackAllocBorder) { - throw new SerializerException(message: null, ex); + 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 ?? StreamSerializer.BufferPool).Return(data); + byte[] buffer = ReadSerializedData(context.Stream, len, context); + try + { + return action(buffer.AsSpan(0, len)); + } + finally + { + context.BufferPool.Return(buffer); + } } } /// - /// Read UTF-32 (little endian) string + /// Read a string /// - /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token - /// Value - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString32Async( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) + /// Action to execute for decoding the resulting string + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task ReadStringAsync(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) { - (byte[] data, int len) = await ReadBytesAsync(stream, version, buffer: null, pool ?? StreamSerializer.BufferPool, minLen, maxLen, cancellationToken).DynamicContext(); - try + (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 data.AsSpan(0, len).ToUtf32String(); + if (context.SerializerVersion > 2) throw new SerializerException($"Deserialized empty string", new InvalidDataException()); + return string.Empty;// Compatibility with serializer version 2 } - catch (Exception ex) + byte[] buffer = await ReadSerializedDataAsync(context.Stream, len, context).DynamicContext(); + try { - throw new SerializerException(message: null, ex); + return action(buffer.AsSpan(0, len)); } finally { - (pool ?? StreamSerializer.BufferPool).Return(data); + context.BufferPool.Return(buffer); } } /// - /// Read UTF-32 (little endian) string + /// Read a string /// - /// Stream - /// Serializer version - /// Array pool + /// Context /// 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) -#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 + /// Action to execute for decoding the resulting string + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [SkipLocalsInit] + private static string? ReadNullableString(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) + { + int len; + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + if (!ReadBool(context.Stream, context)) return null; + len = ReadNumber(context.Stream, context); + } + break; + default: + { + if (context.TryReadCachedObjectCountable(out string? res, out long l)) return res; + len = (int)l; + } + break; + } + 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]; + 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, context); + try + { + return action(buffer.AsSpan(0, len)); + } + finally + { + context.BufferPool.Return(buffer); + } + } + } /// - /// Read UTF-32 (little endian) string + /// Read a string /// - /// Stream - /// Serializer version - /// Array pool + /// Context /// Minimum length in bytes /// Maximum length in bytes - /// Cancellation token - /// Value - [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadString32NullableAsync( - this Stream stream, - int? version = null, - ArrayPool? pool = null, - int minLen = 0, - int maxLen = int.MaxValue, - CancellationToken cancellationToken = default - ) - => 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 + /// Action to execute for decoding the resulting string + /// String +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task ReadNullableStringAsync(IDeserializationContext context, int minLen, int maxLen, StringReader_Delegate action) + { + int len; + switch (context.SerializerVersion)// Serializer version switch + { + case 1: + case 2: + { + if (!await ReadBoolAsync(context.Stream, context).DynamicContext()) return null; + len = await ReadNumberAsync(context.Stream, context).DynamicContext(); + } + break; + default: + { + (bool cached, string? res, long l) = await context.TryReadCachedObjectCountableAsync().DynamicContext(); + if (cached) return res; + len = (int)l; + } + break; + } + 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)); + } + finally + { + 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 1c10787..96e5a9c 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; @@ -13,119 +14,98 @@ public static partial class StreamExtensions /// /// Struct type /// Stream - /// Serializer version - /// Buffer - /// Buffer pool + /// Contxt /// Struct [TargetedPatchingOptOut("Tiny method")] - public static T ReadStruct( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null - ) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static T ReadStruct(this Stream stream, IDeserializationContext context) 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 = context.BufferPool.Rent(len); + stream.ReadBytes(context, len, len); 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(); + context.BufferPool.Return(data); } - } - finally - { - if (buffer == null && pool != null) pool.Return(data); - } - } + }); /// /// Read a struct /// /// Struct type /// Stream - /// Serializer version - /// Buffer - /// Buffer pool - /// Cancellation token + /// Context /// Struct [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadStructAsync( - this Stream stream, - int? version = null, - byte[]? buffer = null, - ArrayPool? pool = null, - 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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task ReadStructAsync(this Stream stream, IDeserializationContext context) where T : struct + => SerializerException.WrapAsync(async () => { - GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned); + int len = Marshal.SizeOf(typeof(T)); + byte[] data = context.BufferPool.Rent(len); + await stream.ReadBytesAsync(context, len, len).DynamicContext(); 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(); + context.BufferPool.Return(data); } - } - finally - { - if (buffer == null && pool != null) pool.Return(data); - } - } + }); /// /// Read a struct /// /// Struct type /// Stream - /// Serializer version - /// Buffer - /// Buffer pool + /// Context /// Struct [TargetedPatchingOptOut("Tiny method")] - 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; +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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; +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 new file mode 100644 index 0000000..c6de626 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.Type.cs @@ -0,0 +1,169 @@ +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Type + public static partial class StreamExtensions + { + /// + /// Read a type + /// + /// Stream + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type ReadType(this Stream stream, IDeserializationContext context) => ReadSerialized(stream, context).ToClrType(); + + /// + /// Read a type + /// + /// Stream + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadTypeAsync(this Stream stream, IDeserializationContext context) + => (await ReadSerializedAsync(stream, context).DynamicContext()).ToClrType(); + + /// + /// Read a serializable type ( + /// + /// Stream + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Type ReadSerializableType(this Stream stream, IDeserializationContext context) + => ReadSerialized(stream, context).ToSerializableType(); + + /// + /// Read a type + /// + /// Stream + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static async Task ReadSerializableTypeAsync(this Stream stream, IDeserializationContext context) + => (await ReadSerializedAsync(stream, context).DynamicContext()).ToSerializableType(); + + /// + /// Read a type + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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 + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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 ( + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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 + /// + /// Stream + /// Pre-red object version + /// Pre-red object type + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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 + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 + /// Context + /// Type + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 126aead..ea48eb9 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Read.cs @@ -1,6 +1,6 @@ -using System.Buffers; -using System.Reflection; +using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -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 /// @@ -25,92 +21,16 @@ public static partial class StreamExtensions /// 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 + /// Read nullable struct method /// - public static readonly MethodInfo ReadNumberIntMethod; + public static readonly MethodInfo ReadStructNullableMethod; /// - /// Read number method + /// Read nullable struct 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; + public static readonly MethodInfo ReadStructNullableAsyncMethod; /// - /// Require the attribute when using etc.? + /// Require the attribute when using etc.? /// public static bool AnyObjectAttributeRequired { get; set; } = true; @@ -118,26 +38,39 @@ public static partial class StreamExtensions /// Read the serializer version /// /// Steam + /// Context /// Serializer version [TargetedPatchingOptOut("Tiny method")] - public static int ReadSerializerVersion(this Stream stream) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static int ReadSerializerVersion(this Stream stream, IDeserializationContext context) { - int res = ReadNumber(stream, version: 1); - if (res < 1 || res > StreamSerializer.VERSION) throw new InvalidDataException($"Invalid or unsupported stream serializer version #{res}"); + // 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; } /// /// Read the serializer version /// - /// Steam - /// Cancellation token + /// Stream + /// Context /// Serializer version [TargetedPatchingOptOut("Tiny method")] - public static async Task ReadSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task ReadSerializerVersionAsync(this Stream stream, IDeserializationContext context) { - 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}"); + // 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; } @@ -146,20 +79,27 @@ 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 after use and might be larger than the given length!) - public static byte[] ReadSerializedData(this Stream stream, int len, ArrayPool? pool = null) + /// 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, IDeserializationContext context) { - byte[] res = (pool ?? StreamSerializer.BufferPool).Rent(len); + byte[] res = context.BufferPool.Rent(len); try { - 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; + return SerializerException.Wrap(() => + { + int red = stream.Read(res.AsSpan(0, len)); + 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); + context.BufferPool.Return(res, clearArray: false); throw; } } @@ -169,21 +109,27 @@ 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 after use and might be larger than the given length!) - public static async Task ReadSerializedDataAsync(this Stream stream, int len, ArrayPool? pool = null, CancellationToken cancellationToken = default) + /// 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, IDeserializationContext context) { - byte[] res = (pool ?? StreamSerializer.BufferPool).Rent(len); + byte[] res = context.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), 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 ?? StreamSerializer.BufferPool).Return(res); + 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..1bd3f24 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.SerializationContext.cs @@ -0,0 +1,43 @@ +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 type + /// Stream (won't be disposed) + /// Cache size + /// Cancellation token + /// Context (don't forget to dispose!) + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 + /// Cancellation token + /// Context (don't forget to dispose!) + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static DeserializerContext CreateDeserializationContext( + this T stream, + int? version = null, + int? cacheSize = null, + CancellationToken cancellationToken = default + ) + where T : Stream + => new(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 b31a126..d69b4c7 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 @@ -9,115 +10,108 @@ public static partial class StreamExtensions /// /// Write any object /// - /// Stream type /// Stream /// Object + /// Context /// Stream - public static T WriteAny(this T stream, object obj) where T : Stream - { - try - { - (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); - using (RentedArray poolData = new(1)) - { - poolData[0] = (byte)objType; - stream.Write(poolData.Span); - } - if (writeType) WriteString(stream, type.ToString()); - if (writeObject) - if (objType.IsNumber()) - { - WriteNumberMethod.MakeGenericMethod(typeof(T), type).InvokeAuto(obj: null, stream, obj); - } - else - { - WriteObjectMethod.MakeGenericMethod(typeof(T), type).InvokeAuto(obj: null, stream, obj); - } - return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteAny(this Stream stream, object obj, ISerializationContext context) => WriteAny(stream, obj, objType: null, writeObject: true, context); /// /// Write any object /// /// Stream /// Object - /// Cancellation token - public static async Task WriteAnyAsync(this Stream stream, object obj, CancellationToken cancellationToken = default) + /// 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, ISerializationContext context) { - try - { - (Type type, ObjectTypes objType, bool writeType, bool writeObject) = obj.GetObjectSerializerInfo(); - using (RentedArray poolData = new(1)) - { - poolData[0] = (byte)objType; - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); - } - 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)!; - } - else - { - task = (Task)WriteObjectAsyncMethod.MakeGenericMethod(type).InvokeAuto(obj: null, stream, obj, cancellationToken)!; - } - await task.DynamicContext(); - } - } - catch (SerializerException) + if (objType == null) { - throw; + (Type type, objType, bool writeType, writeObject) = obj.GetObjectSerializerInfo(); + Write(stream, (byte)objType, context); + if (writeType) Write(stream, type, context); } - catch (Exception ex) + if (!writeObject) return stream; + return objType.Value switch { - throw new SerializerException(message: null, ex); - } + 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, context) + : WriteObject(stream, obj, context) + }; } /// /// Write any object /// - /// Stream type /// Stream /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyAsync( + this Stream stream, + object obj, + ISerializationContext context + ) + => WriteAnyAsync(stream, obj, objType: null, writeObject: true, context); + + /// + /// Write any object + /// + /// Stream + /// 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")] - public static T WriteAnyNullable(this T stream, object? obj) where T : Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteAnyAsync( + this Stream stream, + object obj, + ObjectTypes? objType, + bool writeObject, + ISerializationContext context + ) { - try - { - 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; - } - catch (SerializerException) + if (objType == null) { - throw; + (Type type, objType, bool writeType, writeObject) = obj.GetObjectSerializerInfo(); + await WriteAsync(stream, (byte)objType, context).DynamicContext(); + if (writeType) await WriteAsync(stream, type, context).DynamicContext(); } - catch (Exception ex) + if (!writeObject) return stream; + return objType.Value switch { - throw new SerializerException(message: null, ex); - } + 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, context).DynamicContext() + : await WriteObjectAsync(stream, obj, context).DynamicContext() + }; } /// @@ -125,31 +119,145 @@ public static T WriteAnyNullable(this T stream, object? obj) where T : Stream /// /// Stream /// Object - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAnyNullableAsync(this Stream stream, object? obj, CancellationToken cancellationToken = default) - { - try - { - 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(); - } - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyAsync( + this Task stream, + object obj, + ISerializationContext context + ) + => AsyncHelper.FluentAsync(stream, obj, context, 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) + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyAsync( + this Task stream, + object obj, + ObjectTypes? objType, + bool writeObject, + ISerializationContext context + ) + => 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, ISerializationContext context) + => obj == null ? Write(stream, (byte)ObjectTypes.Null, context) : WriteAny(stream, obj, context); + + /// + /// Write any object + /// + /// Stream + /// 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, ISerializationContext context) + => obj == null ? Write(stream, (byte)ObjectTypes.Null, context) : WriteAny(stream, obj, objType, writeObject, context); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteAnyNullableAsync( + this Stream stream, + object? obj, + ISerializationContext context + ) + => obj == null + ? await WriteAsync(stream, (byte)ObjectTypes.Null, context).DynamicContext() + : await WriteAnyAsync(stream, obj, context).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) + /// Context + /// 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, + ISerializationContext context + ) + => obj == null + ? await WriteAsync(stream, (byte)ObjectTypes.Null, context).DynamicContext() + : await WriteAnyAsync(stream, obj, objType, writeObject, context).DynamicContext(); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyNullableAsync( + this Task stream, + object? obj, + ISerializationContext context + ) + => AsyncHelper.FluentAsync(stream, obj, context, 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) + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAnyNullableAsync( + this Task stream, + object? obj, + ObjectTypes? objType, + bool writeObject, + ISerializationContext context + ) + => 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 cb1a4c9..2a639e1 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 @@ -9,142 +10,89 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write + /// Context /// 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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteArray(this Stream stream, Array value, ISerializationContext context) + => SerializerException.Wrap(() => { - WriteNumber(stream, value.Length); - if (value.Length == 0) return stream; - foreach (tElement element in value) WriteObject(stream, element); - return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + WriteNumber(stream, value.Length, context); + return value.Length == 0 ? stream : WriteFixedArray(stream, value, context); + }); /// /// Write /// - /// Element type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteArrayAsync(this Stream stream, Array value, ISerializationContext context) + => SerializerException.WrapAsync(async () => { - 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); - } - } + await WriteNumberAsync(stream, value.Length, context).DynamicContext(); + return value.Length == 0 ? stream : await WriteFixedArrayAsync(stream, value, context).DynamicContext(); + }); /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteArrayAsync(this Task stream, Array value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteArrayAsync); /// /// Write /// - /// Element type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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(); - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteArrayNullable(this Stream stream, Array? value, ISerializationContext context) + => WriteNullableCount(context, value?.Length, () => WriteFixedArray(stream, value!, context)); /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteFixedArray(this tStream stream, Span value) where tStream : Stream - { - try - { - foreach (tElement element in value) - WriteObject(stream, element); - return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteArrayNullableAsync(this Stream stream, Array? value, ISerializationContext context) + => WriteNullableCountAsync(context, value?.Length, () => WriteFixedArrayAsync(stream, value!, context)); /// /// Write /// - /// Element type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 aec5cd0..7ce4ef2 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; @@ -10,16 +11,19 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, bool value) where T : Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 { - using RentedArray poolData = new(1); - poolData[0] = (byte)(value ? 1 : 0); - stream.Write(poolData.Span); + stream.WriteByte((byte)(value ? 1 : 0)); return stream; } @@ -28,62 +32,90 @@ public static T Write(this T stream, bool value) where T : Stream /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, bool value, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteAsync(this Stream stream, bool value, ISerializationContext context) { - using RentedArray poolData = new(1, clean: false); - poolData[0] = (byte)(value ? 1 : 0); - await stream.WriteAsync(poolData.Memory, cancellationToken).DynamicContext(); + stream.WriteByte((byte)(value ? 1 : 0)); + return Task.FromResult(stream); } /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteNullable(this T stream, bool? value) where T : Stream - { - Write(stream, value != null); - if (value != null) Write(stream, value.Value); - return stream; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, bool value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNullableAsync(this Stream stream, bool? value, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 { - 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.True; + } + else + { + type = ObjectTypes.False; + } + stream.WriteByte((byte)type); + return stream; } /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, sbyte value) where T : Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteNullableAsync(this Stream stream, bool? value, ISerializationContext context) { - try + ObjectTypes type; + if (value == null) { - stream.Write((byte)value); - return stream; + type = ObjectTypes.Null; } - catch (Exception ex) + else if (value.Value) { - throw new SerializerException(message: null, ex); + type = ObjectTypes.True; } + else + { + type = ObjectTypes.False; + } + stream.WriteByte((byte)type); + return Task.FromResult(stream); } /// @@ -91,904 +123,920 @@ public static T Write(this T stream, sbyte value) where T : Stream /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, bool? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Stream stream, sbyte value, ISerializationContext context) + => WriteAsync(stream, (byte)value, context); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, byte value) where T : Stream - { - try - { - stream.WriteByte(value); - return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, sbyte value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token -#pragma warning disable IDE0060 // Remove unused parameter - [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteAsync(this Stream stream, byte value, CancellationToken cancellationToken = default) -#pragma warning restore IDE0060 - { - await Task.Yield(); - Write(stream, value); - } + /// Context + /// Stream + 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 type /// Stream /// Value to write + /// Context /// 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 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, sbyte? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T Write(this T stream, short value) where T : Stream - { - try +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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(() => { - using RentedArray buffer = new(sizeof(short), StreamSerializer.BufferPool, clean: false); - stream.Write(value.GetBytes(buffer.Span)); + stream.WriteByte(value); return stream; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } - } + }); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteAsync(this Stream stream, byte value, ISerializationContext context) + => SerializerException.Wrap(() => { - throw new SerializerException(message: null, ex); - } - } + stream.WriteByte(value); + return Task.FromResult(stream); + }); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, byte value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// /// 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(); - } + /// Context + /// Stream + 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 + /// Context + /// Stream + 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 type /// Stream /// Value to write + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, byte? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, short value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context + /// Stream + 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 + /// Context + /// Stream + 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 + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, short? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(ushort), value, ushort.MinValue, ushort.MaxValue, () => Write(stream, value!.Value, context)); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context + /// Stream + 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 + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, ushort? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(int), value, int.MinValue, int.MaxValue, () => Write(stream, value!.Value, context)); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + 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 type /// Stream /// Value to write + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, int? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, uint value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context + /// Stream + 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 + /// Context + /// Stream + 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 + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, uint? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, long value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context + /// Stream + 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 + /// Context + /// Stream + 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 + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, long? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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, ISerializationContext context) + => WriteNullableNumeric(context, sizeof(ulong), value, ulong.MinValue, ulong.MaxValue, () => Write(stream, value!.Value, context)); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + 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 type /// Stream /// Value to write + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, ulong? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, float value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context + /// Stream + 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 + /// Context + /// Stream + 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 + /// Context /// 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); - } - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, float? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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); - } - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 type /// Stream /// Value to write + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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")] - 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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, double value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// - /// Stream type - /// Number type /// Stream /// Value to write + /// Context /// Stream - public static tStream WriteNumber(this tStream stream, tNumber value) - where tStream : Stream - where tNumber : struct, IConvertible - => WriteNumberInt(stream, value, type: null); + 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 type /// Stream /// Value to write - /// Number type + /// Context /// 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; - } - return stream; - } + 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 /// - /// 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); + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Task stream, double? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNullableAsync); /// /// Write /// - /// Number type /// Stream /// Value to write - /// Number type - /// Cancellation token - private static async Task WriteNumberIntAsync(Stream stream, object value, NumberTypes? type, 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; - } - } + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif +#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 + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteAsync(this Stream stream, decimal value, ISerializationContext context) + => WriteSerializedDataAsync(context, value.GetBytes(StreamSerializer.BufferPool.Rent(sizeof(decimal))), sizeof(decimal)); /// /// Write /// - /// Stream type - /// Number type /// Stream /// Value to write + /// Context /// 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); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteAsync(this Task stream, decimal value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteAsync); /// /// Write /// - /// Number type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream + 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 + /// Context + /// Stream + 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 + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteNumberNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 + /// Context + /// Type size in bytes + /// Value + /// Minimum + /// 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(ISerializationContext context, int size, T? value, T min, T max, NullableNumericWriter_Delegate action) 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.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; + 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 context.Stream; } + + /// + /// Write a nullable numeric value + /// + /// Numeric type + /// Context + /// Type size in bytes + /// Value + /// Minimum + /// 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 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.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; + 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 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 e25b272..e281b14 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 @@ -9,32 +10,40 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Just a method adapter")] - public static T WriteBytes(this T stream, Span value) where T : Stream => WriteBytes(stream, (ReadOnlySpan)value); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteBytes(this Stream stream, Span value, ISerializationContext context) => WriteBytes(stream, (ReadOnlySpan)value, context); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteBytes(this T stream, ReadOnlySpan value) where T : Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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; } + catch (SerializerException) + { + throw; + } catch (Exception ex) { - throw new SerializerException(message: null, ex); + throw SerializerException.From(ex); } } @@ -43,57 +52,98 @@ public static T WriteBytes(this T stream, ReadOnlySpan value) where T : /// /// 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, ISerializationContext context) + => WriteBytesAsync(stream, (ReadOnlyMemory)value, context); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream [TargetedPatchingOptOut("Just a method adapter")] - public static Task WriteBytesAsync(this Stream stream, Memory value, CancellationToken cancellationToken = default) - => WriteBytesAsync(stream, (ReadOnlyMemory)value, cancellationToken); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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")] - public static async Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, CancellationToken cancellationToken = default) - { - try - { - await WriteNumberAsync(stream, value.Length, cancellationToken).DynamicContext(); - if (value.Length > 0) await stream.WriteAsync(value, cancellationToken).DynamicContext(); - } - catch (Exception ex) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteBytesAsync(this Stream stream, ReadOnlyMemory value, ISerializationContext context) + => SerializerException.WrapAsync(async () => { - throw new SerializerException(message: null, ex); - } - } + await WriteNumberAsync(stream, value.Length, context).DynamicContext(); + if (value.Length > 0) await stream.WriteAsync(value, context.Cancellation).DynamicContext(); + return stream; + }); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteBytesAsync(this Task stream, ReadOnlyMemory value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteBytesAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [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(); - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteBytesNullableAsync(this Stream stream, byte[]? value, ISerializationContext context) + => WriteNullableCountAsync( + context, + value?.Length, + () => SerializerException.WrapAsync(() => stream.WriteAsync(value, context.Cancellation).AsTask()) + ); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 41fe79d..1b62c7b 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Dictionary.cs @@ -1,4 +1,8 @@ -using System.Runtime; +using System.Buffers; +using System.Collections; +using System.Data; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -9,103 +13,235 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Key type - /// Value type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteDict(this tStream stream, Dictionary value) - where tStream : Stream - where tKey : notnull +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteDict(this Stream stream, IDictionary value, ISerializationContext context) { - try - { - WriteNumber(stream, value.Count); - if (value.Count == 0) return stream; - foreach (KeyValuePair kvp in value) - { - WriteObject(stream, kvp.Key); - WriteObject(stream, kvp.Value); - } - return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } + WriteNumber(stream, value.Count, context); + if (value.Count == 0) return stream; + WriteDictInt(stream, value, context); + return stream; } /// /// Write /// - /// Key type - /// Value type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteDictAsync(this Stream stream, Dictionary value, CancellationToken cancellationToken = default) - where tKey : notnull +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteDictAsync(this Stream stream, IDictionary value, ISerializationContext context) { - try - { - await WriteNumberAsync(stream, value.Count, cancellationToken).DynamicContext(); - if (value.Count == 0) return; - foreach (KeyValuePair kvp in value) - { - await WriteObjectAsync(stream, kvp.Key, cancellationToken).DynamicContext(); - await WriteObjectAsync(stream, kvp.Value, cancellationToken).DynamicContext(); - } - } - catch (SerializerException) + await WriteNumberAsync(stream, value.Count, context).DynamicContext(); + if (value.Count == 0) return stream; + await WriteDictIntAsync(stream, value, context).DynamicContext(); + return stream; + } + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteDictAsync(this Task stream, IDictionary value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteDictAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteDictNullable(this Stream stream, IDictionary? value, ISerializationContext context) + => WriteNullableCount(context, value?.Count, () => { - throw; - } - catch (Exception ex) + if (value!.Count == 0) return; + WriteDictInt(stream, value, context); + }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteDictNullableAsync(this Stream stream, IDictionary? value, ISerializationContext context) + => WriteNullableCountAsync(context, value?.Count, async () => { - throw new SerializerException(message: null, ex); - } - } + if (value!.Count == 0) return; + await WriteDictIntAsync(stream, value, context).DynamicContext(); + }); /// /// Write /// - /// Stream type - /// Key type - /// Value type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteDictNullable(this tStream stream, Dictionary? value) - where tStream : Stream - where tKey : notnull + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteDictNullableAsync(this Task stream, IDictionary? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteDictNullableAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void WriteDictInt(Stream stream, IDictionary value, ISerializationContext context) { - Write(stream, value != null); - if (value != null) WriteDict(stream, value); - return stream; + using ContextRecursion cr = new(context); + Type valueType = value.GetType(), + keyType = valueType.GenericTypeArguments[0], + 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; + object[] keys = value.Keys.Cast().ToArray(); + for (int i = 0, len = value.Count; i < len; i++) + { + if (keyContext.ItemSerializer == SerializerTypes.Any) + { + 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 + { + WriteItem(keyContext, keys[i]); + } + if (valueContext.ItemSerializer == SerializerTypes.Any) + { + item = value[keys[i]]; + if (item == null) + { + Write(stream, (byte)ObjectTypes.Null, context); + continue; + } + if (WriteAnyItemHeader(valueContext, item, item.GetType())) continue; + if (valueContext.WriteObject) + if (valueContext.ItemSerializer == SerializerTypes.Serializer) + { + WriteItem(valueContext, item); + } + else + { + WriteAny(context.Stream, item, valueContext.ObjectType, valueContext.WriteObject, context); + } + } + else + { + WriteItem(valueContext, value[keys[i]]!); + } + } } /// /// 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 + /// Context + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task WriteDictIntAsync(Stream stream, IDictionary value, ISerializationContext context) { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteDictAsync(stream, value, cancellationToken).DynamicContext(); + using ContextRecursion cr = new(context); + Type valueType = value.GetType(), + keyType = valueType.GenericTypeArguments[0], + 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; + object[] keys = value.Keys.Cast().ToArray(); + for (int i = 0, len = value.Count; i < len; i++) + { + if (keyContext.ItemSerializer == SerializerTypes.Any) + { + 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 + { + await WriteItemAsync(keyContext, keys[i]).DynamicContext(); + } + if (valueContext.ItemSerializer == SerializerTypes.Any) + { + item = value[keys[i]]; + if (item == null) + { + await WriteAsync(stream, (byte)ObjectTypes.Null, context).DynamicContext(); + continue; + } + if (await WriteAnyItemHeaderAsync(valueContext, item, item.GetType()).DynamicContext()) continue; + if (valueContext.WriteObject) + if (valueContext.ItemSerializer == SerializerTypes.Serializer) + { + await WriteItemAsync(valueContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(context.Stream, item, valueContext.ObjectType, valueContext.WriteObject, context).DynamicContext(); + } + } + 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 f53a439..4812c84 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 @@ -9,27 +10,38 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Enumeration type + /// Enumeration type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteEnum(this tStream stream, tEnum value) - where tStream : Stream - where tEnum : struct, Enum +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteEnum(this Stream stream, T value, ISerializationContext context) where T : struct, Enum { - try - { - 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) - { - throw new SerializerException(message: null, ex); - } + if (ObjectHelper.AreEqual(value, default(T))) return Write(stream, (byte)NumberTypes.Default, context); + return WriteNumber(stream, Convert.ChangeType(value, typeof(T).GetEnumUnderlyingType()), context); + } + + /// + /// Write + /// + /// 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, 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, context); + return WriteNumber(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), context); } /// @@ -38,61 +50,161 @@ public static tStream WriteEnum(this tStream stream, tEnum value /// Enumeration type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteEnumAsync(this Stream stream, T value, CancellationToken cancellationToken = default) - where T : struct, Enum +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteEnumAsync(this Stream stream, T value, ISerializationContext context) where T : struct, Enum { - try + if (ObjectHelper.AreEqual(value, default(T))) { - 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(); + await WriteAsync(stream, (byte)NumberTypes.Default, context).DynamicContext(); } - catch (Exception ex) + else { - throw new SerializerException(message: null, ex); + await WriteNumberAsync(stream, Convert.ChangeType(value, value.GetType().GetEnumUnderlyingType()), context).DynamicContext(); } + return stream; } /// /// Write /// - /// Stream type - /// Enumeration type + /// Enumeration type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteEnumNullable(this tStream stream, tEnum? value) - where tStream : Stream - where tEnum : struct, Enum - => value == null ? Write(stream, (byte)NumberTypes.Null) : WriteEnum(stream, value.Value); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteEnumAsync(this Task stream, T value, ISerializationContext context) where T : struct, Enum + => AsyncHelper.FluentAsync(stream, value, context, WriteEnumAsync); /// /// Write /// - /// Enumeration type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteEnumNullableAsync(this Stream stream, T? value, CancellationToken cancellationToken = default) - where T : struct, Enum +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteEnumAsync(this Stream stream, object value, ISerializationContext context) { - if (value == null) + 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.Null, cancellationToken).DynamicContext(); + await WriteAsync(stream, (byte)NumberTypes.Default, context).DynamicContext(); } else { - await WriteEnumAsync(stream, value.Value, cancellationToken).DynamicContext(); + await WriteNumberAsync(stream, Convert.ChangeType(value, enumType.GetEnumUnderlyingType()), context).DynamicContext(); } + return stream; } + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteEnumAsync(this Task stream, object value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteEnumAsync); + + /// + /// Write + /// + /// 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, 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, ISerializationContext context) + => value == null ? Write(stream, (byte)NumberTypes.IsNull, context) : WriteEnum(stream, value, context); + + /// + /// Write + /// + /// Enumeration type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteEnumNullableAsync(this Stream stream, T? value, ISerializationContext context) where T : struct, Enum + => value == null + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteEnumAsync(stream, value.Value, context); + + /// + /// Write + /// + /// Enumeration type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteEnumNullableAsync(this Stream stream, object? value, ISerializationContext context) + => value == null + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteEnumAsync(stream, value, context); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 new file mode 100644 index 0000000..7d7668e --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.FixedArray.cs @@ -0,0 +1,292 @@ +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 + /// Context + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Stream WriteFixedArray(this Stream stream, Span value, ISerializationContext context) + => WriteFixedArray(stream, (ReadOnlySpan)value, context); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Context + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteFixedArray(this Stream stream, ReadOnlySpan value, ISerializationContext context) + { + try + { + using ContextRecursion cr = new(context); + Type elementType = typeof(T); + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, _) = elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) + { + T? item; + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) + { + 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) + { + WriteItem(itemContext, item); + } + else + { + WriteAny(stream, item, itemContext.ObjectType, itemContext.WriteObject, context); + } + } + } + else + { + for (int i = 0, len = value.Length; i < len; WriteItem(itemContext, value[i]!), i++) ; + } + return stream; + } + catch (SerializerException) + { + throw; + } + catch (Exception ex) + { + throw SerializerException.From(ex); + } + } + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteFixedArray(this Stream stream, Array value, ISerializationContext context) + => SerializerException.Wrap(() => + { + using ContextRecursion cr = new(context); + Type elementType = value.GetType().GetElementType()!; + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, _) = elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) + { + object? item; + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) + { + 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) + { + WriteItem(itemContext, item); + } + else + { + WriteAny(stream, item, itemContext.ObjectType, itemContext.WriteObject, context); + } + } + } + else + { + for (int i = 0, len = value.Length; i < len; WriteItem(itemContext, value.GetValue(i)!), i++) ; + } + return stream; + }); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Stream stream, Memory value, ISerializationContext context) + => WriteFixedArrayAsync(stream, (ReadOnlyMemory)value, context); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Just a method adapter")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync(this Task stream, Memory value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteFixedArrayAsync); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Context + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteFixedArrayAsync(this Stream stream, ReadOnlyMemory value, ISerializationContext context) + => SerializerException.WrapAsync(async () => + { + using ContextRecursion cr = new(context); + Type elementType = typeof(T); + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, itemContext.ItemAsyncSerializer) = + elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) + { + T? item; + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) + { + 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 WriteItemAsync(itemContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); + } + } + } + else + { + for (int i = 0, len = value.Length; i < len; await WriteItemAsync(itemContext, value.Span[i]!).DynamicContext(), i++) ; + } + return stream; + }); + + /// + /// Write + /// + /// Element type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteFixedArrayAsync( + this Task stream, + ReadOnlyMemory value, + ISerializationContext context + ) + => AsyncHelper.FluentAsync(stream, value, context, WriteFixedArrayAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteFixedArrayAsync(this Stream stream, Array value, ISerializationContext context) + => SerializerException.WrapAsync(async () => + { + using ContextRecursion cr = new(context); + Type elementType = value.GetType().GetElementType()!; + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, itemContext.ItemAsyncSerializer) = + elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) + { + object? item; + Type itemType; + for (int i = 0, len = value.Length; i < len; i++) + { + 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 WriteItemAsync(itemContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); + } + } + } + else + { + for (int i = 0, len = value.Length; i < len; await WriteItemAsync(itemContext, value.GetValue(i)!).DynamicContext(), i++) ; + } + return stream; + }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 new file mode 100644 index 0000000..517da26 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Items.cs @@ -0,0 +1,346 @@ +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 + /// + /// Context + /// Item + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteItem(ItemSerializerContext context, dynamic item) + { + ISerializationContext sc = context.Context; + if (!context.Nullable) + { + switch (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return WriteSerialized(sc.Stream, (IStreamSerializer)item, sc); + case SerializerTypes.Serializer: + { + SerializerException.Wrap(() => + ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous serializer") + ); + object obj = item; + SerializerException.Wrap(() => context.ItemSyncSerializer!(sc, obj)); + return sc.Stream; + } + 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 (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return WriteSerializedNullable(sc.Stream, (IStreamSerializer?)item, sc); + case SerializerTypes.Serializer: + { + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous serializer")); + object? obj = item; + return WriteIfNotNull(sc.Stream, obj, () => context.ItemSyncSerializer!(sc, obj), sc); + } + 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 + /// + /// Context + /// Item + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteItemAsync(ItemSerializerContext context, dynamic item) + { + ISerializationContext sc = context.Context; + if (!context.Nullable) + { + switch (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return await WriteSerializedAsync(sc.Stream, (IStreamSerializer)item, sc).DynamicContext(); + case SerializerTypes.Serializer: + { + object obj = item; + if (context.ItemAsyncSerializer == null) + { + await Task.Yield(); + SerializerException.Wrap(() => + ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous erializer") + ); + SerializerException.Wrap(() => context.ItemSyncSerializer!(sc, obj)); + } + else + { + await SerializerException.WrapAsync(() => context.ItemAsyncSerializer(sc, obj)).DynamicContext(); + } + return sc.Stream; + } + 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 (context.ItemSerializer) + { + case SerializerTypes.StreamSerializer: return await WriteSerializedNullableAsync(sc.Stream, (IStreamSerializer?)item, sc).DynamicContext(); + case SerializerTypes.Serializer: + { + object? obj = item!; + if (context.ItemAsyncSerializer == null) + { + SerializerException.Wrap(() => + ArgumentValidationHelper.EnsureValidArgument(nameof(context), context.ItemSyncSerializer, () => "Missing synchronous serializer") + ); + Task action() + { + context.ItemSyncSerializer!(sc, obj); + return Task.CompletedTask; + } + return await WriteIfNotNullAsync(sc.Stream, obj, action, sc).DynamicContext(); + } + else + { + return await WriteIfNotNullAsync(sc.Stream, obj, () => context.ItemAsyncSerializer!(sc, obj), sc).DynamicContext(); + } + } + 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 + /// + /// Item type + /// Context + /// Item + /// Item type + /// All information written? + public static bool WriteAnyItemHeader(ItemSerializerContext context, T item, Type itemType) + { + ISerializationContext sc = context.Context; + // Use the object cache + var info = item!.GetObjectSerializerInfo(); + if (info.WriteObject) + { + int idx = context.GetObjectCacheIndex(item); + if (idx != -1) + { + 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 + { + context.AddObject(item); + } + } + // Write the type information + if (itemType == context.LastItemType) + { + // Use the last object type + Write(sc.Stream, (byte)ObjectTypes.LastItemType, sc); + } + else + { + // Write object type details + context.ObjectType = info.ObjectType; + context.WriteObject = info.WriteObject; + (context.ItemSerializer, context.ItemSyncSerializer, _) = itemType.GetItemSerializerInfo(info.ObjectType, isAsync: false); + if (info.WriteType) + { + //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 + Write(sc.Stream, (byte)(context.ObjectType | ObjectTypes.BasicTypeInfo), sc); + Write(sc.Stream, (byte)ti.ObjectType, sc); + } + else + { + int idx = context.GetTypeCacheIndex(itemType); + if (idx != -1) + { + // Use the cached type + context.ObjectType |= ObjectTypes.Cached; + Write(sc.Stream, (byte)context.ObjectType, sc); + Write(sc.Stream, (byte)idx, sc); + } + else + { + // Update the cache + context.AddType(itemType); + // Write the type informations + Write(sc.Stream, (byte)context.ObjectType, sc); + Write(sc.Stream, itemType, sc); + } + } + } + else + { + // Write the type informations + Write(sc.Stream, (byte)context.ObjectType, sc); + context.ItemSerializer = SerializerTypes.Any; + } + context.LastItemType = context.WriteObject ? itemType : null; + } + return !context.WriteObject; + } + + /// + /// Write an item header, if the used item type isn't specified + /// + /// Item type + /// Context + /// Item + /// Item type + public static async Task WriteAnyItemHeaderAsync(ItemSerializerContext context, T item, Type itemType) + { + ISerializationContext sc = context.Context; + // Use the object cache + var info = item!.GetObjectSerializerInfo(); + if (info.WriteObject) + { + int idx = context.GetObjectCacheIndex(item); + if (idx != -1) + { + 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 + { + context.AddObject(item); + } + } + // Write the type information + if (itemType == context.LastItemType) + { + // Use the last object type + await WriteAsync(sc.Stream, (byte)ObjectTypes.LastItemType, sc).DynamicContext(); + } + else + { + // Write object type details + 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 + SerializedTypeInfo ti = itemType; + if (ti.IsBasicType) + { + // Don't use the type cache + await WriteAsync(sc.Stream, (byte)(context.ObjectType | ObjectTypes.BasicTypeInfo), sc).DynamicContext(); + await WriteAsync(sc.Stream, (byte)ti.ObjectType, sc).DynamicContext(); + } + else + { + int idx = context.GetTypeCacheIndex(itemType); + if (idx != -1) + { + // Use the cached type + 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 + context.AddType(itemType); + // Write the type informations + await WriteAsync(sc.Stream, (byte)context.ObjectType, sc).DynamicContext(); + await WriteAsync(sc.Stream, itemType, sc).DynamicContext(); + } + } + } + else + { + // Write the type informations + await WriteAsync(sc.Stream, (byte)context.ObjectType, sc).DynamicContext(); + context.ItemSerializer = SerializerTypes.Any; + } + context.LastItemType = context.WriteObject ? itemType : null; + } + return !context.WriteObject; + } + } +} diff --git a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs index 83afdd0..4dc105a 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.List.cs @@ -1,4 +1,6 @@ -using System.Runtime; +using System.Collections; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -9,91 +11,222 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteList(this tStream stream, List value) where tStream : Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteList(this Stream stream, IList value, ISerializationContext context) { - if (typeof(tElement) == typeof(byte)) return WriteBytes(stream, (value as byte[])!); - try - { - WriteNumber(stream, value.Count); - if (value.Count == 0) return stream; - foreach (tElement element in value) WriteObject(stream, element); - return stream; - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } + 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, context); + if (value.Count == 0) return stream; + WriteListInt(stream, value, context); + return stream; } /// /// Write /// - /// Element type /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteListAsync(this Stream stream, List value, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteListAsync(this Stream stream, IList value, ISerializationContext context) { - if (typeof(T) == typeof(byte)) - { - await WriteBytesAsync(stream, (value as byte[])!, cancellationToken).DynamicContext(); - return; - } - try - { - 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) + 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, context).DynamicContext(); + if (value.Count == 0) return stream; + await WriteListIntAsync(stream, value, context).DynamicContext(); + return stream; + } + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteListAsync(this Task stream, IList value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteListAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteListNullable(this Stream stream, IList? value, ISerializationContext context) + => WriteNullableCount(context, value?.Count, () => { - throw; - } - catch (Exception ex) + 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; + WriteListInt(stream, value, context); + }); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteListNullableAsync(this Stream stream, IList? value, ISerializationContext context) + => WriteNullableCountAsync(context, value?.Count, async () => { - throw new SerializerException(message: null, ex); - } - } + 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; + await WriteListIntAsync(stream, value, context).DynamicContext(); + }); /// /// Write /// - /// Stream type - /// Element type /// Stream /// Value to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteListNullable(this tStream stream, List? value) where tStream : Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteListNullableAsync(this Task stream, IList? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteListNullableAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void WriteListInt(Stream stream, IList value, ISerializationContext context) { - Write(stream, value != null); - if (value != null) WriteList(stream, value); - return stream; + using ContextRecursion cr = new(context); + Type valueType = value.GetType(), + elementType = valueType.IsGenericType && valueType.GenericTypeArguments.Length == 1 + ? valueType.GenericTypeArguments[0] + : typeof(object); + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, _) = elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: false); + if (itemContext.ItemSerializer == SerializerTypes.Any) + { + object? item; + Type itemType; + for (int i = 0, len = value.Count; i < len; i++) + { + 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) + { + WriteItem(itemContext, item); + } + else + { + WriteAny(stream, item, itemContext.ObjectType, itemContext.WriteObject, context); + } + } + } + else + { + for (int i = 0, len = value.Count; i < len; WriteItem(itemContext, value[i]!), i++) ; + } } /// /// 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) + /// Context + /// Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static async Task WriteListIntAsync(Stream stream, IList value, ISerializationContext context) { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteListAsync(stream, value, cancellationToken).DynamicContext(); + using ContextRecursion cr = new(context); + Type valueType = value.GetType(), + elementType = valueType.IsGenericType && valueType.GenericTypeArguments.Length == 1 + ? valueType.GenericTypeArguments[0] + : typeof(object); + using ItemSerializerContext itemContext = new(context); + (itemContext.ItemSerializer, itemContext.ItemSyncSerializer, itemContext.ItemAsyncSerializer) = + elementType.GetItemSerializerInfo(ObjectTypes.Null, isAsync: true); + if (itemContext.ItemSerializer == SerializerTypes.Any) + { + object? item; + Type itemType; + for (int i = 0, len = value.Count; i < len; i++) + { + 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 WriteItemAsync(itemContext, item).DynamicContext(); + } + else + { + await WriteAnyAsync(stream, item, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); + } + } + } + else + { + 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 new file mode 100644 index 0000000..be60b2a --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Number.cs @@ -0,0 +1,287 @@ +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Number + public static partial class StreamExtensions + { + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Context + /// Stream +#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 +#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 + /// + /// Context + /// Value to write + /// Number type + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteNumberInt(ISerializationContext context, object value, NumberTypes? type, bool writeType = true) + => SerializerException.Wrap(() => + { + if (type == null) (_, type) = value.GetNumberAndType(); + 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(); + context.Stream.Write(poolData.Span);// Compatibility with serializer version 2 + break; + case NumberTypes.Short: + Write(context.Stream, value.ConvertType(), context);// Compatibility with serializer version 2 + break; + case NumberTypes.Short | NumberTypes.Unsigned: + Write(context.Stream, value.ConvertType(), context);// Compatibility with serializer version 2 + break; + case NumberTypes.Int: + Write(context.Stream, value.ConvertType(), context); + break; + case NumberTypes.Int | NumberTypes.Unsigned: + Write(context.Stream, value.ConvertType(), context); + break; + case NumberTypes.Long: + Write(context.Stream, value.ConvertType(), context); + break; + case NumberTypes.Long | NumberTypes.Unsigned: + Write(context.Stream, value.ConvertType(), context); + break; + case NumberTypes.Float: + Write(context.Stream, value.ConvertType(), context); + break; + case NumberTypes.Double: + Write(context.Stream, value.ConvertType(), context); + break; + case NumberTypes.Decimal: + Write(context.Stream, value.ConvertType(), context); + break; + } + return context.Stream; + }); + + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Context + /// Stream + public static Task WriteNumberAsync(this Stream stream, T value, ISerializationContext context) where T : struct, IConvertible + => WriteNumberIntAsync(context, value, type: null); + + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 + /// Context + /// Stream + public static Task WriteNumberAsync(this Stream stream, object value, ISerializationContext context) + => WriteNumberIntAsync(context, value, type: null); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNumberAsync(this Task stream, object value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteNumberAsync); + + /// + /// Write + /// + /// Context + /// Value to write + /// Number type + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteNumberIntAsync(ISerializationContext context, object value, NumberTypes? type, bool writeType = true) + => SerializerException.WrapAsync(async () => + { + if (type == null) (_, type) = value.GetNumberAndType(); + 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 context.Stream.WriteAsync(poolData.Memory, context.Cancellation).DynamicContext();// Compatibility with serializer version 2 + break; + case NumberTypes.Short: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext();// Compatibility with serializer version 2 + break; + case NumberTypes.Short | NumberTypes.Unsigned: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext();// Compatibility with serializer version 2 + break; + case NumberTypes.Int: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); + break; + case NumberTypes.Int | NumberTypes.Unsigned: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); + break; + case NumberTypes.Long: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); + break; + case NumberTypes.Long | NumberTypes.Unsigned: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); + break; + case NumberTypes.Float: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); + break; + case NumberTypes.Double: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); + break; + case NumberTypes.Decimal: + await WriteAsync(context.Stream, value.ConvertType(), context).DynamicContext(); + break; + } + return context.Stream; + }); + + /// + /// Write + /// + /// 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, 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, ISerializationContext context) + => value == null ? Write(stream, (byte)NumberTypes.IsNull, context) : WriteNumber(stream, value, context); + + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteNumberNullableAsync(this Stream stream, T? value, ISerializationContext context) + where T : struct, IConvertible + => value == null + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteNumberAsync(stream, value.Value, context); + + /// + /// Write + /// + /// Number type + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNumberNullableAsync(this Task stream, T? value, ISerializationContext context) + where T : struct, IConvertible + => AsyncHelper.FluentAsync(stream, value, context, WriteNumberNullableAsync); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteNumberNullableAsync(this Stream stream, object? value, ISerializationContext context) + => value == null + ? WriteAsync(stream, (byte)NumberTypes.IsNull, context) + : WriteNumberAsync(stream, value, context); + + /// + /// Write + /// + /// Stream + /// Value to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 ceb7ef3..4906040 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.Buffers; using System.Runtime; +using System.Runtime.CompilerServices; using System.Text; using wan24.Core; @@ -11,134 +12,138 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type - /// Object type /// Stream /// Object to write + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static tStream WriteObject(this tStream stream, tObj obj) where tStream : Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteObject(this Stream stream, object obj, ISerializationContext context) { - 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) - { - WriteAnyObjectMethod.MakeGenericMethod(typeof(tStream), typeof(tObj)).InvokeAuto(obj: null, stream, obj); - return stream; - } - try - { - serializer(stream, obj); - } - catch (SerializerException) - { - throw; - } - catch (Exception ex) - { - throw new SerializerException(message: null, ex); - } + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(obj), obj)); + if (obj is IStreamSerializer streamSerializer) + 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(context, obj)); return stream; } /// /// Write /// - /// Object type /// Stream /// Object to write - /// Cancellation token + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteObjectAsync(this Stream stream, T obj, CancellationToken cancellationToken = default) +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteObjectAsync(this Stream stream, object obj, ISerializationContext context) { - if (obj == null) throw new ArgumentNullException(nameof(obj)); + SerializerException.Wrap(() => ArgumentValidationHelper.EnsureValidArgument(nameof(obj), 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) - { - throw new SerializerException(message: null, ex); - } + 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(context, obj).DynamicContext()).DynamicContext(); + return stream; } /// /// Write /// - /// Stream type - /// Object type /// Stream /// Object to write + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteObjectAsync(this Task stream, object obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteObjectAsync); /// /// Write /// - /// Object type /// Stream /// Object to write - /// Cancellation token + /// Context + /// Stream [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(); - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteObjectNullable(this Stream stream, object? obj, ISerializationContext context) + => WriteIfNotNull(stream, obj, () => WriteObject(stream, obj!, context), context); + + /// + /// Write + /// + /// Stream + /// Object to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteObjectNullableAsync(this Stream stream, object? obj, ISerializationContext context) + => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, context), context); + + /// + /// Write + /// + /// Stream + /// Object to write + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteObjectNullableAsync(this Task stream, object? obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteObjectNullableAsync); /// /// Write any object /// - /// Stream type - /// Object type /// Stream /// Object + /// Context /// Stream - public static tStream WriteAnyObject(this tStream stream, tObj obj) - where tStream : Stream - where tObj : class, new() + 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(); - PropertyInfo[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); - StreamSerializerAttribute? attr = type.GetCustomAttribute(), - objAttr; + PropertyInfoExt[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); + StreamSerializerAttribute? attr = type.GetCustomAttributeCached(); bool useChecksum = !(attr?.SkipPropertyNameChecksum ?? false); - WriteNumberNullable(stream, attr?.Version); - WriteNumber(stream, pis.Length); - foreach (PropertyInfo pi in pis) + WriteNumberNullable(stream, attr?.Version, context); + WriteNumber(stream, pis.Length, context); + using ItemSerializerContext itemContext = new(context); + object? item; + foreach (PropertyInfoExt pi in pis) { - 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) + 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) + { + Write(stream, (byte)ObjectTypes.Null, context); + continue; + } + if (WriteAnyItemHeader(itemContext, item!, pi.Property.PropertyType) || !itemContext.WriteObject) continue; + if (itemContext.ItemSerializer == SerializerTypes.Serializer) { - WriteAny(stream, pi.GetValue(obj)!); + WriteItem(itemContext, item!); } else { - WriteAnyNullable(stream, pi.GetValue(obj)); + WriteAny(context.Stream, item!, itemContext.ObjectType, itemContext.WriteObject, context); } } return stream; @@ -147,70 +152,95 @@ public static tStream WriteAnyObject(this tStream stream, tObj ob /// /// 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() + /// Context + /// Stream + public static async Task WriteAnyObjectAsync(this Stream stream, object obj, ISerializationContext context) { - if (obj is IStreamSerializer serializable) - { - await WriteSerializedAsync(stream, serializable, cancellationToken).DynamicContext(); - return; - } + if (obj is IStreamSerializer serializable) return await WriteSerializedAsync(stream, serializable, context).DynamicContext(); + using ContextRecursion cr = new(context); Type type = obj.GetType(); - PropertyInfo[] pis = StreamSerializerAttribute.GetWriteProperties(type).ToArray(); - StreamSerializerAttribute? attr = type.GetCustomAttribute(), - objAttr; + 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 (PropertyInfo pi in pis) + await WriteNumberNullableAsync(stream, attr?.Version, context).DynamicContext(); + await WriteNumberAsync(stream, pis.Length, context).DynamicContext(); + using ItemSerializerContext itemContext = new(context); + object? item; + foreach (PropertyInfoExt pi in pis) { - 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 (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) { - await WriteAnyAsync(stream, pi.GetValue(obj)!, 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 WriteAnyNullableAsync(stream, pi.GetValue(obj), cancellationToken).DynamicContext(); + await WriteAnyAsync(context.Stream, item!, itemContext.ObjectType, itemContext.WriteObject, context).DynamicContext(); } } + return stream; } /// /// Write any object /// - /// Stream type - /// Object type /// Stream /// Object + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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, ISerializationContext context) + => WriteIfNotNull(stream, obj, () => WriteAnyObject(stream, obj!, context), context); /// /// Write any object /// - /// Object type /// Stream /// Object - /// Cancellation token + /// Context + /// Stream [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(); - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteAnyObjectNullableAsync(this Stream stream, object? obj, ISerializationContext context) + => WriteIfNotNullAsync(stream, obj, () => WriteObjectAsync(stream, obj!, context), context); + + /// + /// Write any object + /// + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 8ce07cc..0b764bd 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; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -9,53 +10,286 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Object + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteSerialized(this T stream, IStreamSerializer obj) where T : Stream - { - obj.Serialize(stream); - return stream; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerialized(this Stream stream, IStreamSerializer obj, ISerializationContext context) + => SerializerException.Wrap(() => + { + using ContextRecursion cr = new(context); + obj.Serialize(context); + return stream; + }); /// /// Write /// + /// Object type /// Stream /// Object - /// Cancellation token + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerialized(this Stream stream, T obj, ISerializationContext context) where T : class, IStreamSerializer + => SerializerException.Wrap(() => + { + using ContextRecursion cr = new(context); + obj.Serialize(context); + return stream; + }); + + /// + /// Write + /// + /// 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, ISerializationContext context) where T : struct, IStreamSerializer + => SerializerException.Wrap(() => + { + using ContextRecursion cr = new(context); + obj.Serialize(context); + return stream; + }); + + /// + /// Write + /// + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, ISerializationContext context) + => SerializerException.Wrap(async () => + { + using ContextRecursion cr = new(context); + await obj.SerializeAsync(context).DynamicContext(); + return stream; + }); + + /// + /// Write + /// + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedAsync(this Task stream, IStreamSerializer obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedAsync); + + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedAsync(this Stream stream, T obj, ISerializationContext context) where T : class, IStreamSerializer + => SerializerException.Wrap(async () => + { + using ContextRecursion cr = new(context); + await obj.SerializeAsync(context).DynamicContext(); + return stream; + }); + + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedAsync(this Task stream, T obj, ISerializationContext context) where T : class, IStreamSerializer + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedAsync); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedStructAsync(this Stream stream, T obj, ISerializationContext context) where T : struct, IStreamSerializer + => SerializerException.Wrap(async () => + { + using ContextRecursion cr = new(context); + await obj.SerializeAsync(context).DynamicContext(); + return stream; + }); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Context + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static Task WriteSerializedAsync(this Stream stream, IStreamSerializer obj, CancellationToken cancellationToken = default) - => obj.SerializeAsync(stream, cancellationToken); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedStructAsync(this Task stream, T obj, ISerializationContext context) where T : struct, IStreamSerializer + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedStructAsync); /// /// Write /// - /// Stream type /// Stream /// Object + /// Context /// 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; - } +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerializedNullable(this Stream stream, IStreamSerializer? obj, ISerializationContext context) + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!, context), context); /// /// Write /// + /// Object type /// Stream /// Object - /// Cancellation token + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerializedNullable(this Stream stream, T? obj, ISerializationContext context) where T : class, IStreamSerializer + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!, context), context); + + /// + /// Write + /// + /// 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, ISerializationContext context) where T : struct, IStreamSerializer + => WriteIfNotNull(stream, obj, () => WriteSerialized(stream, obj!.Value, context), context); + + /// + /// Write + /// + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedNullableAsync(this Stream stream, IStreamSerializer? obj, ISerializationContext context) + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, context), context); + + /// + /// Write + /// + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedNullableAsync(this Task stream, IStreamSerializer? obj, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedNullableAsync); + + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedNullableAsync(this Stream stream, T? obj, ISerializationContext context) where T : class, IStreamSerializer + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!, context), context); + + /// + /// Write + /// + /// Object type + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedNullableAsync(this Task stream, T? obj, ISerializationContext context) + where T : class, IStreamSerializer + => AsyncHelper.FluentAsync(stream, obj, context, WriteSerializedNullableAsync); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteSerializedNullableStructAsync(this Stream stream, T? obj, ISerializationContext context) + where T : struct, IStreamSerializer + => WriteIfNotNullAsync(stream, obj, () => WriteSerializedAsync(stream, obj!.Value, context), context); + + /// + /// Write + /// + /// Structure type + /// Stream + /// Object + /// Context + /// Stream [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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializedNullableStructAsync(this Task stream, T? obj, ISerializationContext context) + where T : struct, IStreamSerializer + => 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 c2513d2..7783393 100644 --- a/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Stream.cs @@ -1,5 +1,5 @@ -using System.Buffers; -using System.Runtime; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; namespace wan24.StreamSerializerExtensions @@ -10,118 +10,151 @@ public static partial class StreamExtensions /// /// Write a stream /// - /// Stream type /// Stream /// Source stream - /// Array pool + /// Context /// 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, 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, context); + if (len != 0) + if (source.CanSeek) + { + source.CopyTo(stream, bufferSize: chunkLength ?? Settings.BufferSize); + } + else { - red = stream.Read(buffer.Span); - if (red < 1) + using RentedArrayStruct buffer = new(len: chunkLength ?? Settings.BufferSize, 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(), context); + break; + } + stream.WriteBytes(buffer.Span, context); } - stream.WriteBytes(buffer.Span); } - } - return stream; - } + return stream; + }); /// /// Write a stream /// - /// Stream type /// Stream /// Source stream - /// Array pool + /// Context /// 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 - => source == null ? WriteNumber(stream, long.MinValue) : WriteStream(stream, source, pool, chunkLength); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 - public static async Task WriteStreamAsync( + /// Stream + public static Task WriteStreamAsync( this Stream stream, Stream source, - ArrayPool? pool = null, - int? chunkLength = null, - CancellationToken cancellationToken = default + ISerializationContext context, + int? chunkLength = null ) - { - 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) 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, context).DynamicContext(); + if (len != 0) + if (source.CanSeek) + { + await source.CopyToAsync(stream, bufferSize: chunkLength ?? Settings.BufferSize, context.Cancellation).DynamicContext(); + } + else { - red = await stream.ReadAsync(buffer.Memory, cancellationToken).DynamicContext(); - if (red < 1) + using RentedArrayStruct buffer = new(len: chunkLength ?? Settings.BufferSize, 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, context.Cancellation).DynamicContext(); + if (red < 1) + { + await stream.WriteBytesAsync(Array.Empty(), context).DynamicContext(); + break; + } + await stream.WriteBytesAsync(buffer.Memory, context).DynamicContext(); } - await stream.WriteBytesAsync(buffer.Memory, cancellationToken).DynamicContext(); } - } - } + return stream; + }); /// /// Write a stream /// /// Stream /// Source stream - /// Array pool + /// Context /// Chunk length in bytes - /// Cancellation token /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteStreamNullableAsync( + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStreamAsync( + this Task stream, + Stream source, + ISerializationContext context, + int? chunkLength = null + ) + => AsyncHelper.FluentAsync(stream, source, context, chunkLength, WriteStreamAsync); + + /// + /// Write a stream + /// + /// Stream + /// Source stream + /// Context + /// Chunk length in bytes + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteStreamNullableAsync( this Stream stream, Stream? source, - ArrayPool? pool = null, - int? chunkLength = null, - CancellationToken cancellationToken = default + ISerializationContext context, + int? chunkLength = null ) - { - 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, context) + : WriteStreamAsync(stream, source, context, chunkLength); + + /// + /// Write a stream + /// + /// Stream + /// Source stream + /// Context + /// Chunk length in bytes + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStreamNullableAsync( + this Task stream, + Stream? source, + ISerializationContext context, + int? chunkLength = null + ) + => 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 7b765aa..37d9398 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; @@ -10,211 +11,346 @@ public static partial class StreamExtensions /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream - [TargetedPatchingOptOut("Tiny method")] - public static T WriteString(this T stream, string value) where T : Stream - { - try - { - 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); - } - } +#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 - [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteStringAsync(this Stream stream, string value, CancellationToken cancellationToken = default) - { - try - { - 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); - } - } + /// Context + /// Stream + public static Task WriteStringAsync(this Stream stream, string value, ISerializationContext context) + => WriteStringAsync(context, value, lenShift: 2, (buffer) => value.GetBytes(buffer)); /// /// Write /// - /// Stream type /// Stream /// Value to write + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStringAsync(this Task stream, string value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteStringAsync); /// /// Write /// /// Stream /// Value to write - /// Cancellation token + /// Context + /// Stream +#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 + /// Context + /// Stream + 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 + /// Context + /// Stream [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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStringNullableAsync(this Task stream, string? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteStringNullableAsync); /// /// Write UTF-16 (little endian) string /// - /// Stream type /// Stream /// Value to write + /// Context /// Stream - [TargetedPatchingOptOut("Tiny method")] - public static T WriteString16(this T stream, string value) where T : Stream - { - try - { - 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); - } - } +#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 - [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteString16Async(this Stream stream, string value, CancellationToken cancellationToken = default) - { - try - { - 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); - } - } + /// Context + /// Stream + 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 type /// Stream /// Value to write + /// Context /// 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; - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 +#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, ISerializationContext context) + => WriteNullableStringAsync(context, value, lenShift: 1, (buffer) => value!.GetBytes16(buffer)); + + /// + /// Write UTF-16 (little endian) string + /// + /// Stream + /// Value to write + /// Context + /// Stream [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(); - } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 +#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 type /// Stream /// Value to write + /// Context + /// Stream + 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 + /// Context /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteString32(this T stream, string value) where T : Stream + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 +#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 + /// Context + /// Stream + 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 + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteString32NullableAsync(this Task stream, string? value, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, value, context, WriteString32NullableAsync); + + /// + /// Write a string + /// + /// Context + /// Value + /// Buffer length bit-shifting value + /// Writing action to execute + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [SkipLocalsInit] + private static Stream WriteString(ISerializationContext context, string value, int lenShift, StringWriter_Delegate action) { - try + int len = value == null ? 0 : value.Length << lenShift; + if (len <= Settings.StackAllocBorder) { - using RentedArray buffer = new(value.Length << 2, clean: false); - WriteBytes(stream, buffer.Span[..value.GetBytes32(buffer)]); - return stream; + 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; } - catch (Exception ex) + else { - throw new SerializerException(message: null, ex); + byte[] data = StreamSerializer.BufferPool.Rent(len); + try + { + len = action(data); + return context.TryWriteCachedCountable(value, len) + ? context.Stream + : WriteSerializedData(context, data, len); + } + finally + { + StreamSerializer.BufferPool.Return(data); + } } } /// - /// Write UTF-32 (little endian) string + /// Write a string /// - /// Stream - /// Value to write - /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteString32Async(this Stream stream, string value, CancellationToken cancellationToken = default) + /// Context + /// Value + /// Buffer length bit-shifting value + /// Writing action to execut + /// Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private static async Task WriteStringAsync(ISerializationContext context, string value, int lenShift, StringWriter_Delegate action) { + byte[] data = (value?.Length ?? 0) == 0 ? Array.Empty() : StreamSerializer.BufferPool.Rent(value!.Length << lenShift); try { - using RentedArray buffer = new(value.Length << 2, clean: false); - await WriteBytesAsync(stream, buffer.Memory[..value.GetBytes32(buffer)], cancellationToken).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 (Exception ex) + finally { - throw new SerializerException(message: null, ex); + if (data.Length != 0) StreamSerializer.BufferPool.Return(data); } + return context.Stream; } /// - /// Write UTF-32 (little endian) string + /// Write a nullable string /// - /// Stream type - /// Stream - /// Value to write + /// Context + /// Value + /// Buffer length bit-shifting value + /// Writing action to execute if the string isn't /// Stream - [TargetedPatchingOptOut("Tiny method")] - public static T WriteString32Nullable(this T stream, string? value) where T : Stream +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + [SkipLocalsInit] + private static Stream WriteNullableString(ISerializationContext context, string? value, int lenShift, StringWriter_Delegate action) { - Write(stream, value != null); - if (value != null) WriteString32(stream, value); - return stream; + int len = value == null ? 0 : value.Length << lenShift; + if (len <= Settings.StackAllocBorder) + { + 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 + { + byte[] data = StreamSerializer.BufferPool.Rent(len); + try + { + len = action(data); + return context.TryWriteCachedCountable(value, len) + ? context.Stream + : WriteSerializedData(context, data, len); + } + finally + { + StreamSerializer.BufferPool.Return(data); + } + } } /// - /// Write UTF-32 (little endian) string + /// Write a nullable string /// - /// Stream - /// Value to write - /// Cancellation token - [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteString32NullableAsync(this Stream stream, string? value, CancellationToken cancellationToken = default) + /// Context + /// 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 async Task WriteNullableStringAsync(ISerializationContext context, string? value, int lenShift, StringWriter_Delegate action) { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteString32Async(stream, value, cancellationToken).DynamicContext(); + byte[] data = (value?.Length ?? 0) == 0 ? Array.Empty() : StreamSerializer.BufferPool.Rent(value!.Length << lenShift); + try + { + 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(); + } + finally + { + if (data.Length != 0) StreamSerializer.BufferPool.Return(data); + } + 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 8cdcf76..91390aa 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; @@ -11,98 +12,271 @@ public static partial class StreamExtensions /// /// Write a struct /// - /// Stream type - /// Struct type /// Stream /// Struct + /// Context /// 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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteStruct(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true) + => SerializerException.Wrap(() => { - Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); - } - finally + Type structType = value.GetType(); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); + using RentedArrayStruct 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, context); + }); + + /// + /// Write a struct + /// + /// 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, ISerializationContext context, bool forceLittleEndian = true) where T : struct + => 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 = typeof(T); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); + using RentedArrayStruct 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, context); + }); /// /// Write a struct /// - /// Stream type - /// Struct type /// Stream /// Struct + /// Context /// 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); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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 /// - /// Stream type - /// Struct type + /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token + /// Stream [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 +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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? + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteStructAsync(this Stream stream, object value, ISerializationContext context, bool forceLittleEndian = true) + => SerializerException.WrapAsync(() => { - Marshal.StructureToPtr(value, gch.AddrOfPinnedObject(), fDeleteOld: true); - } - finally + Type structType = value.GetType(); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); + using RentedArrayStruct 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, context); + }); + + /// + /// Write a struct + /// + /// Stream + /// Struct + /// Context + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructAsync(this Task stream, object value, ISerializationContext context, bool forceLittleEndian = true) + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructAsync); + + /// + /// Write a struct + /// + /// Structure type + /// Stream + /// Struct + /// Context + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteStructAsync(this Stream stream, T value, ISerializationContext context, bool forceLittleEndian = true) where T : struct + => SerializerException.WrapAsync(() => { - 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 = typeof(T); + ArgumentValidationHelper.EnsureValidArgument(nameof(value), structType.IsValueType, () => "Not a structure"); + using RentedArrayStruct 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, context); + }); /// /// Write a struct /// - /// Stream type - /// Struct type + /// Structure type /// Stream /// Struct + /// Context /// Force little endian encoding? - /// Cancellation token + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static async Task WriteStructNullableAsync( - this tStream stream, - tStruct? value, - bool forceLittleEndian = true, - CancellationToken cancellationToken = default + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructAsync(this Task stream, T value, ISerializationContext context, bool forceLittleEndian = true) + where T : struct + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructAsync); + + /// + /// Write a struct + /// + /// Stream + /// Struct + /// Context + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteStructNullableAsync( + this Stream stream, + object? value, + ISerializationContext context, + bool forceLittleEndian = true ) - where tStream : Stream - where tStruct : struct - { - await WriteAsync(stream, value != null, cancellationToken).DynamicContext(); - if (value != null) await WriteStructAsync(stream, value.Value, forceLittleEndian, cancellationToken).DynamicContext(); - } + => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!, context, forceLittleEndian), context); + + /// + /// Write a struct + /// + /// Stream + /// Struct + /// Context + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructNullableAsync( + this Task stream, + object? value, + ISerializationContext context, + bool forceLittleEndian = true + ) + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructNullableAsync); + + /// + /// Write a struct + /// + /// Structure type + /// Stream + /// Struct + /// Context + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Task WriteStructNullableAsync( + this Stream stream, + T? value, + ISerializationContext context, + bool forceLittleEndian = true + ) + where T : struct + => WriteIfNotNullAsync(stream, value, () => WriteStructAsync(stream, value!.Value, context, forceLittleEndian), context); + + /// + /// Write a struct + /// + /// Structure type + /// Stream + /// Struct + /// Context + /// Force little endian encoding? + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteStructNullableAsync( + this Task stream, + T? value, + ISerializationContext context, + bool forceLittleEndian = true + ) + where T : struct + => AsyncHelper.FluentAsync(stream, value, context, forceLittleEndian, WriteStructNullableAsync); /// /// Convert the endianess of structure fields @@ -112,14 +286,14 @@ public static async 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(); 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(); @@ -129,7 +303,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.Type.cs b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs new file mode 100644 index 0000000..887a344 --- /dev/null +++ b/src/Stream-Serializer-Extensions/StreamExtensions.Write.Type.cs @@ -0,0 +1,83 @@ +using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; + +namespace wan24.StreamSerializerExtensions +{ + // Type + public static partial class StreamExtensions + { + /// + /// Write + /// + /// Stream + /// Type + /// Context + /// Stream + [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 + /// Context + /// Stream + [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 + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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, ISerializationContext context) + => type == null ? Write(stream, (byte)0, context) : Write(stream, type, context); + + /// + /// Write + /// + /// Stream + /// Type + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteNullableAsync(this Stream stream, Type? type, ISerializationContext context) + => type == null + ? WriteAsync(stream, (byte)0, context) + : WriteAsync(stream, type, context); + + /// + /// Write + /// + /// Stream + /// Type + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + 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 5b51959..1f0a2a2 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.Diagnostics.CodeAnalysis; +using System.Reflection; using System.Runtime; +using System.Runtime.CompilerServices; +using wan24.Core; namespace wan24.StreamSerializerExtensions { @@ -9,125 +12,379 @@ namespace wan24.StreamSerializerExtensions public static partial class StreamExtensions { /// - /// Write object method + /// Constructor /// - public static readonly MethodInfo WriteObjectMethod; + 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)}"); + 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)}"); + } + /// - /// Write object method + /// Write the serializer version /// - public static readonly MethodInfo WriteObjectAsyncMethod; + /// Stream + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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) + { + 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; + } + /// - /// Write any object method + /// Write the serializer version /// - public static readonly MethodInfo WriteAnyObjectMethod; + /// Stream + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#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) + { + 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; + } + /// - /// Write any object method + /// Write the serializer version /// - public static readonly MethodInfo WriteAnyObjectAsyncMethod; + /// Stream + /// Context + /// Stream + [TargetedPatchingOptOut("Tiny method")] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Task WriteSerializerVersionAsync(this Task stream, ISerializationContext context) + => AsyncHelper.FluentAsync(stream, context, WriteSerializerVersionAsync); + /// - /// Write number method + /// Write a boolean flag if an object is not /// - public static readonly MethodInfo WriteNumberMethod; + /// 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, ISerializationContext context) + { + bool isNotNull = obj != null; + Write(stream, isNotNull, context); + return isNotNull; + } + /// - /// Write number method + /// Write a boolean flag if an object is not /// - public static readonly MethodInfo WriteNumberAsyncMethod; + /// Object type + /// Stream + /// Object + /// 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, 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, context).DynamicContext(); + return isNotNull; + } + /// - /// Write enumeration method + /// Write a nullable count /// - public static readonly MethodInfo WriteEnumMethod; + /// Context + /// Count + /// Is not ? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static bool WriteNullableCount(this ISerializationContext context, [NotNullWhen(true)] long? count) + { + WriteNumberNullable(context.Stream, count, context); + return count != null; + } + /// - /// Write enumeration method + /// Write a nullable count /// - public static readonly MethodInfo WriteEnumAsyncMethod; + /// Context + /// Count + /// Is not ? + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + 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(context.Stream, count, context).DynamicContext(); + return count != null; + } + /// - /// Write array method + /// Write a boolean flag if an object is not /// - public static readonly MethodInfo WriteArrayMethod; + /// Object type + /// 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, NullableWriter_Delegate action, ISerializationContext context) + { + if (WriteIfNotNull(stream, obj, context)) action(); + return stream; + } + /// - /// Write array method + /// Write a boolean flag if an object is not /// - public static readonly MethodInfo WriteArrayAsyncMethod; + /// Object type + /// 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 async Task WriteIfNotNullAsync(this Stream stream, T? obj, AsyncNullableWriter_Delegate action, ISerializationContext context) + { + if (await WriteIfNotNullAsync(stream, obj, context).DynamicContext()) + await action().DynamicContext(); + return stream; + } + /// - /// Write list method + /// Write a nullable count /// - public static readonly MethodInfo WriteListMethod; + /// Context + /// 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 ISerializationContext context, long? count, NullableWriter_Delegate action) + { + if (WriteNullableCount(context, count)) action(); + return context.Stream; + } + /// - /// Write list method + /// Write a nullable count /// - public static readonly MethodInfo WriteListAsyncMethod; + /// Context + /// Count + /// Write action to execute, if the count isn't + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteNullableCountAsync(this ISerializationContext context, long? count, AsyncNullableWriter_Delegate action) + { + if (await WriteNullableCountAsync(context, count).DynamicContext()) + await action().DynamicContext(); + return context.Stream; + } + /// - /// Write dictionary method + /// Write serialized Data /// - public static readonly MethodInfo WriteDictMethod; + /// Context + /// Serialized data (will be returned to pool) + /// Data length in bytes + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteSerializedData(this ISerializationContext context, byte[] data, int len) + => SerializerException.Wrap(() => + { + try + { + context.Stream.Write(data.AsSpan(0, len)); + return context.Stream; + } + finally + { + StreamSerializer.BufferPool.Return(data); + } + }); + /// - /// Write dictionary method + /// Write serialized Data /// - public static readonly MethodInfo WriteDictAsyncMethod; + /// 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; + }); /// - /// Constructor + /// Write serialized Data /// - static StreamExtensions() - { - 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)!; - } + /// Context + /// Serialized data (will be returned to pool) + /// Data length in bytes + /// Stream + [TargetedPatchingOptOut("Tiny method")] +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteSerializedDataAsync(this ISerializationContext context, byte[] data, int len) + => await SerializerException.WrapAsync(async () => + { + try + { + await context.Stream.WriteAsync(data.AsMemory(0, len), context.Cancellation).DynamicContext(); + return context.Stream; + } + finally + { + StreamSerializer.BufferPool.Return(data); + } + }); /// - /// Write the serializer version + /// 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; + }); + + /// + /// Write if a condition is /// - /// Stream type /// Stream + /// Condition + /// Write action to execute, if the condition is /// Stream [TargetedPatchingOptOut("Tiny method")] - public static T WriteSerializerVersion(this T stream) where T : Stream => WriteNumber(stream, StreamSerializer.VERSION); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static Stream WriteIf(this Stream stream, bool condition, StreamNullableWiter_Delegate action) + => condition ? action(stream) : stream; /// - /// Write the serializer version + /// Write if a condition is /// /// Stream - /// Cancellation token + /// Condition + /// Write action to execute, if the condition is + /// Stream [TargetedPatchingOptOut("Tiny method")] - public static Task WriteSerializerVersionAsync(this Stream stream, CancellationToken cancellationToken = default) - => WriteNumberAsync(stream, StreamSerializer.VERSION, cancellationToken); +#if !NO_INLINE + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public static async Task WriteIfAsync(this Stream stream, bool condition, AsyncStreamNullableWiter_Delegate 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, 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 a2c6db5..5b01b61 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializer.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializer.cs @@ -1,19 +1,27 @@ using System.Buffers; using System.Collections.Concurrent; +using System.Reflection; +using System.Runtime; +using System.Runtime.CompilerServices; using wan24.Core; +//TODO Test type cache +//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 = 2; - /// /// Initialized? /// @@ -24,283 +32,13 @@ 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; - - /// - /// Constructor - /// - 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((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) => - { - 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(Stream),(s, v) => s.WriteStream((Stream)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) => - { - 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)), - } - ); - 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) => - s.ReadBytes(v, minLen: o?.GetMinLen(0)??0, maxLen: o?.GetMaxLen(int.MaxValue)??int.MaxValue) - ), - 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, - 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, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default) - ) - ), - new KeyValuePair(typeof(Dictionary<,>),(s,t,v,o) => - { - Type[] genericArgs=t.GetGenericArguments(); - return StreamExtensions.ReadDictMethod.MakeGenericMethod(genericArgs[0], genericArgs[1]).InvokeAuto( - obj : null, - s, - 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) - ), - new KeyValuePair(typeof(Stream),(s,t,v,o) => - { - Stream res = o?.Attribute.GetStream(obj:null,property:null,s,v,default)?? new FileStream( - Path.GetTempFileName(), - FileMode.OpenOrCreate, - FileAccess.ReadWrite, - FileShare.None, - bufferSize: Settings.BufferSize, - FileOptions.RandomAccess | FileOptions.DeleteOnClose - ); - try - { - s.ReadStream(res,v,minLen:o?.GetMinLen(0L)??0, maxLen:o?.GetMaxLen(long.MaxValue)??long.MaxValue); - return res; - } - catch - { - res.Dispose(); - throw; - } - }) - }); - 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) => - 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) => - 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, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default), - ct - )! - ), - new KeyValuePair(typeof(List<>),(s,t,v,o,ct) => - (Task)StreamExtensions.ReadListAsyncMethod.MakeGenericMethod(t.GetGenericArguments()[0]).InvokeAuto( - obj: null, - s, - v, - null, - o?.GetMinLen(0)??0, - o?.GetMaxLen(int.MaxValue)??int.MaxValue, - o?.Attribute.GetValueSerializerOptions(property: null, s, v, default), - 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, - 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), - 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)) - }); - 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(char) - }); - } - /// - /// Version number + /// Type instance factories /// - public static int Version { get; set; } = VERSION; + public static readonly ConcurrentDictionary InstanceFactories = new(); /// /// Byte array buffer pool to use @@ -308,101 +46,24 @@ static StreamSerializer() public static ArrayPool BufferPool { get; set; } = ArrayPool.Shared; /// - /// Find a serializer + /// Object 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 ObjectCachePool { get; set; } = ArrayPool.Shared; /// - /// Find a serializer + /// Type 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; - } - - /// - /// 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; - } + public static ArrayPool TypeCachePool { get; set; } = ArrayPool.Shared; /// - /// Find a deserializer + /// Object hash code cache pool to use /// - /// 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; - } + public static ArrayPool HashCodeCachePool { get; set; } = ArrayPool.Shared; /// - /// 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,136 +71,165 @@ 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 + /// Determine if a type is allowed for deserializing per default /// /// Type /// Is allowed? public static bool IsTypeAllowed(Type type) { - // Allow all enum types + // 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 - Type finalType = type; - Type? elementType; - while (finalType.IsArray) - { - elementType = finalType.GetElementType(); - if (elementType == null) break; - finalType = elementType; - } - // Allow registered allowed 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; - } + Type finalType = type.IsArray ? type.GetFinalElementType() : type; + // Allow registered allowed types or serializable types + 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 + if (AllowedTypes.Any(t => t.IsAssignableFrom(finalType))) return true; // Deny return false; } /// - /// Asynchronous stream deserializer + /// Create an instance /// - /// 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) + /// Used constructor + /// Requested type + /// Context + /// Instance + public static object CreateInstance(out ConstructorInfo? usedConstructor, Type type, IDeserializationContext context) { - 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 + usedConstructor = null; + // 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, context); + if ( + InstanceFactories.Keys.FirstOrDefault(t => t.IsAssignableFrom(type)) is Type inheritedType && + InstanceFactories.TryGetValue(inheritedType, out factory) + ) + return factory(type, context); + // Try reflection + if (typeof(IStreamSerializer).IsAssignableFrom(type)) { - return await stream.ReadStreamAsync(res, version, cancellationToken: cancellationToken).DynamicContext(); + 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) + { + // Use the found (possibly) serializer constructor + usedConstructor = ci; + return ci.GetParametersCached().Length == 0 ? ci.InvokeAuto() : ci.InvokeAuto(context); + } } - catch + // 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) + /// + /// Can't be called during bootstrapping + public static void EnableTypeCache() + { + if (TypeCacheEnabled) return; + TypeCacheEnabled = true; + // Ensure the bootstrapper did run + if (!Bootstrap.DidBoot) { - res.Dispose(); - throw; + 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) && + !TypeCache.Types.ContainsKey(t.GetHashCode()) + select t) + TypeCache.Types.TryAdd(type.GetHashCode(), type); } /// /// 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 + /// Context + /// Instance + 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 /// @@ -549,7 +239,7 @@ public static async Task StreamDeserializer(Stream stream, Type type, in /// 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 /// @@ -559,7 +249,7 @@ public static async Task StreamDeserializer(Stream stream, Type type, in /// 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 /// @@ -569,7 +259,7 @@ public static async Task StreamDeserializer(Stream stream, Type type, in /// 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 68c5aff..5b5d6bd 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAdapter.cs @@ -11,31 +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})"); + 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})"); + 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 7e1747f..b3e08cd 100644 --- a/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs +++ b/src/Stream-Serializer-Extensions/StreamSerializerAttribute.cs @@ -6,13 +6,13 @@ 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 { /// /// Structure fields which require endianess conversion /// - protected List? StructureFields = null; + protected List? NumericStructureFields = null; /// /// Constructor (used for a type) @@ -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; @@ -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 /// @@ -161,19 +166,22 @@ 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 /// /// 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 && 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 == null); + if (property == null) ArgumentValidationHelper.EnsureValidArgument(nameof(property), obj == null); if (StreamFactory == null) { if (StreamFactoryType == null) return null; @@ -184,7 +192,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 +200,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 @@ -202,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(PropertyInfo? property, Stream stream, int version, CancellationToken cancellationToken = default) + public virtual ISerializerOptions GetSerializerOptions(PropertyInfoExt? property, ISerializerContext context) { try { @@ -226,15 +232,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 @@ -242,12 +248,12 @@ public virtual ISerializerOptions GetSerializerOptions(PropertyInfo? property, S : $"{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); } } @@ -255,11 +261,9 @@ public virtual ISerializerOptions GetSerializerOptions(PropertyInfo? property, S /// 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(PropertyInfo? 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); @@ -270,7 +274,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 +282,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 @@ -286,18 +290,16 @@ public virtual ISerializerOptions GetKeySerializerOptions(PropertyInfo? property : $"{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(PropertyInfo? 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); @@ -308,7 +310,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 +318,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 @@ -324,7 +326,7 @@ public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfo? proper : $"{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 })!; } /// @@ -335,7 +337,7 @@ public virtual ISerializerOptions GetValueSerializerOptions(PropertyInfo? proper /// 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)) || @@ -355,13 +357,13 @@ 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.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - where !fi.IsStatic && - fi.GetCustomAttribute() is not null - select fi); + 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); } /// @@ -370,7 +372,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()); @@ -380,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 @@ -399,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 @@ -418,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(); @@ -440,28 +415,29 @@ 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(); + //TODO Use a cache + 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 +449,29 @@ 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(); + //TODO Use a cache + 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..ab9efdb 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,18 +30,18 @@ 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 /// - /// 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; - Deserialize(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); } } 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); + } +}