Почему Newtonsoft.Json.JsonConvert.SerializeObject добавляет «_repository» к каждому элементу в моем списке? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть простой метод, который выглядит следующим образом:

public partial class PEUploadBookHistory: DataAccessBase
{
    public string Get()
    {
        List<PEUploadBookHistory> histories = _repository.GetList<PEUploadBookHistory>().ToList();
        string jsonHistories = JsonConvert.SerializeObject(histories);
        return jsonHistories;
    }

    // Other methods like Post and Put, etc
}

И _repository.GetList - это репозиторий Dapper:

public IEnumerable<T> GetList<T>()
{
    IEnumerable<T> entities;
    using (var connection = OpenConnection(_connectionStringName))
    {
        entities = connection.GetList<T>();
    }
    return entities;
}

Строка json, которая возвращается первым методомвыглядит так:

[
  {
    "_repository": {},
    "UploadBookHistoryId": 5467,
    ... other properties ...
  }
]

Я не понимаю, почему он добавляет "_repository": {},. Разве это не должно быть PEUploadBookHistory? Откуда это? Почему? И как мне это изменить?

Вот остальная часть частичного:

[Table("PE_UploadBookHistory")]
public partial class PEUploadBookHistory
{
    [Key]
    public virtual int UploadBookHistoryId { get; set; }
    ... other coluomns ...
}

А вот DataAccessBase

public class DataAccessBase
{
    public Repository _repository = new Repository("SQLConnection");
}

1 Ответ

1 голос
/ 01 ноября 2019

Украсьте это свойство с помощью JsonIgnore:

[JsonIgnore]
public Repository _repository = new Repository("SQLConnection");

Кроме того, вы можете сделать его закрытым.

В качестве альтернативы используйте разные модели для базы данных и JSON.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...