Я десериализация серии объектов из стороннего источника. Есть ряд разных форматов, но как только я их покинул, я хочу, чтобы у всех они были общий интерфейс. Так что у меня есть мой общий интерфейс ibusinessevent . Один из моих конкретных классов называется ukbusinessevent < /p>
internal class UkBusinessEvent : IBusinessEvent {
public BusinessEventType EventType { private get; set; }
public DateTime EventDate { private get; set; }
public IEnumerable
People { private get; set; }
public DateTime Date => EventDate;
public string Description => EventType.Description;
public IEnumerable Names => People.Select(p => p.Name);
}
< /code>
EventType, EventDate и People соответствует структуре входящего JSON, но они используются только для десеризации. Я не хочу, чтобы кто -нибудь получал доступ к данным через эти свойства, поэтому я дал им частные добычи. Date , description и имена Реализуйте интерфейс, и они только для чтения.public IEnumerable People { get; set; }
< /code>
Then People заполнен, и код работает.
Почему Getter должен быть публичным, чтобы это работало? EventType и eventDate работать нормально с частными геттерами.using System.Text.Json;
namespace ConsoleApp10 {
internal class Program {
static void Main(string[] args) {
string json = @"[
{
""eventType"": {
""code"": ""A"",
""description"": ""Type A Event""
},
""eventDate"": ""2011-05-10T00:00:00Z"",
""people"": [
{
""name"": ""Jane Jones"",
""role"": ""Accountant""
},
{
""name"": ""Jack Smith"",
""role"": ""Auditor""
}
]
},
{
""eventType"": {
""code"": ""B"",
""description"": ""Type B Event""
},
""eventDate"": ""2009-01-05T00:00:00Z"",
""people"": [
{
""name"": ""William James"",
""role"": ""Manager""
},
{
""name"": ""Sally Wilson"",
""role"": ""Accountant""
}
]
}
]";
List businessEvents = JsonSerializer.Deserialize(json, JsonSerializerOptions.Web);
foreach(IBusinessEvent businessEvent in businessEvents){
Console.WriteLine(businessEvent.Description);
Console.WriteLine(businessEvent.Date);
foreach(string name in businessEvent.Names) {
Console.WriteLine(name);
}
}
}
}
internal interface IBusinessEvent {
DateTime Date { get; }
string Description { get; }
IEnumerable Names { get; }
}
internal class UkBusinessEvent : IBusinessEvent {
public BusinessEventType EventType { private get; set; }
public DateTime EventDate { private get; set; }
public IEnumerable People { private get; set; }
public DateTime Date => EventDate;
public string Description => EventType.Description;
public IEnumerable Names => People.Select(p => p.Name);
}
internal class BusinessEventType {
public string Code { get; set; }
public string Description { get; set; }
}
internal class Person {
public string Name { get; set; }
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... ate-getter
System.text.json не десериализует ienumerable с частным получателем ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
System.text.json.jsoneserializer.deserialize не десериализует объект правильно
Anonymous » » в форуме C# - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
System.text.json.jsoneserializer.deserialize не десериализует объект правильно [дублировать]
Anonymous » » в форуме C# - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-