gpt4 book ai didi

c# - 如何使用 Mailgun webhook 从邮件 header 解析 JSON 数组

转载 作者:行者123 更新时间:2023-11-30 16:17:29 24 4
gpt4 key购买 nike

来自 mailgun 回调的一组典型消息 header 如下所示:

[["Received", "by luna.mailgun.net with SMTP mgrt 8765806286401; Fri, 14 Jun 2013 02:25:33 +0000"],
["Content-Type", ["multipart/mixed", {"boundary": "199d7350597e43c0af0e4c814b8a35af"}]],
["Mime-Version", "1.0"],
["Subject", "Test Message"],
["From", "Test Sender <sender@mydomain.com>"],
["To", "Test Receiver <receiver1@mydomain.com>"],
["Reply-To", "replyto@mydomain.com"],
["Message-Id", "<20130614022533.18419.66130@mydomain.com>"],
["X-Mailgun-Sid", "WyIzOTUwOCIsICJuZWlsLmRvYnNvbkBleGFsdGdyb3VwLmNvbS5hdSIsICI4ZjY3OCJd"],
["Date", "Fri, 14 Jun 2013 02:25:33 +0000"],
["Sender", "sender@mydomain.com"]]

我假设这会反序列化为一个键/值对列表,但我无法让它工作。显然 Content-Type 项目更复杂。

任何人都可以使用 ServiceStack 或内置 NET 反序列化器帮助将其解析为列表或 poco 吗?

最佳答案

不幸的是,第 3 方 API 在 [["key","value"],...] 数组中返回 JSON,而不是 {"key:"value", ...}。后者会很多更容易解析成这样的典型类:

public class Foo
{
public string Received {get; set;}
[DataMember(Name = "Content-Type")]
public string ContentType {get; set;}
...
}

它返回的方式是一个值的匿名列表,包含更多的匿名列表,其中0值是键,1值是值。

我还没有尝试过,但您可能想根据 this SO answer 尝试反序列化为匿名类型的动态列表

List<JsonObject> jsonObject = JsonArrayObjects.Parse(json);
jsonObject.PrintDump(); // show data

然后为了方便起见,您可以编写一个映射例程来将 jsonObject 复制到一个更具可读性的类。

更新:我写了一些代码来测试。不是那么漂亮,但它确实可以按原样访问已解析的 JSON。

string json = @"[[""Received"", ""by luna.mailgun.net with SMTP mgrt 8765806286401; Fri, 14 Jun 2013 02:25:33 +0000""],
[""Content-Type"", [""multipart/mixed"", {""boundary"": ""199d7350597e43c0af0e4c814b8a35af""}]],
[""Mime-Version"", ""1.0""],
[""Subject"", ""Test Message""],
[""From"", ""Test Sender <sender@mydomain.com>""],
[""To"", ""Test Receiver <receiver1@mydomain.com>""],
[""Reply-To"", ""replyto@mydomain.com""],
[""Message-Id"", ""<20130614022533.18419.66130@mydomain.com>""],
[""X-Mailgun-Sid"", ""WyIzOTUwOCIsICJuZWlsLmRvYnNvbkBleGFsdGdyb3VwLmNvbS5hdSIsICI4ZjY3OCJd""],
[""Date"", ""Fri, 14 Jun 2013 02:25:33 +0000""],
[""Sender"", ""sender@mydomain.com""]]";

List<JsonObject> jsonObject = JsonArrayObjects.Parse(json);
// jsonObject.PrintDump(); // show data

string received = jsonObject[0].Values.First();
string contentType = jsonObject[1].Values.First();
List<JsonObject> contentTypeValues = JsonArrayObjects.Parse(jsonObject[1].Values.First());
string boundary = contentTypeValues[1].Values.First();
string mimeVersion = jsonObject[2].Values.First();

Console.WriteLine(string.Format("received: {0}", received));
Console.WriteLine(string.Format("contentType: {0}", contentType));
Console.WriteLine(string.Format("boundary: {0}", boundary));
Console.WriteLine(string.Format("mimeVersion: {0}", mimeVersion));

关于c# - 如何使用 Mailgun webhook 从邮件 header 解析 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com