Во-первых, попытайтесь получить правильный правильно сформированный JSON. Вы можете использовать этот инструмент для украшения кода . Затем вы можете автоматически создать класс C #, используя json2csharp . Наконец, поскольку у вас есть класс C #, вы можете применить операторы if и проверить, имеет ли свойство значение null.
Сгенерированная оболочка C #:
public class Id
{
public string _type { get; set; }
public string Class { get; set; }
public string RollId { get; set; }
}
public class Datum
{
public string _type { get; set; }
public string Class { get; set; }
public Id Id { get; set; }
public object Data { get; set; }
}
public class Elements
{
public string _type { get; set; }
public List _data { get; set; }
}
public class Root
{
public string _type { get; set; }
public string Class { get; set; }
public Elements Elements { get; set; }
}
public class RootObject
{
public int encoding_version { get; set; }
public Root root { get; set; }
}
Вот одна библиотека через Google. (Который также поднял это и это, которое перечисляет еще несколько звучащих соответствующим образом библиотек.)
Когда я записал combinator синтаксический анализатор в ML, это оказалось довольно громоздким для использования из-за ограничения значения и нетерпеливой оценки, которая вынудила Вас к ЭТА - разворачивают Ваши грамматические правила. Ocaml, как говорят, более ослабляется об ограничении значения, хотя - возможно, Вы будете сэкономлены часть той боли.
В мире OCaml синтаксические анализаторы на основе потоков и Camlp4 являются следующими двумя наиболее распространенными альтернативами. Оба были описаны подробно в предыдущих Статьях в журнале OCaml.
Одноместный синтаксический анализатор combinators сравнительно редок в OCaml, в основном потому что существует несколько более высоких уровней и значительно более эффективных доступных библиотек.