Rest API: моделирование родительского и дочернего объекта, дочернего идентификатора и дочернего объекта в JSON через Newtonsoft.Json - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть два jsons ниже:

BooksJson: [{"Id":1, "AuthorId":1}]

AuthorsJson: [{"Id":1}]

Каждый из которых десериализован и объединен authorId для создания коллекции книг, booksWithAuthor.

var books = JsonConvert.DeserializeObject<List<Book>>(BooksJson);
var authors = JsonConvert.DeserializeObject<List<Author>>(AuthorsJson);

IEnumerable<Book> booksWithAuthor = GetBooksWithAuthor(books,authors)

public class Book
{
    public int Id { get; set; }
    public Author Author { get; set; }
    public int AuthorId { get; set;}
}

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

booksWithAuthorвозвращается как ответ API, как показано ниже:

 [{"Id":1, "AuthorId":1, Author:{Id: 1} }]

Мой вопрос:

A. Возврат как объекта AuthorId, так и объекта Author в объекте книги

  1. Это анти-паттерн?

  2. Есть ли способ удалить AuthorId без создания другого класса Book, как показано ниже?

    public class BookApi { public int Id { get; set; } public Author Author { get; set; } }

1 Ответ

0 голосов
/ 11 ноября 2019

Лично я бы сделал свойство AuthorId частным или защищенным, поскольку вы никогда не получите прямой доступ к идентификатору автора книги. Если вам нужен идентификатор автора, используйте вместо этого bool.Author.Id.
Так что да, я считаю это плохой практикой. Но иногда вы не можете обойти эти проблемы. Поэтому от того, что вы делаете со всеми этими данными, зависит, сможете ли вы этого избежать или нет.
В этом случае у вас фактически есть два файла JSON, а в книге JSON нет автора, только AuthorId. Я бы создал новый класс BookWithAuthor, который будет сгенерирован из класса Book и класса Author вместе. Этот BookWithAuthor не будет иметь AuthorId, поскольку у него уже есть Author.

Но, опять же, от того, будет ли это практично, зависит от остальной части кода.

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