Разрешение конфликтов между атрибутами и отношениями в JsonApiSerializerC#

Место общения программистов C#
Anonymous
Разрешение конфликтов между атрибутами и отношениями в JsonApiSerializer

Сообщение Anonymous »

Я работаю над программой на C#, которая будет интегрироваться с внешним REST API, который утверждает, что совместим с JSON:API. Для целей (де)сериализации я использую библиотеку JsonApiSerializer.
К сожалению, я столкнулся с небольшой проблемой: хотя она утверждает, что совместима с JSON:API, сущность API Person включает в себя как атрибут с именем гендер, так и отношения с именем гендер.
Таким образом:
  • когда я определяю поле для одного, Newtonsoft (это то, что JsonApiSerializer использует под капотом) паникует, потому что не может обработать другое.
  • когда я пытаюсь определить поля для обоих, он паникует, потому что существует несколько свойств с одним и тем же именем.
Как мне решить эту проблему? В идеале я хотел бы игнорировать гендерные отношения и просто использовать атрибут.
Вот минимальный воспроизводимый пример:
using Newtonsoft.Json;
using JsonApiSerializer.JsonApi;

public class Person
{
public int Id { get; set; }

#region Using Attribute
// Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current
// JSON object (e.g. {"name":"value"}) into type 'System.String' because
// the type requires a JSON primitive value (e.g. string, number, boolean, null)
// to deserialize correctly.
public string Gender { get; set; }
#endregion

#region Using Reference
// JsonApiSerializer.Exceptions.JsonApiFormatException: 'Expected to find
// json object at path 'data.attributes.gender' but found 'Female''
public Relationship Gender { get; set; } // Gender is the related entity's class.
#endregion

#region Using Both
[JsonProperty("gender")]
public string GenderAttribute { get; set; }
[JsonProperty("gender")]
public Relationship GenderRelationship { get; set; }
// Newtonsoft.Json.JsonSerializationException: 'A member with the name
// 'gender' already exists on 'PlanningCenterApi.RawData.People.Person'.
// Use the JsonPropertyAttribute to specify another name.'
#endregion
}

Вернуться в «C#»