Azure Function(v2,.NET Core):反序列化来自流分析作业的事件中心输入
Azure Function (v2, .NET Core): Deserialize Event Hub input coming from Stream Analytics Job
我有一个 Azure 流分析作业,它将事件输出为 "Line separated" 并以 UTF8 编码。
我创建了一个由事件中心上的事件触发的 Azure 函数(v2,.NET Core)。在这种情况下,我分批处理事件:
public static async Task Run(
[EventHubTrigger(
"xxx",
Connection = "xxx",
ConsumerGroup = "xxx")
] EventData[] events,
ILogger log)
我的目标是将输入反序列化为基于 POCO class 的对象。我目前总是得到的是 "Unexpected character...".
的错误
在这种情况下反序列化的正确方法是什么?
以下方法终于奏效了:
private static List<a> DeserializeInput(EventData[] events, ILogger log)
{
try
{
List<a> inputsDeserializedAsList = new List<a>();
foreach (EventData eventData in events)
{
// Deserialize Input
string payload = Encoding.UTF8.GetString(eventData.Body);
log.LogInformation($"DeserializeInput: payload retrieved: {payload}...");
DateTime enqueuedTimeUtc = (DateTime)eventData.SystemProperties.EnqueuedTimeUtc;
using (StringReader reader = new StringReader(payload))
{
List<a> inputEventsAsList = new List<a>();
string line;
while ((line = reader.ReadLine()) != null)
{
a parsedData = JsonConvert.DeserializeObject<a>(line);
parsedData.EventEnqueuedUtcTime = enqueuedTimeUtc;
inputEventsAsList.Add(parsedData);
}
inputsDeserializedAsList.AddRange(inputEventsAsList);
}
}
return inputsDeserializedAsList;
}
catch (Exception e) {
throw new Exception("DeserializeInput: failed deserializing input...", e);
}
}
我有一个 Azure 流分析作业,它将事件输出为 "Line separated" 并以 UTF8 编码。
我创建了一个由事件中心上的事件触发的 Azure 函数(v2,.NET Core)。在这种情况下,我分批处理事件:
public static async Task Run(
[EventHubTrigger(
"xxx",
Connection = "xxx",
ConsumerGroup = "xxx")
] EventData[] events,
ILogger log)
我的目标是将输入反序列化为基于 POCO class 的对象。我目前总是得到的是 "Unexpected character...".
的错误在这种情况下反序列化的正确方法是什么?
以下方法终于奏效了:
private static List<a> DeserializeInput(EventData[] events, ILogger log)
{
try
{
List<a> inputsDeserializedAsList = new List<a>();
foreach (EventData eventData in events)
{
// Deserialize Input
string payload = Encoding.UTF8.GetString(eventData.Body);
log.LogInformation($"DeserializeInput: payload retrieved: {payload}...");
DateTime enqueuedTimeUtc = (DateTime)eventData.SystemProperties.EnqueuedTimeUtc;
using (StringReader reader = new StringReader(payload))
{
List<a> inputEventsAsList = new List<a>();
string line;
while ((line = reader.ReadLine()) != null)
{
a parsedData = JsonConvert.DeserializeObject<a>(line);
parsedData.EventEnqueuedUtcTime = enqueuedTimeUtc;
inputEventsAsList.Add(parsedData);
}
inputsDeserializedAsList.AddRange(inputEventsAsList);
}
}
return inputsDeserializedAsList;
}
catch (Exception e) {
throw new Exception("DeserializeInput: failed deserializing input...", e);
}
}