Невозможно прочитать TimeZoneInfo из документа MongoDB - PullRequest
0 голосов
/ 15 октября 2018

У меня есть объект C #, который содержит свойство TimeZoneInfo.Я могу сохранить его в MongoDB.Но когда я возвращаю его обратно, оно становится пустым.Все остальные свойства отображаются правильно.

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

public class TerminalDto
{
    public string Code { get; set; }
    public GeographyDto Geography { get; set; }
    public GeoCoordinateDto GeoCoordinate { get; set; }
    public TimeZoneInfo TimeZone { get; set; }
}

Мой монго-документ хранится как:

{
    "_id": "5bc4601d5d46855e6c8a337b",
    "Code": "AK",
    "Geography": {
        "City": "Akron",
        "State": {
            "Name": "OHIO",
            "Code": "OH"
        }
    },
    "GeoCoordinate": {
        "Latitude": "40.97665",
        "Longitude": "-81.464607"
    },
    "TimeZone": {
        "_id": "Eastern"
    }
}

Когда я читаю его обратно, мой DTOсвойства заполнены, за исключением TimeZone info.

{
    "_id": "5bc4601d5d46855e6c8a337b",
    "Code": "AK",
    "Geography": {
        "City": "Akron",
        "State": {
            "Name": "OHIO",
            "Code": "OH"
        }
    },
    "GeoCoordinate": {
        "Latitude": "40.97665",
        "Longitude": "-81.464607"
    },
    "TimeZone": {} // Empty Here
}

Мой терминал-репозиторий выглядит примерно так:

public class TerminalRepository
{
    public TerminalRepository(IMongoConnectionFactory mongoConnectionFactory)
    {
        this.collection = mongoConnectionFactory.GetCollection<TerminalDto>();
    }

    private readonly IMongoCollection<TerminalDto> collection;

    public async Task<IEnumerable<TerminalDto>> GetTerminals(int scenarioId)
    {
        var filter = Builders<TerminalDto>.Filter.Eq(t => t.ScenarioId, scenarioId);
        var dtos = (await this.collection.FindAsync(filter)).ToList();
    }
}

Я пытался искать в официальной документации MongoDB, но не смог найти никакой информации, связанной сна хранение TimeZoneInfo.

Как мне это решить?

1 Ответ

0 голосов
/ 15 октября 2018

Не следует сериализовать класс TimeZoneInfo в ваш документ, а просто свойство .Id.Есть много способов сделать это, но один из них будет с «свойством собеседника», например:

public class TerminalDto
{
    // ... your other properties ...

    public string TimeZoneId { get; set; }

    [BsonIgnore]
    public TimeZoneInfo TimeZone
    {
        get
        {
            return TimeZoneInfo.FindSystemTimeZoneById(this.TimeZoneId);
        }

        set
        {
            this.TimeZoneId = value.Id;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...