C#でApache Avroファイルを逆シリアル化する方法が見つかりません。 Avroファイルは、Microsoft AzureイベントハブのArchive featureによって生成されたファイルです。C#でAvroファイルを非直列化する
私はJSONにファイルを変換するためのApacheから Avro Toolsを使用できるJavaで:私はSequenceNumber
、Offset
とEnqueuedTimeUtc
を抽出することができる午前
java -jar avro-tools-1.8.1.jar tojson --pretty inputfile > output.json
が、私からBody
に使用するタイプがわからない場合は例外がスローされます。私はDictionary<string, object>
と他のタイプで試しました。
static void Main(string[] args)
{
var fileName = "...";
using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var reader = AvroContainer.CreateReader<EventData>(stream))
{
using (var streamReader = new SequentialReader<EventData>(reader))
{
var record = streamReader.Objects.FirstOrDefault();
}
}
}
}
[DataContract(Namespace = "Microsoft.ServiceBus.Messaging")]
public class EventData
{
[DataMember(Name = "SequenceNumber")]
public long SequenceNumber { get; set; }
[DataMember(Name = "Offset")]
public string Offset { get; set; }
[DataMember(Name = "EnqueuedTimeUtc")]
public string EnqueuedTimeUtc { get; set; }
[DataMember(Name = "Body")]
public foo Body { get; set; }
// More properties...
}
スキーマは次のようになります。この、Body
はnull
とbytes
の労働組合であるにもかかわらず
[DataContract(Namespace = "Microsoft.ServiceBus.Messaging")]
[KnownType(typeof(Dictionary<string, object>))]
public class EventData
{
[DataMember]
public IDictionary<string, object> SystemProperties { get; set; }
[DataMember]
public IDictionary<string, object> Properties { get; set; }
[DataMember]
public byte[] Body { get; set; }
}
:
{
"type": "record",
"name": "EventData",
"namespace": "Microsoft.ServiceBus.Messaging",
"fields": [
{
"name": "SequenceNumber",
"type": "long"
},
{
"name": "Offset",
"type": "string"
},
{
"name": "EnqueuedTimeUtc",
"type": "string"
},
{
"name": "SystemProperties",
"type": {
"type": "map",
"values": [ "long", "double", "string", "bytes" ]
}
},
{
"name": "Properties",
"type": {
"type": "map",
"values": [ "long", "double", "string", "bytes" ]
}
},
{
"name": "Body",
"type": [ "null", "bytes" ]
}
]
}
これが役立つことがあります。[http://stackoverflow.com/questions/43993644/reading-event-hub-archive -file-in-c-sharp](http://stackoverflow.com/questions/43993644/reading-event-hub-archive-file-in-c-sharp) –