[
https://issues.apache.org/jira/browse/AVRO-4059?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Nathaniel Borg updated AVRO-4059:
---------------------------------
Description:
Hey, I have started using Avro to convert GenericRecord to JSON by utilizing
the following:
{code:java}
public string ToJson(GenericRecord record, bool pretty = false)
{
var writer = new GenericDatumWriter<GenericRecord>(record.Schema);
var output = new MemoryStream();
var encoder = new JsonEncoder(record.Schema, output, pretty)
{
IncludeNamespace = false
};
writer.Write(record, encoder);
encoder.Flush();
output.Flush();
return Encoding.UTF8.GetString(output.ToArray());
}
{code}
I am noticing that for a byte type with logicalType decimal the value does not
get encoded correctly and remains in the form of bytes.
{*}For example{*}:
{*}Schema{*}:
{code:java}
{
"name": "amount",
"type": {
"type": "bytes",
"logicalType": "decimal",
"precision": 5,
"scale": 5
}
}
{code}
{*}Execution{*}:
{code:java}
var record = new GenericRecord(schema);
record.Add("amount", new AvroDecimal(20000.00001));
var json = ToJson(record, true);
// Returns
//
// {
// "amount": "w5”\u0001"
// }
// Expected
// {
// "amount: "20000.00001"
// }
{code}
was:
Hey, I have started using Avro to convert GenericRecord to JSON by utilizing
the following:
{code:java}
public string ToJson(GenericRecord record, bool pretty = false)
{
var writer = new GenericDatumWriter<GenericRecord>(record.Schema);
var output = new MemoryStream();
var encoder = new JsonEncoder(record.Schema, output, pretty)
{
IncludeNamespace = false
};
writer.Write(record, encoder);
encoder.Flush();
output.Flush();
return Encoding.UTF8.GetString(output.ToArray());
}
{code}
I am noticing that for a byte type with logicalType decimal the value does not
get encoded correctly and remains in the form of bytes.
{*}For example{*}:
{*}Schema{*}:
{code:java}
{
"name": "amount",
"type": {
"type": "bytes",
"logicalType": "decimal",
"precision": 5,
"scale": 5
}
}
{code}
{*}Execution{*}:
{code:java}
var record = new GenericRecord(schema);
record.Add("amount", new AvroDecimal(20000.00001));
var json = ToJson(record, true);
// Returns
//
// {
// "amount": "w5”\u0001"
// }
// Expected
// {
// "amount: "20000.00001"
// }
{code}
> [CSharp] JsonEncoder does not encode Decimal LogicalType properly
> -----------------------------------------------------------------
>
> Key: AVRO-4059
> URL: https://issues.apache.org/jira/browse/AVRO-4059
> Project: Apache Avro
> Issue Type: Bug
> Components: csharp
> Reporter: Nathaniel Borg
> Priority: Major
>
> Hey, I have started using Avro to convert GenericRecord to JSON by utilizing
> the following:
>
> {code:java}
> public string ToJson(GenericRecord record, bool pretty = false)
> {
> var writer = new GenericDatumWriter<GenericRecord>(record.Schema);
> var output = new MemoryStream();
> var encoder = new JsonEncoder(record.Schema, output, pretty)
> {
> IncludeNamespace = false
> };
> writer.Write(record, encoder);
> encoder.Flush();
> output.Flush();
> return Encoding.UTF8.GetString(output.ToArray());
> }
> {code}
>
> I am noticing that for a byte type with logicalType decimal the value does
> not get encoded correctly and remains in the form of bytes.
> {*}For example{*}:
> {*}Schema{*}:
> {code:java}
> {
> "name": "amount",
> "type": {
> "type": "bytes",
> "logicalType": "decimal",
> "precision": 5,
> "scale": 5
> }
> }
> {code}
>
> {*}Execution{*}:
> {code:java}
> var record = new GenericRecord(schema);
> record.Add("amount", new AvroDecimal(20000.00001));
> var json = ToJson(record, true);
> // Returns
> //
> // {
> // "amount": "w5”\u0001"
> // }
> // Expected
> // {
> // "amount: "20000.00001"
> // }
> {code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)