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; }
}
Ответы
Ответ 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"}
Я создал рабочий веб-пример здесь.
Объяснение замен регулярных выражений здесь.