Поля, которые присваиваются настройкам, появляются в подклассах при сериализации объекта

#c# #json #asp.net-web-api #serialization

#c# #json #asp.net-web-api #сериализация

Вопрос:

У меня есть классы, подобные этому.

 public class Activity
{
   public Guid Id { get; set }
   public string Name { get; set; }
   public Firm RelatedFirm { get; set; }
   public string Email { get; set; }
   public string Notes { get; set; }
}
public class Firm
{
   public Guid Id { get; set }
   public string Title { get; set; }
   public string Email { get; set; }
   public string Notes { get; set; }
}
  

После захвата списка действий я отправляю их в функцию для сериализации. В рамках этой функции выполняется операция сериализации в соответствии с определенными параметрами. Одним из этих параметров являются поля, в которые я хочу, чтобы возвращался ответ. Я хочу вернуть поля Id, Name, RelatedFirm, Email и Notes для действия, и я хочу, чтобы фирме возвращалось только поле Id. Поля, к которым я хочу вернуться в рамках действия, обращаются ко мне, если они находятся в фирме.

Это мой ответ;

 {
  "Id": "9294bc10-d8e1-4590-9703-75b773110d1c",
  "Email": "q@q.com",
  "RelatedFirm": {
     "Id": "ebbe560b-f75d-4daf-9500-89a10487e51f",
     "Email": "x@x.com",
     "Notes": "87654323ıuyt43"
  },
  "Notes": null
}
  

Это также ответ, к которому я хочу прийти;

 {
   "Id": "9294bc10-d8e1-4590-9703-75b773110d1c",
   "Email": "q@q.com",
   "RelatedFirm": {
      "Id": "ebbe560b-f75d-4daf-9500-89a10487e51f"
    },
    "Notes": null
}
  

Есть ли какой-либо способ остановить это?

Комментарии:

1. «Поля, которые присваиваются настройкам, появляются в подклассах при сериализации объекта» — в коде не отображаются подклассы — можете ли вы пояснить, что вы там имеете в виду? но это звучит так, как будто вы говорите об «условной сериализации», которая … это немного продвинутая тема. Честно говоря, я бы посоветовал не пытаться этого делать, а вместо этого использовать целевые типы , т. Е. Когда вы хотите сериализовать что-то, что выглядит как Firm , но имеет только Id тип , который имеет только Id

2. Если анонимный тип является опцией, то Linq это ваш друг, вы можете использовать что-то вроде var nObj = activityList.Select(s => new { s.Id, s.Email, s.Name, s.Notes, RelatedFirm = new { Id = s.RelatedFirm.Id } }).ToArray(); и создать объект anonymouse в вашем методе сериализации.