Как изменить имена свойств при сериализации с помощью Json.net?

У меня есть некоторые данные в объекте C # DataSet. Я могу сериализовать его прямо сейчас, используя конвертер Json.net, подобный этому

DataSet data = new DataSet(); // do some work here to populate 'data' string output = JsonConvert.SerializeObject(data); 

Тем не менее, это использует имена свойств из data при печати в .json-файл. Я хотел бы изменить имена свойств как нечто другое (скажем, изменить «foo» на «bar»).

В документации Json.net в разделе «Сериализация и десериализация JSON» → «Атрибуты сериализации» говорится: «JsonPropertyAttribute … позволяет настроить имя». Но нет примера. Кто-нибудь знает, как использовать JsonPropertyAttribute, чтобы изменить имя свойства на что-то еще?

( Прямая ссылка на документацию )

Документация Json.net выглядит скудной. Если у вас есть отличный пример, я попытаюсь добавить его в официальную документацию. Благодаря!

Вы можете украсить свойство, которое вы хотите контролировать его имя, с атрибутом [JsonProperty] который позволяет указать другое имя:

 [JsonProperty(PropertyName = "FooBar")] public string Foo { get; set; } 

Документация: Атрибуты сериализации

Если вы не имеете доступа к classам для изменения свойств или не хотите всегда использовать одно и то же свойство переименования, переименование также может быть выполнено путем создания настраиваемого распознавателя.

Например, если у вас есть class под названием MyCustomObject , который имеет свойство LongPropertyName , вы можете использовать собственный …

 public class CustomDataContractResolver : DefaultContractResolver { public static readonly CustomDataContractResolver Instance = new CustomDataContractResolver (); protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); if (property.DeclaringType == typeof(MyCustomObject)) { if (property.PropertyName.Equals("LongPropertyName", StringComparison.OrdinalIgnoreCase)) { property.PropertyName = "Short"; } } return property; } } 

Затем вызовите сериализацию и поставьте преобразователь

  var result = JsonConvert.SerializeObject(myCustomObjectInstance, new JsonSerializerSettings { ContractResolver = CustomDataContractResolver.Instance }); 

И результат будет сокращен до {«Short»: «prop value»} вместо {«LongPropertyName»: «prop value»}

Дополнительная информация о пользовательских резольверах здесь

Существует еще один способ сделать это, в котором используется определенная NamingStrategy , которая может быть применена к classу или свойству, украсив их с помощью [JSonObject] или [JsonProperty] .

Существуют предопределенные страtagsи именования, такие как CamelCaseNamingStrategy , но вы можете реализовать свои собственные.

  • Невозможно десериализовать lambda
  • jackson - Как обрабатывать (десериализовать) вложенный JSON?
  • Как сериализовать Java-примитивы с помощью Jersey REST
  • Исключение «Исключительная привязка к реляционной ссылке» с JSON.Net
  • Использование преобразователей Json.NET для десериализации свойств
  • Автоматическая десериализация свойств C #
  • Преобразование любого объекта в массив байтов в java
  • ТипNameHandling предостережение в Newtonsoft Json
  • Jackson ObjectMapper - указать порядок сортировки свойств объекта
  • Как получить json.net для сериализации членов classа, полученных из List ?
  • gwt - Использование списка в вызове RPC?
  • Interesting Posts

    stdlib и цветной выход в C

    Есть ли способ OS для отказа от показа рекламы в Windows 8?

    Почему приложение .NET 4 знает, что .NET 4 не установлен

    jQuery отправляет действительный json в тело запроса

    Как я могу оценивать код C # динамически?

    Excel Условное форматирование Несколько баров данных и значки данных в одной ячейке

    Сравнение времени неверно при выборе 12:00

    Добавление кнопок в Google Таблицы и установка значения для ячеек при нажатии

    Как сделать Firefox 39 отображать заголовок страницы активной вкладки в строке заголовка окна?

    Каковы различия между «=» и «<-» в R?

    Когда переходить от безопасности, управляемой контейнером, к альтернативам, таким как Apache Shiro, Spring Security?

    TempData keep () vs peek ()

    Как создать zip / tgz в Linux, чтобы у Windows были правильные имена файлов?

    Как работает оператор побитового дополнения (~ тильда)?

    Выполнение стартовых заданий как непривилегированных пользователей

    Давайте будем гением компьютера.