Как добавить комментарии к выводам Json.NET?

Можно ли автоматически добавлять комментарии к сериализованному выводу из JSON.Net?

В идеале я бы подумал, что это похоже на следующее:

public class MyClass 
{
    [JsonComment("My documentation string")]
    public string MyString { get; set; }
}

или (даже лучше, если можно избежать аннотаций):

public class MyClass 
{
    /// <summary>
    /// My documentation string
    /// </summary>
    public string MyString { get; set; }
}

который будет производить:

{ 
    //My documentation string
    "MyString": "Test"
}

Причина, по которой я спрашиваю, заключается в том, что мы используем Json.NET для сериализации файла конфигурации, который впоследствии можно было изменить вручную. Я хотел бы включить документацию в свои классы конфигурации С# и воспроизвести ее в JSON, чтобы помочь тем, кто может изменить файл позже.

Обновление. Как указано в RoToRa ниже, комментарии не могут быть технически разрешены в спецификации JSON (см. удобные синтаксические диаграммы на http://www.json.org). Однако таблица функций на сайте Json.NET включает в себя:

Поддержка чтения и записи комментариев

и Newtonsoft.Json.JsonTextWriter.WriteComment(string), который выводит комментарий. Я заинтересован в аккуратном способе создания комментариев, а не непосредственно с помощью JsonTextWriter.

Ответы

Ответ 1

Json.NET JsonSerializer автоматически не выводит комментарии при сериализации. Вам нужно будет написать свой JSON вручную, используя JsonTextWriter или LINQ to JSON, если вы хотите комментировать

Ответ 2

Проблема заключается в том, что JSON в качестве формата файла не поддерживает комментарии. Одна вещь, которую вы могли бы сделать - если приложение, читающее JSON файл, разрешает это, - использовать дополнительные свойства в качестве комментариев, предложенных в этом вопросе: Можно ли использовать комментарии в JSON?

Ответ 3

Как уже сказал @RoToRa, JSON не разрешает комментировать.

Если вам все еще нужны комментарии, и вы хотите вывести правильный JSON, вы можете просто сделать комментарии частью фактических данных JSON, изменив структуру данных. Например:

{
    "MyString": {
        "doc":   "My documentation string",
        "value": "Test"
    } 
}