2017-07-26 1 views
0

J'ai trouvé un code ici https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-dotnet-avro-serialization#Scenario2 qui ne l'inverse de ce que je besoin:Un modèle C# peut-il être sérialisé en tant que schéma AVRO JSON?

//Define the schema in JSON 
const string Schema = @"{ 
    ""type"":""record"", 
    ""name"":""Microsoft.Hadoop.Avro.Specifications.SensorData"", 
    ""fields"": 
     [ 
      { 
       ""name"":""Location"", 
       ""type"": 
        { 
         ""type"":""record"", 
         ""name"":""Microsoft.Hadoop.Avro.Specifications.Location"", 
         ""fields"": 
          [ 
           { ""name"":""Floor"", ""type"":""int"" }, 
           { ""name"":""Room"", ""type"":""int"" } 
          ] 
        } 
      }, 
      { ""name"":""Value"", ""type"":""bytes"" } 
     ] 
}"; 

//Create a generic serializer based on the schema 
var serializer = AvroSerializer.CreateGeneric(Schema); 

Je voudrais prendre un modèle que j'ai créé:

[DataContract(Name = "Demo", Namespace = "pubsub.demo")] 
public class Demo 
{ 
    [DataMember(Name = "value")] 
    public long Value { get; set; } 
} 

... et sérialiser ce modèle C# dans une chaîne JSON AVRO Schema.

Raison:

Je veux seulement maintenir les modèles C# et d'enregistrer automatiquement ces modèles avec le schéma du Registre de Confluent. Pour s'inscrire avec le registre de schéma, le schéma doit être dans un format JSON AVRO (comme Schema ci-dessus).

Je préférerais ne pas avoir à la fois le JSON défini et le modèle C#. Si je devais en maintenir un, je préférerais avoir un modèle C#.

Répondre

1

J'ai trouvé ce que je recherchais dans Microsoft.Hadoop.Avro.AvroSerializer.

AvroSerializer.Create<Demo>().WriterSchema.ToString(); 
// > {"type":"record","name":"pubsub.demo.Demo","fields"[{"name":"value","type":"long"}]}