#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 в вашем методе сериализации.