Search code examples
jsonazurejson.netazure-api-management

APIM Generate JsonArray to EventHub


Facing an issue with JArray to generate data

My current APIM Policy

<log-to-eventhub logger-id="testjayeventhub">@{return new JObject(
    new JProperty("EventTime", DateTime.UtcNow.ToString()),
    new JProperty("ServiceName", context.Deployment.ServiceName),
    new JProperty("RequestId", context.RequestId),
    new JProperty("RequestIp", context.Request.IpAddress),
    new JProperty("OperationName", context.Operation.Name)
).ToString();}</log-to-eventhub>

The above will generate the data with the below model and send to the eventhub

{
  "EventTime": "...",
  "ServiceName": "yyyy",
  "RequestId": "yyyy",
  "RequestIp": "yyy",
  "OperationName": "xxx"
}

However, I want to change this data model like below

{
  "records": [
    {
      "EventTime": "...",
      "ServiceName": "yyyy",
      "RequestId": "yyyy",
      "RequestIp": "yyy",
      "OperationName": "xxx"
    }
  ]
}

So I'm trying to change my policy but i can't able to do that. So far i have tried the below

JObject jobj = new JObject(
    new JProperty("EventTime", DateTime.UtcNow.ToString()),
    new JProperty("ServiceName", context.Deployment.ServiceName),
    new JProperty("RequestId", context.RequestId),
    new JProperty("RequestIp", context.Request.IpAddress),
    new JProperty("OperationName", context.Operation.Name)
);

JArray a = new JArray();
a.Add(jobj);

But this will just add the JObject into array but not sure how the record model will get into..


Solution

  • Try this, seems to work for me ...

    var jsonString = new JObject(
        new JProperty("records", new JArray() {
            new JObject(
                new JProperty("EventTime", "yyy"),
                new JProperty("ServiceName", "yyy"),
                new JProperty("RequestId", "yyy"),
                new JProperty("RequestIp", "yyy"),
                new JProperty("OperationName", "yyy")
            )
        })
    ).ToString();
    
    return jsonString;