gpt4 book ai didi

c# - 无法从 MongoDB 文档中读取 TimeZoneInfo

转载 作者:可可西里 更新时间:2023-11-01 10:09:10 28 4
gpt4 key购买 nike

我有一个包含 TimeZoneInfo 属性的 C# 对象。我能够将它保存到 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; }
}

我的 mongo 文档存储为:

{
"_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 相关的信息。

我该如何解决?

最佳答案

您不应将 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;
}
}
}

关于c# - 无法从 MongoDB 文档中读取 TimeZoneInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52814578/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com