diff --git a/src/Microsoft.OpenApi/Any/OpenApiPrimitive.cs b/src/Microsoft.OpenApi/Any/OpenApiPrimitive.cs index 624dbd395..b6a111e35 100644 --- a/src/Microsoft.OpenApi/Any/OpenApiPrimitive.cs +++ b/src/Microsoft.OpenApi/Any/OpenApiPrimitive.cs @@ -70,7 +70,10 @@ public void Write(IOpenApiWriter writer, OpenApiSpecVersion specVersion) case PrimitiveType.String: var stringValue = (OpenApiString)(IOpenApiPrimitive)this; - writer.WriteValue(stringValue.Value); + if (stringValue.IsRawString()) + writer.WriteRaw(stringValue.Value); + else + writer.WriteValue(stringValue.Value); break; case PrimitiveType.Byte: diff --git a/src/Microsoft.OpenApi/Any/OpenApiString.cs b/src/Microsoft.OpenApi/Any/OpenApiString.cs index 3b8d8e9ff..a899bd301 100644 --- a/src/Microsoft.OpenApi/Any/OpenApiString.cs +++ b/src/Microsoft.OpenApi/Any/OpenApiString.cs @@ -9,6 +9,7 @@ namespace Microsoft.OpenApi.Any public class OpenApiString : OpenApiPrimitive { private bool isExplicit; + private bool isRawString; /// /// Initializes the class. @@ -30,6 +31,19 @@ public OpenApiString(string value, bool isExplicit) this.isExplicit = isExplicit; } + /// + /// Initializes the class. + /// + /// + /// Used to indicate if a string is quoted. + /// Used to indicate to the writer that the value should be written without encoding. + public OpenApiString(string value, bool isExplicit, bool isRawString) + : base(value) + { + this.isExplicit = isExplicit; + this.isRawString = isRawString; + } + /// /// The primitive class this object represents. /// @@ -42,5 +56,13 @@ public bool IsExplicit() { return this.isExplicit; } + + /// + /// True if the writer should process the value as supplied without encoding. + /// + public bool IsRawString() + { + return this.isRawString; + } } } diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 1a8ea432a..8103cc89f 100755 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -99,8 +99,10 @@ namespace Microsoft.OpenApi.Any { public OpenApiString(string value) { } public OpenApiString(string value, bool isExplicit) { } + public OpenApiString(string value, bool isExplicit, bool isRawString) { } public override Microsoft.OpenApi.Any.PrimitiveType PrimitiveType { get; } public bool IsExplicit() { } + public bool IsRawString() { } } public enum PrimitiveType {