Подтвердить что ты не робот

Json.Net - Сериализовать имя свойства без кавычек

Я пытаюсь заставить Json.Net сериализовать имя свойства без меток кавычек и затруднять поиск документации в Google. Как я могу это сделать?

Это в очень небольшой части большого Json-рендера, поэтому я бы предпочел либо добавить атрибут свойства, либо переопределить метод сериализации в классе.

В настоящее время он выглядит следующим образом:

"event_modal":
{
    "href":"file.html",
    "type":"full"
}

И я надеюсь, что он будет выглядеть так: (href и type без кавычек)

"event_modal":
{
    href:"file.html",
    type:"full"
}

Из класса:

public class ModalOptions
{
    public object href { get; set; }
    public object type { get; set; }
}
4b9b3361

Ответ 1

Это возможно, но я советую против него, поскольку это может привести к недействительным JSON, как Марсело и Марк указали в своих комментариях.

Используя библиотеку Json.NET, вы можете добиться этого следующим образом:

[JsonObject(MemberSerialization.OptIn)]
public class ModalOptions
{
    [JsonProperty]
    public object href { get; set; }

    [JsonProperty]
    public object type { get; set; }
}

При сериализации объекта используйте JsonSerializer вместо статического JsonConvert.

Например:

var options = new ModalOptions { href = "file.html", type = "full" };
var serializer = new JsonSerializer();
var stringWriter = new StringWriter();
using (var writer = new JsonTextWriter(stringWriter))
{
    writer.QuoteName = false;
    serializer.Serialize(writer, options);            
}
var json = stringWriter.ToString();

Это даст:

{href:"file.html",type:"full"}

Если вы установили свойство QuoteName экземпляра JsonTextWriter в значение false, имена объектов больше не будут указаны.

Ответ 2

Вы также можете попробовать заменить регулярное выражение на подстановку, которая может обработать любой сериализованный объект, и заменить кавычки для вас.

Например:

var options = new ModalOptions { href = "file.html", type = "full" };
string jsonText = JsonConvert.SerializeObject(options);
string regexPattern = "\"([^\"]+)\":"; // the "propertyName": pattern
Console.WriteLine(Regex.Replace(jsonText, regexPattern, "$1:"));

Это приведет к:

{href:"file.html",type:"full"}

Я создал рабочий веб-пример здесь. Объяснение замен регулярных выражений здесь.