Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2458,13 +2458,13 @@ internal static ValueExpression DeserializeJsonValueCore(
Type t when t == typeof(BinaryData) =>
format is SerializationFormat.Bytes_Base64 or SerializationFormat.Bytes_Base64Url
? BinaryDataSnippets.FromBytes(element.GetBytesFromBase64(format.ToFormatSpecifier()))
: BinaryDataSnippets.FromString(element.GetRawText()),
: element.GetUtf8Bytes(),
Type t when t == typeof(byte[]) =>
format is SerializationFormat.Bytes_Base64 or SerializationFormat.Bytes_Base64Url
? element.GetBytesFromBase64(format.ToFormatSpecifier())
: BinaryDataSnippets.FromString(element.GetRawText()).ToArray(),
: element.GetUtf8Bytes().ToArray(),
Type t when t == typeof(Stream) =>
BinaryDataSnippets.FromString(element.GetRawText()).ToStream(),
element.GetUtf8Bytes().ToStream(),
Type t when t == typeof(FileBinaryContent) =>
New.Instance<FileBinaryContent>(New.Instance<MemoryStream>(element.GetBytesFromBase64(), Literal(false))),
Type t when t == typeof(JsonElement) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -764,7 +764,7 @@ private MethodBodyStatement GetElementConversion(CSharpType elementType, ScopedA
return new IfElseStatement(
item.ValueKind().Equal(JsonValueKindSnippets.Null),
AddElement(dictKey, Null, value),
AddElement(dictKey, BinaryDataSnippets.FromString(item.GetRawText()), value));
AddElement(dictKey, item.GetUtf8Bytes(), value));
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1568,8 +1568,10 @@ public void TestSerializationOfBinaryDataPropertyAvoidsCopy(bool useBase64Url, s
Assert.AreEqual(Helpers.GetExpectedFromFile(format), methodBody);
}

[Test]
public void TestDeserializationOfNonBase64ByteArrayPropertyUsesGetRawText()
[TestCase(typeof(BinaryData))]
[TestCase(typeof(byte[]))]
[TestCase(typeof(System.IO.Stream))]
public void TestDeserializationOfNonBase64PropertyUsesGetUtf8Bytes(Type propertyType)
{
var bytesNoEncoding = new InputPrimitiveType(InputPrimitiveTypeKind.Bytes, "bytes", "TypeSpec.bytes");
var inputModel = InputFactory.Model("TestModel", properties:
Expand All @@ -1580,7 +1582,7 @@ public void TestDeserializationOfNonBase64ByteArrayPropertyUsesGetRawText()
createSerializationsCore: (inputType, typeProvider) =>
inputType is InputModelType modelType ? [new MrwSerializationTypeDefinition(modelType, (typeProvider as ModelProvider)!)] : [],
createCSharpTypeCore: (inputType) => inputType is InputPrimitiveType { Kind: InputPrimitiveTypeKind.Bytes }
? new CSharpType(typeof(byte[]))
? new CSharpType(propertyType)
: null!,
createCSharpTypeCoreFallback: (inputType) => inputType is InputPrimitiveType { Kind: InputPrimitiveTypeKind.Bytes });

Expand All @@ -1591,10 +1593,20 @@ public void TestDeserializationOfNonBase64ByteArrayPropertyUsesGetRawText()
var deserializationMethod = serialization!.BuildDeserializationMethod();
var methodBody = deserializationMethod!.BodyStatements!.ToDisplayString();

Assert.IsTrue(methodBody.Contains("GetRawText"),
$"byte[] property with no encoding should use GetRawText() fallback. Actual:\n{methodBody}");
Assert.IsTrue(methodBody.Contains("ToArray"),
$"byte[] property with no encoding should call ToArray(). Actual:\n{methodBody}");
Assert.IsTrue(methodBody.Contains("GetUtf8Bytes"),
$"Property with no encoding should use GetUtf8Bytes(). Actual:\n{methodBody}");
Assert.IsFalse(methodBody.Contains("GetRawText"),
$"Property with no encoding should not transcode raw JSON. Actual:\n{methodBody}");
if (propertyType == typeof(byte[]))
{
Assert.IsTrue(methodBody.Contains("ToArray"),
$"byte[] property with no encoding should call ToArray(). Actual:\n{methodBody}");
}
else if (propertyType == typeof(System.IO.Stream))
{
Assert.IsTrue(methodBody.Contains("ToStream"),
$"Stream property with no encoding should call ToStream(). Actual:\n{methodBody}");
}
Assert.IsFalse(methodBody.Contains("EnumerateArray"),
$"byte[] property should not use array enumeration. Actual:\n{methodBody}");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ namespace Sample.Models
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.TestModel(stringProperty, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public partial class TestModel : global::System.ClientModel.Primitives.IJsonMode
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.TestModel(profileImage, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public partial class TestModel : global::System.ClientModel.Primitives.IJsonMode
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.TestModel(profileImage, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public partial class TestModel : global::System.ClientModel.Primitives.IJsonMode
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.TestModel(audioEndMs, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public partial class TestModel : global::System.ClientModel.Primitives.IJsonMode
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.TestModel(audioEndMs, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public partial class TestModel : global::System.ClientModel.Primitives.IJsonMode
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.TestModel(audioEndMs, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ protected override void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrit
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.UnknownTree(plantType, name, additionalBinaryDataProperties, treeType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public partial class DynamicModel
}
if (prop.NameEquals("anything"u8))
{
anything = global::System.BinaryData.FromString(prop.Value.GetRawText());
anything = prop.Value.GetUtf8Bytes();
continue;
}
patch.Set([.. "$."u8, .. global::System.Text.Encoding.UTF8.GetBytes(prop.Name)], prop.Value.GetUtf8Bytes());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public partial class DynamicModel
p1 = prop.Value.GetString();
continue;
}
additionalProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
return new global::Sample.Models.DynamicModel(p1, additionalProperties, patch);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ protected override void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrit
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(mockProperty, additionalBinaryDataProperties);
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.snake_case_model(name, additionalBinaryDataProperties);
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(accessToken, additionalBinaryDataProperties);
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,12 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
{
continue;
}
prop1 = global::System.BinaryData.FromString(prop.Value.GetRawText());
prop1 = prop.Value.GetUtf8Bytes();
continue;
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.Model((prop1 ?? new global::Sample.ChangeTrackingList<global::Sample.Models.MyEnum>()), additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.Model(prop2, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop2, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ protected virtual void JsonModelWriteCore(global::System.Text.Json.Utf8JsonWrite
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(name, customColor, flavor, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public partial class MockInputModel
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, prop2, additionalBinaryDataProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public partial class MockInputModel
}
if ((options.Format != "W"))
{
additionalBinaryDataProperties.Add(prop.Name, global::System.BinaryData.FromString(prop.Value.GetRawText()));
additionalBinaryDataProperties.Add(prop.Name, prop.Value.GetUtf8Bytes());
}
}
return new global::Sample.Models.MockInputModel(prop1, prop2, additionalBinaryDataProperties);
Expand Down
Loading
Loading