Прискорбно, что сторонний API возвращает JSON в [["key", "value"], ...] массиве, а не {"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 as-is.
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 <[email protected]>""],
[""To"", ""Test Receiver <[email protected]>""],
[""Reply-To"", ""[email protected]""],
[""Message-Id"", ""<[email protected]>""],
[""X-Mailgun-Sid"", ""WyIzOTUwOCIsICJuZWlsLmRvYnNvbkBleGFsdGdyb3VwLmNvbS5hdSIsICI4ZjY3OCJd""],
[""Date"", ""Fri, 14 Jun 2013 02:25:33 +0000""],
[""Sender"", ""[email protected]""]]";
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));