[ 
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)

Reply via email to