diff --git a/sdk/core/Azure.Core/api/Azure.Core.net461.cs b/sdk/core/Azure.Core/api/Azure.Core.net461.cs index d5377d43fb8d..c055b81deb74 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.net461.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.net461.cs @@ -537,8 +537,8 @@ protected internal virtual void SetHeader(string name, string value) { } public abstract partial class RequestContent : System.IDisposable { protected RequestContent() { } - public static Azure.Core.RequestContent Create(Azure.Core.SequenceWriter writer) { throw null; } public static Azure.Core.RequestContent Create(Azure.Core.Serialization.DynamicData content) { throw null; } + public static Azure.Core.RequestContent Create(Azure.Core.Serialization.IModelSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static Azure.Core.RequestContent Create(System.BinaryData content) { throw null; } public static Azure.Core.RequestContent Create(System.Buffers.ReadOnlySequence bytes) { throw null; } public static Azure.Core.RequestContent Create(byte[] bytes) { throw null; } diff --git a/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs b/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs index 6e7e50d65a08..9fc2f7731266 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.net5.0.cs @@ -537,8 +537,8 @@ protected internal virtual void SetHeader(string name, string value) { } public abstract partial class RequestContent : System.IDisposable { protected RequestContent() { } - public static Azure.Core.RequestContent Create(Azure.Core.SequenceWriter writer) { throw null; } public static Azure.Core.RequestContent Create(Azure.Core.Serialization.DynamicData content) { throw null; } + public static Azure.Core.RequestContent Create(Azure.Core.Serialization.IModelSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static Azure.Core.RequestContent Create(System.BinaryData content) { throw null; } public static Azure.Core.RequestContent Create(System.Buffers.ReadOnlySequence bytes) { throw null; } public static Azure.Core.RequestContent Create(byte[] bytes) { throw null; } diff --git a/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs b/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs index 6e7e50d65a08..9fc2f7731266 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.net6.0.cs @@ -537,8 +537,8 @@ protected internal virtual void SetHeader(string name, string value) { } public abstract partial class RequestContent : System.IDisposable { protected RequestContent() { } - public static Azure.Core.RequestContent Create(Azure.Core.SequenceWriter writer) { throw null; } public static Azure.Core.RequestContent Create(Azure.Core.Serialization.DynamicData content) { throw null; } + public static Azure.Core.RequestContent Create(Azure.Core.Serialization.IModelSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static Azure.Core.RequestContent Create(System.BinaryData content) { throw null; } public static Azure.Core.RequestContent Create(System.Buffers.ReadOnlySequence bytes) { throw null; } public static Azure.Core.RequestContent Create(byte[] bytes) { throw null; } diff --git a/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs b/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs index d5377d43fb8d..c055b81deb74 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.netcoreapp2.1.cs @@ -537,8 +537,8 @@ protected internal virtual void SetHeader(string name, string value) { } public abstract partial class RequestContent : System.IDisposable { protected RequestContent() { } - public static Azure.Core.RequestContent Create(Azure.Core.SequenceWriter writer) { throw null; } public static Azure.Core.RequestContent Create(Azure.Core.Serialization.DynamicData content) { throw null; } + public static Azure.Core.RequestContent Create(Azure.Core.Serialization.IModelSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static Azure.Core.RequestContent Create(System.BinaryData content) { throw null; } public static Azure.Core.RequestContent Create(System.Buffers.ReadOnlySequence bytes) { throw null; } public static Azure.Core.RequestContent Create(byte[] bytes) { throw null; } diff --git a/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs b/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs index d5377d43fb8d..c055b81deb74 100644 --- a/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs +++ b/sdk/core/Azure.Core/api/Azure.Core.netstandard2.0.cs @@ -537,8 +537,8 @@ protected internal virtual void SetHeader(string name, string value) { } public abstract partial class RequestContent : System.IDisposable { protected RequestContent() { } - public static Azure.Core.RequestContent Create(Azure.Core.SequenceWriter writer) { throw null; } public static Azure.Core.RequestContent Create(Azure.Core.Serialization.DynamicData content) { throw null; } + public static Azure.Core.RequestContent Create(Azure.Core.Serialization.IModelSerializable model, Azure.Core.Serialization.ModelSerializerOptions? options = null) { throw null; } public static Azure.Core.RequestContent Create(System.BinaryData content) { throw null; } public static Azure.Core.RequestContent Create(System.Buffers.ReadOnlySequence bytes) { throw null; } public static Azure.Core.RequestContent Create(byte[] bytes) { throw null; } diff --git a/sdk/core/Azure.Core/perf/SerializationBenchmark/JsonSerializationBenchmark.cs b/sdk/core/Azure.Core/perf/SerializationBenchmark/JsonSerializationBenchmark.cs index 0c338fefc2db..cf6410313de1 100644 --- a/sdk/core/Azure.Core/perf/SerializationBenchmark/JsonSerializationBenchmark.cs +++ b/sdk/core/Azure.Core/perf/SerializationBenchmark/JsonSerializationBenchmark.cs @@ -45,7 +45,7 @@ public void SetUp() _model = ModelSerializer.Deserialize(_data); _response = new MockResponse(200); _response.ContentStream = new MemoryStream(Encoding.UTF8.GetBytes(_json)); - _options = new ModelSerializerOptions(ModelSerializerFormat.Wire); + _options = ModelSerializerOptions.DefaultServiceOptions; _content = new SequenceWriter(); using Utf8JsonWriter writer = new Utf8JsonWriter(_content); _model.Serialize(writer, new ModelSerializerOptions()); @@ -89,13 +89,6 @@ public void Serialize_ImplicitCastWithUsage() x.WriteTo(stream, default); } - [Benchmark] - [BenchmarkCategory("Cast")] - public RequestContent CreateRequestContent() - { - return RequestContent.Create(_content); - } - [Benchmark] [BenchmarkCategory("ModelJsonConverter")] public string Serialize_ModelJsonConverter() diff --git a/sdk/core/Azure.Core/perf/SerializationBenchmark/XmlSerializationBenchmark.cs b/sdk/core/Azure.Core/perf/SerializationBenchmark/XmlSerializationBenchmark.cs index 538f933716fd..4573dda6964c 100644 --- a/sdk/core/Azure.Core/perf/SerializationBenchmark/XmlSerializationBenchmark.cs +++ b/sdk/core/Azure.Core/perf/SerializationBenchmark/XmlSerializationBenchmark.cs @@ -42,7 +42,7 @@ public void SetUp() _model = ModelSerializer.Deserialize(_data); _response = new MockResponse(200); _response.ContentStream = new MemoryStream(Encoding.UTF8.GetBytes(_xml)); - _options = new ModelSerializerOptions(ModelSerializerFormat.Wire); + _options = ModelSerializerOptions.DefaultServiceOptions; _element = XElement.Parse(_xml); } diff --git a/sdk/core/Azure.Core/src/RequestContent.cs b/sdk/core/Azure.Core/src/RequestContent.cs index 0cf742a6b04e..f5d578121e6c 100644 --- a/sdk/core/Azure.Core/src/RequestContent.cs +++ b/sdk/core/Azure.Core/src/RequestContent.cs @@ -8,6 +8,7 @@ using System.Text.Json; using System.Threading; using System.Threading.Tasks; +using System.Xml; using Azure.Core.Buffers; using Azure.Core.Serialization; @@ -89,9 +90,10 @@ public abstract class RequestContent : IDisposable /// /// Creates an instance of that wraps a serialized version of an object. /// - /// The that contains the serialized data. + /// The to serialize. + /// The to use. /// An instance of that wraps a serialized version of the object. - public static RequestContent Create(SequenceWriter writer) => new SequenceWriterContent(writer); + public static RequestContent Create(IModelSerializable model, ModelSerializerOptions? options = default) => new ModelSerializableContent(model, options ?? ModelSerializerOptions.DefaultServiceOptions); /// /// Creates an instance of that wraps a serialized version of an object. @@ -227,22 +229,105 @@ public override void Dispose() } } - private sealed class SequenceWriterContent : RequestContent + private sealed class ModelSerializableContent : RequestContent { - private readonly SequenceWriter _writer; + private SequenceWriter? _writer; + private BinaryData? _data; + private byte[]? _bytes; + private readonly IModelSerializable _model; + private readonly ModelSerializerOptions _options; - public SequenceWriterContent(SequenceWriter writer) + public ModelSerializableContent(IModelSerializable model, ModelSerializerOptions options) { - _writer = writer; + _model = model; + _options = options; } - public override void Dispose() => _writer.Dispose(); + public override void Dispose() => _writer?.Dispose(); - public override void WriteTo(Stream stream, CancellationToken cancellation) => _writer.CopyTo(stream, cancellation); + private SequenceWriter GetWriter(IModelJsonSerializable model) + { + if (_writer is null) + { + var writer = new SequenceWriter(); + using var jsonWriter = new Utf8JsonWriter(writer); + model.Serialize(jsonWriter, _options); + jsonWriter.Flush(); + _writer = writer; + } + return _writer; + } + + private BinaryData GetBinaryData() + { + if (_data is null) + { + _data = _model.Serialize(_options); + } + return _data; + } - public override bool TryComputeLength(out long length) => _writer.TryComputeLength(out length); + private byte[] GetBytes() + { + if (_bytes is null) + { + _bytes = GetBinaryData().ToArray(); + } + return _bytes; + } - public override async Task WriteToAsync(Stream stream, CancellationToken cancellation) => await _writer.CopyToAsync(stream, cancellation).ConfigureAwait(false); + public override void WriteTo(Stream stream, CancellationToken cancellation) + { + // a model implements both xml and json we don't know the wire format and must let the model decide. + if (_model is IModelJsonSerializable jsonSerializable && _model is not IModelXmlSerializable) + { + GetWriter(jsonSerializable).CopyTo(stream, cancellation); + } + else if (_model is IModelXmlSerializable xmlSerializable && _model is not IModelJsonSerializable) + { + using XmlWriter writer = XmlWriter.Create(stream); + xmlSerializable.Serialize(writer, _options); + writer.Flush(); + } + else + { + var data = GetBinaryData(); +#if NETFRAMEWORK || NETSTANDARD2_0 + var bytes = GetBytes(); + stream.Write(bytes, 0, bytes.Length); +#else + stream.Write(data.ToMemory().Span); +#endif + } + } + + public override bool TryComputeLength(out long length) + { + if (_model is IModelJsonSerializable jsonSerializable && _model is not IModelXmlSerializable) + return GetWriter(jsonSerializable).TryComputeLength(out length); + + length = 0; + return false; + } + + public override async Task WriteToAsync(Stream stream, CancellationToken cancellation) + { + if (_model is IModelJsonSerializable jsonSerializable && _model is not IModelXmlSerializable) + { + await GetWriter(jsonSerializable).CopyToAsync(stream, cancellation).ConfigureAwait(false); + } + else if (_model is IModelXmlSerializable xmlSerializable && _model is not IModelJsonSerializable) + { + using XmlWriter writer = XmlWriter.Create(stream); + xmlSerializable.Serialize(writer, _options); + await writer.FlushAsync().ConfigureAwait(false); + } + else + { + var data = GetBinaryData(); + await stream.WriteAsync(data.ToMemory(), cancellation).ConfigureAwait(false); + } + } } private sealed class ArrayContent : RequestContent diff --git a/sdk/core/Azure.Core/src/Shared/Utf8JsonDelayedRequestContent.cs b/sdk/core/Azure.Core/src/Shared/Utf8JsonDelayedRequestContent.cs deleted file mode 100644 index 1eaac44c2b2f..000000000000 --- a/sdk/core/Azure.Core/src/Shared/Utf8JsonDelayedRequestContent.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -#nullable enable - -using System.IO; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; -using Azure.Core.Serialization; - -namespace Azure.Core -{ - internal class Utf8JsonDelayedRequestContent : RequestContent - { - private readonly object _serializedLock = new object(); - - private SequenceWriter? _sequenceWriter; - private IModelJsonSerializable _model; - private ModelSerializerOptions _serializerOptions; - private Utf8JsonWriter? _writer; - private RequestContent? _content; - - public Utf8JsonDelayedRequestContent(IModelJsonSerializable model, ModelSerializerOptions options) - { - _model = model; - _serializerOptions = options; - } - - private SequenceWriter SequenceWriter => _sequenceWriter ??= new SequenceWriter(); - - private Utf8JsonWriter JsonWriter => _writer ??= new Utf8JsonWriter(SequenceWriter); - - private RequestContent Content => _content ??= Create(SequenceWriter); - - /// - public override void Dispose() - { - _writer?.Dispose(); - _sequenceWriter?.Dispose(); - } - - /// - public override bool TryComputeLength(out long length) - { - Serialize(); - return SequenceWriter.TryComputeLength(out length); - } - - private void Serialize() - { - SequenceWriter.TryComputeLength(out var len); - if (len == 0) - { - lock (_serializedLock) - { - SequenceWriter.TryComputeLength(out len); - if (len == 0) - { - _model.Serialize(JsonWriter, _serializerOptions); - JsonWriter.Flush(); - } - } - } - } - - /// - public override void WriteTo(Stream stream, CancellationToken cancellation) - { - Serialize(); - Content.WriteTo(stream, cancellation); - } - - /// - public override async Task WriteToAsync(Stream stream, CancellationToken cancellation) - { - Serialize(); - await Content.WriteToAsync(stream, cancellation).ConfigureAwait(false); - } - } -} diff --git a/sdk/core/Azure.Core/src/Shared/Utf8XmlDelayedRequestContent.cs b/sdk/core/Azure.Core/src/Shared/Utf8XmlDelayedRequestContent.cs deleted file mode 100644 index 95fb253d84a3..000000000000 --- a/sdk/core/Azure.Core/src/Shared/Utf8XmlDelayedRequestContent.cs +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -#nullable enable - -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using System.Xml; -using Azure.Core.Serialization; - -namespace Azure.Core -{ - internal class Utf8XmlDelayedRequestContent : RequestContent - { - private readonly object _serializedLock = new object(); - - private IModelXmlSerializable _model; - private ModelSerializerOptions _serializerOptions; - private XmlWriter? _writer; - private RequestContent? _content; - private MemoryStream? _stream; - - public Utf8XmlDelayedRequestContent(IModelXmlSerializable model, ModelSerializerOptions options) - { - _model = model; - _serializerOptions = options; - } - - private MemoryStream Stream => _stream ??= new MemoryStream(); - - private XmlWriter XmlWriter => _writer ??= XmlWriter.Create(Stream); - - private RequestContent Content => _content ??= Create(Stream); - - /// - public override void Dispose() - { - _writer?.Dispose(); - _stream?.Dispose(); - } - - /// - public override bool TryComputeLength(out long length) - { - Serialize(); - length = Stream.Length; - return true; - } - - private void Serialize() - { - if (Stream.Length == 0) - { - lock (_serializedLock) - { - if (Stream.Length == 0) - { - _model.Serialize(XmlWriter, _serializerOptions); - XmlWriter.Flush(); - } - } - } - } - - /// - public override void WriteTo(Stream stream, CancellationToken cancellation) - { - Serialize(); - Stream.Position = 0; - Content.WriteTo(stream, cancellation); - } - - /// - public override async Task WriteToAsync(Stream stream, CancellationToken cancellation) - { - Serialize(); - Stream.Position = 0; - await Content.WriteToAsync(stream, cancellation).ConfigureAwait(false); - } - } -} diff --git a/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj b/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj index a15e198dd92d..c890b1ddc8f9 100644 --- a/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj +++ b/sdk/core/Azure.Core/tests/public/Azure.Core.Tests.Public.csproj @@ -22,8 +22,6 @@ - - diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs index ed74b04897ad..e494a76de917 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Envelope.cs @@ -36,7 +36,7 @@ internal Envelope(string property, CatReadOnlyProperty cat, T modelC, Dictionary public T ModelT { get; set; } #region Serialization - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable>)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable>)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable>.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelTests.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelTests.cs index 640963914e5d..2481933fc273 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelTests.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelTests.cs @@ -14,6 +14,8 @@ public abstract class ModelTests where T : class, IModelSerializable private T _modelInstance; private T ModelInstance => _modelInstance ??= GetModelInstance(); + private bool IsXmlWireFormat => WirePayload.StartsWith("<", StringComparison.Ordinal); + protected virtual T GetModelInstance() { return Activator.CreateInstance(typeof(T), true) as T; @@ -175,16 +177,30 @@ protected void RoundTripTest(ModelSerializerFormat format, RoundTripStrategy var expectedSerializedString = GetExpectedResult(format); - T model = strategy.Deserialize(serviceResponse, ModelInstance, options) as T; + if (IsXmlWireFormat && strategy.IsExplicitJsonDeserialize && format == ModelSerializerFormat.Wire) + { + Assert.Throws(() => { T model = strategy.Deserialize(serviceResponse, ModelInstance, options) as T; }); + } + else + { + T model = strategy.Deserialize(serviceResponse, ModelInstance, options) as T; - VerifyModel(model, format); - var data = strategy.Serialize(model, options); - string roundTrip = data.ToString(); + VerifyModel(model, format); + if (IsXmlWireFormat && strategy.IsExplicitJsonSerialize && format == ModelSerializerFormat.Wire) + { + Assert.Throws(() => { var data = strategy.Serialize(model, options); }); + } + else + { + var data = strategy.Serialize(model, options); + string roundTrip = data.ToString(); - Assert.That(roundTrip, Is.EqualTo(expectedSerializedString)); + Assert.That(roundTrip, Is.EqualTo(expectedSerializedString)); - T model2 = strategy.Deserialize(roundTrip, ModelInstance, options) as T; - CompareModels(model, model2, format); + T model2 = strategy.Deserialize(roundTrip, ModelInstance, options) as T; + CompareModels(model, model2, format); + } + } } protected Dictionary GetRawData(object model) diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelXmlTests.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelXmlTests.cs index 7b4b0a3e3e8f..fa3ea95b4b5a 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelXmlTests.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ModelXmlTests.cs @@ -39,7 +39,7 @@ public void ThrowsIfMismatch() Assert.Throws(Is.InstanceOf(), () => ModelSerializer.Deserialize(new BinaryData(Encoding.UTF8.GetBytes(WirePayload)), jsonOptions)); - ModelSerializerOptions wireOptions = new ModelSerializerOptions(ModelSerializerFormat.Wire); + ModelSerializerOptions wireOptions = ModelSerializerOptions.DefaultServiceOptions; Assert.Throws(() => ModelSerializer.Deserialize(new BinaryData(Encoding.UTF8.GetBytes(JsonPayload)), wireOptions)); } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs index dd52e947f601..d06aad1a281b 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/Animal.cs @@ -47,7 +47,7 @@ internal Animal(string name) } #region Serialization - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs index 8b3941e7ea42..645e86ba0588 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/CatReadOnlyProperty.cs @@ -29,7 +29,7 @@ internal CatReadOnlyProperty() public bool HasWhiskers { get; private set; } = true; #region Serialization - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs index 51d8dd9215e0..02a3059dcef9 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ChildModelXml.cs @@ -35,7 +35,7 @@ public ChildModelXml(string value, string readonlyProperty) public string ChildReadOnlyProperty { get; } void IXmlSerializable.Write(XmlWriter writer, string nameHint) => - Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire), nameHint); + Serialize(writer, ModelSerializerOptions.DefaultServiceOptions, nameHint); void IModelXmlSerializable.Serialize(XmlWriter writer, ModelSerializerOptions options) { @@ -151,7 +151,7 @@ ChildModelXml IModelJsonSerializable.Deserialize(ref Utf8JsonRead } void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => - Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); ChildModelXml IModelXmlSerializable.Deserialize(XElement root, ModelSerializerOptions options) => DeserializeChildModelXml(root, options); } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs index 7a9bc8a8494e..bfac2a27bcaa 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/BaseModel.cs @@ -17,13 +17,13 @@ public abstract class BaseModel : IUtf8JsonSerializable, IModelJsonSerializable< { public static implicit operator RequestContent(BaseModel baseModel) { - return new Utf8JsonDelayedRequestContent(baseModel, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return RequestContent.Create(baseModel, ModelSerializerOptions.DefaultServiceOptions); } public static explicit operator BaseModel(Response response) { using JsonDocument jsonDocument = JsonDocument.Parse(response.ContentStream); - return DeserializeBaseModel(jsonDocument.RootElement, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeBaseModel(jsonDocument.RootElement, ModelSerializerOptions.DefaultServiceOptions); } private Dictionary RawData { get; set; } = new Dictionary(); @@ -31,7 +31,7 @@ public static explicit operator BaseModel(Response response) public string Kind { get; internal set; } public string Name { get; set; } - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs index b9d91245eee3..f3aa7a95dc9b 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelX.cs @@ -31,17 +31,17 @@ internal ModelX(string kind, string name, int xProperty, Dictionary ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); public static implicit operator RequestContent(ModelX modelX) { - return new Utf8JsonDelayedRequestContent(modelX, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return RequestContent.Create(modelX, ModelSerializerOptions.DefaultServiceOptions); } public static explicit operator ModelX(Response response) { using JsonDocument jsonDocument = JsonDocument.Parse(response.ContentStream); - return DeserializeModelX(jsonDocument.RootElement, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeModelX(jsonDocument.RootElement, ModelSerializerOptions.DefaultServiceOptions); } void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs index 18dd487600b7..17f262d91df3 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/ModelY.cs @@ -33,7 +33,7 @@ internal ModelY(string kind, string name, string yProperty, Dictionary ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs index c524944940c1..2ca937493b04 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DiscriminatorSet/UnknownBaseModel.cs @@ -29,7 +29,7 @@ internal UnknownBaseModel(string kind, string name, Dictionary ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs index d006ba645769..3343817407ab 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/DogListProperty.cs @@ -38,16 +38,16 @@ public DogListProperty() public static explicit operator DogListProperty(Response response) { using JsonDocument jsonDocument = JsonDocument.Parse(response.ContentStream); - return DeserializeDogListProperty(jsonDocument.RootElement, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeDogListProperty(jsonDocument.RootElement, ModelSerializerOptions.DefaultServiceOptions); } public static implicit operator RequestContent(DogListProperty dog) { - return new Utf8JsonDelayedRequestContent(dog, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return RequestContent.Create(dog, ModelSerializerOptions.DefaultServiceOptions); } #region Serialization - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); @@ -164,7 +164,7 @@ private ModelSerializerOptions GetOptions(JsonSerializerOptions options) //pulls the additional properties setting from the ModelJsonConverter if it exists //if it does not exist it uses the default value of true for azure sdk use cases var modelConverter = options.Converters.FirstOrDefault(c => c.GetType() == typeof(ModelJsonConverter)) as ModelJsonConverter; - return modelConverter is not null ? modelConverter.Options : new ModelSerializerOptions(ModelSerializerFormat.Wire); + return modelConverter is not null ? modelConverter.Options : ModelSerializerOptions.DefaultServiceOptions; } } DogListProperty IModelSerializable.Deserialize(BinaryData data, ModelSerializerOptions options) diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs index bb88c76d8f11..9ed397e5bd89 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/JsonModelForCombinedInterface.cs @@ -45,7 +45,7 @@ internal JsonModelForCombinedInterface(string key, string value, string readOnly public string Value { get; set; } public string ReadOnlyProperty { get; } - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static JsonModelForCombinedInterface DeserializeJsonModelForCombinedInterface(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs index 10250f01c7af..62f28eb4de46 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/ModelXml.cs @@ -12,7 +12,7 @@ namespace Azure.Core.Tests.Public.ModelSerializationTests.Models { [XmlRoot("Tag")] - public class ModelXml : IXmlSerializable, IModelXmlSerializable + public class ModelXml : IXmlSerializable, IModelXmlSerializable, IModelJsonSerializable { internal ModelXml() { } @@ -45,17 +45,17 @@ public ModelXml(string key, string value, string readonlyProperty, ChildModelXml public static implicit operator RequestContent(ModelXml modelXml) { - return new Utf8XmlDelayedRequestContent(modelXml, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return RequestContent.Create(modelXml, ModelSerializerOptions.DefaultServiceOptions); } public static explicit operator ModelXml(Response response) { - return DeserializeModelXml(XElement.Load(response.ContentStream), new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeModelXml(XElement.Load(response.ContentStream), ModelSerializerOptions.DefaultServiceOptions); } - public void Serialize(XmlWriter writer, string nameHint) => Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire), nameHint); + public void Serialize(XmlWriter writer, string nameHint) => Serialize(writer, ModelSerializerOptions.DefaultServiceOptions, nameHint); - void IXmlSerializable.Write(XmlWriter writer, string nameHint) => Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire), nameHint); + void IXmlSerializable.Write(XmlWriter writer, string nameHint) => Serialize(writer, ModelSerializerOptions.DefaultServiceOptions, nameHint); void IModelXmlSerializable.Serialize(XmlWriter writer, ModelSerializerOptions options) { @@ -192,5 +192,20 @@ ModelXml IModelSerializable.Deserialize(BinaryData data, ModelSerializ } ModelXml IModelXmlSerializable.Deserialize(XElement root, ModelSerializerOptions options) => DeserializeModelXml(root, options); + + void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) + { + if (options.Format != ModelSerializerFormat.Json) + throw new InvalidOperationException($"Must use '{ModelSerializerFormat.Json}' format when calling the {nameof(IModelJsonSerializable)} interface"); + Serialize(writer, options); + } + + ModelXml IModelJsonSerializable.Deserialize(ref Utf8JsonReader reader, ModelSerializerOptions options) + { + if (options.Format != ModelSerializerFormat.Json) + throw new InvalidOperationException($"Must use '{ModelSerializerFormat.Json}' format when calling the {nameof(IModelJsonSerializable)} interface"); + using var doc = JsonDocument.ParseValue(ref reader); + return DeserializeModelXml(doc.RootElement, options); + } } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs index 3060d2a903b6..3ac0e9c7f273 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/Models/XmlModelForCombinedInterface.cs @@ -43,7 +43,7 @@ public XmlModelForCombinedInterface(string key, string value, string readOnlyPro public string ReadOnlyProperty { get; } void IXmlSerializable.Write(XmlWriter writer, string nameHint) => - Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire), nameHint); + Serialize(writer, ModelSerializerOptions.DefaultServiceOptions, nameHint); void IModelXmlSerializable.Serialize(XmlWriter writer, ModelSerializerOptions options) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs index a2bd9b92d7b9..a46fb65da567 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/RoundTripStrategy.cs @@ -20,10 +20,15 @@ public abstract class RoundTripStrategy where T : class, IModelSerializable : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { return ModelSerializer.Serialize(model, options); @@ -36,6 +41,9 @@ public override object Deserialize(string payload, object model, ModelSerializer public class ModelSerializerNonGenericStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { return ModelSerializer.Serialize((object)model, options); @@ -49,6 +57,9 @@ public override object Deserialize(string payload, object model, ModelSerializer public class XmlInterfaceStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { using var stream = new MemoryStream(); @@ -66,6 +77,9 @@ public override object Deserialize(string payload, object model, ModelSerializer public class XmlInterfaceNonGenericStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { using var stream = new MemoryStream(); @@ -83,6 +97,9 @@ public override object Deserialize(string payload, object model, ModelSerializer public class ModelInterfaceStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { return model.Serialize(options); @@ -96,6 +113,9 @@ public override object Deserialize(string payload, object model, ModelSerializer public class ModelInterfaceNonGenericStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { return ((IModelSerializable)model).Serialize(options); @@ -109,9 +129,12 @@ public override object Deserialize(string payload, object model, ModelSerializer public class JsonInterfaceStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => true; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ((IModelJsonSerializable)model).Serialize(options); + return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -122,9 +145,12 @@ public override object Deserialize(string payload, object model, ModelSerializer public class JsonInterfaceNonGenericStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => true; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ((IModelJsonSerializable)model).Serialize(options); + return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -135,9 +161,12 @@ public override object Deserialize(string payload, object model, ModelSerializer public class JsonInterfaceUtf8ReaderStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => true; + public override bool IsExplicitJsonDeserialize => true; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ((IModelJsonSerializable)model).Serialize(options); + return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -149,16 +178,12 @@ public override object Deserialize(string payload, object model, ModelSerializer public class JsonInterfaceSequenceWriterStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => true; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { - using var sequenceWriter = new SequenceWriter(); - using var writer = new Utf8JsonWriter(sequenceWriter); - ((IModelJsonSerializable)model).Serialize(writer, options); - writer.Flush(); - sequenceWriter.TryComputeLength(out var length); - var stream = new MemoryStream((int)length); - sequenceWriter.CopyTo(stream, default); - return new BinaryData(stream.GetBuffer().AsMemory(0, (int)stream.Position)); + return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -169,16 +194,12 @@ public override object Deserialize(string payload, object model, ModelSerializer public class JsonInterfaceSequenceWriterNonGenericStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => true; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { - using var sequenceWriter = new SequenceWriter(); - using var writer = new Utf8JsonWriter(sequenceWriter); - ((IModelJsonSerializable)model).Serialize(writer, options); - writer.Flush(); - sequenceWriter.TryComputeLength(out var length); - var stream = new MemoryStream((int)length); - sequenceWriter.CopyTo(stream, default); - return new BinaryData(stream.GetBuffer().AsMemory(0, (int)stream.Position)); + return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -189,9 +210,12 @@ public override object Deserialize(string payload, object model, ModelSerializer public class JsonInterfaceUtf8ReaderNonGenericStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => true; + public override bool IsExplicitJsonDeserialize => true; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { - return ((IModelJsonSerializable)model).Serialize(options); + return ModelSerializerHelper.SerializeToBinaryData(writer => ((IModelJsonSerializable)model).Serialize(writer, options)); } public override object Deserialize(string payload, object model, ModelSerializerOptions options) @@ -212,6 +236,9 @@ public CastStrategy(Func toRequestContent, Func _fromResponse = fromResponse; } + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { RequestContent content = _toRequestContent(model); @@ -231,6 +258,9 @@ public override object Deserialize(string payload, object model, ModelSerializer public class XmlInterfaceXElementStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { return ((IModelXmlSerializable)model).Serialize(options); @@ -245,6 +275,9 @@ public override object Deserialize(string payload, object model, ModelSerializer public class XmlInterfaceXElementNonGenericStrategy : RoundTripStrategy where T : class, IModelSerializable { + public override bool IsExplicitJsonSerialize => false; + public override bool IsExplicitJsonDeserialize => false; + public override BinaryData Serialize(T model, ModelSerializerOptions options) { return ((IModelXmlSerializable)model).Serialize(options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs index dce8ad77e32b..289be07b7ce7 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ApiProfile.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ApiProfile : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ApiProfile DeserializeApiProfile(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs index ac9737d56a90..f4089ed802e8 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.Serialization.cs @@ -23,7 +23,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Compute { public partial class AvailabilitySetData : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.cs index c2a7a0d57aa3..fd7045c006f4 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/AvailabilitySetData.cs @@ -25,13 +25,13 @@ internal AvailabilitySetData() { } public static implicit operator RequestContent(AvailabilitySetData availabilitySetData) { - return new Utf8JsonDelayedRequestContent(availabilitySetData, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return RequestContent.Create(availabilitySetData, ModelSerializerOptions.DefaultServiceOptions); } public static explicit operator AvailabilitySetData(Response response) { using JsonDocument jsonDocument = JsonDocument.Parse(response.ContentStream); - return DeserializeAvailabilitySetData(jsonDocument.RootElement, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeAvailabilitySetData(jsonDocument.RootElement, ModelSerializerOptions.DefaultServiceOptions); } /// Initializes a new instance of AvailabilitySetData. diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs index cf7059f1b741..2571b0863a5f 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ComputeSku.Serialization.cs @@ -15,7 +15,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Compute.Models { public partial class ComputeSku : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs index 8b6e4bb780d1..6c48561ff5e1 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/InstanceViewStatus.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Compute.Models { public partial class InstanceViewStatus : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs index 4c2d2e1fd0cf..166d5da1903f 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderExtendedLocation.Serialization.cs @@ -15,7 +15,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ProviderExtendedLocation : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ProviderExtendedLocation DeserializeProviderExtendedLocation(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs index a239fcd5ae5d..9584cf4cf7d9 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ProviderResourceType.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ProviderResourceType : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ProviderResourceType DeserializeProviderResourceType(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs index 7b26b053f5d7..02ce68e0dc62 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.Serialization.cs @@ -92,7 +92,7 @@ ResourceProviderData IModelSerializable.Deserialize(Binary return DeserializeResourceProviderData(doc.RootElement, options); } - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); // only used for public access to internal serialize public void Serialize(Utf8JsonWriter writer) => ((IUtf8JsonSerializable)this).Write(writer); diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.cs index 3029ab7c7582..81483197be10 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceProviderData.cs @@ -23,13 +23,13 @@ public partial class ResourceProviderData { public static implicit operator RequestContent(ResourceProviderData resourceProviderData) { - return new Utf8JsonDelayedRequestContent(resourceProviderData, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return RequestContent.Create(resourceProviderData, ModelSerializerOptions.DefaultServiceOptions); } public static explicit operator ResourceProviderData(Response response) { using JsonDocument jsonDocument = JsonDocument.Parse(response.ContentStream); - return DeserializeResourceProviderData(jsonDocument.RootElement, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeResourceProviderData(jsonDocument.RootElement, ModelSerializerOptions.DefaultServiceOptions); } /// Initializes a new instance of ProviderData. diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs index 82d7846b4ad3..535ea1fb198a 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAlias.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ResourceTypeAlias : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ResourceTypeAlias DeserializeResourceTypeAlias(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs index a6156c3be376..78d40274d119 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPath.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ResourceTypeAliasPath : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ResourceTypeAliasPath DeserializeResourceTypeAliasPath(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs index 3610eb4dc0ff..76229f2dbc61 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPathMetadata.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ResourceTypeAliasPathMetadata : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ResourceTypeAliasPathMetadata DeserializeResourceTypeAliasPathMetadata(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs index 959b22483e21..d17f02e795d0 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ResourceTypeAliasPattern.Serialization.cs @@ -14,7 +14,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ResourceTypeAliasPattern : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ResourceTypeAliasPattern DeserializeResourceTypeAliasPattern(JsonElement element, ModelSerializerOptions options = default) { diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs index 8c47d9188287..0c508adb8568 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/SystemData.Serialization.cs @@ -18,7 +18,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Models [JsonConverter(typeof(SystemDataConverter))] public partial class SystemData : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); @@ -180,7 +180,7 @@ public override void Write(Utf8JsonWriter writer, SystemData model, JsonSerializ public override SystemData Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { using var document = JsonDocument.ParseValue(ref reader); - return DeserializeSystemData(document.RootElement, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeSystemData(document.RootElement, ModelSerializerOptions.DefaultServiceOptions); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs index 561d76d53eb8..d29858820aa5 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/WritableSubResource.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models [JsonConverter(typeof(WritableSubResourceConverter))] public partial class WritableSubResource : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); void IModelJsonSerializable.Serialize(Utf8JsonWriter writer, ModelSerializerOptions options) => Serialize(writer, options); @@ -105,7 +105,7 @@ public override void Write(Utf8JsonWriter writer, WritableSubResource model, Jso public override WritableSubResource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { using var document = JsonDocument.ParseValue(ref reader); - return DeserializeWritableSubResource(document.RootElement, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + return DeserializeWritableSubResource(document.RootElement, ModelSerializerOptions.DefaultServiceOptions); } } diff --git a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs index 0c612bafaf40..053ee1b6cc12 100644 --- a/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs +++ b/sdk/core/Azure.Core/tests/public/ModelSerializationTests/ServiceModels/ZoneMapping.Serialization.cs @@ -16,7 +16,7 @@ namespace Azure.Core.Tests.Public.ResourceManager.Resources.Models { public partial class ZoneMapping : IUtf8JsonSerializable, IModelJsonSerializable { - void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, new ModelSerializerOptions(ModelSerializerFormat.Wire)); + void IUtf8JsonSerializable.Write(Utf8JsonWriter writer) => ((IModelJsonSerializable)this).Serialize(writer, ModelSerializerOptions.DefaultServiceOptions); internal static ZoneMapping DeserializeZoneMapping(JsonElement element, ModelSerializerOptions options = default) {