如何找到匿名对象的所有DateTime属性?

How to find all DateTime properties of anonymous object?

提问人:PPN 提问时间:2/11/2021 最后编辑:PPN 更新时间:3/2/2021 访问量:252

问:

我想在服务器端代码中处理它们之前,将从客户端收到的所有日期转换为 UTC。我正在考虑使用ActionFilter,我想从请求有效负载中找到所有日期字段并将其转换为UTC日期。我知道 Reflection 有助于按其类型查找属性,但在 Anonymous 对象的情况下不起作用。

下面是我的代码示例

        //convert body to object
        var result = JsonConvert.DeserializeObject<object>(rawRequest);
        var type = result.GetType();

        //get collection of properties from object
        var properties = result.GetType().GetProperties();
        foreach (var property in properties)
        {
            //if data type is DateTime then convert into UTC
            if (property.PropertyType == typeof(DateTime?) || property.PropertyType == typeof(DateTime))
            {
                string TimeZoneId = "India Standard Time";
                if (HttpContext.Current.Request.Headers["TimeZoneId"] != null)
                {
                    TimeZoneId = HttpContext.Current.Request.Headers.GetValues("TimeZoneId").FirstOrDefault();
                }
                var localTimeZone = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneId);
                var Date = DateTime.SpecifyKind(((DateTime?)property.GetValue(result, null)) ?? DateTime.Now, DateTimeKind.Unspecified);
                var localTime = TimeZoneInfo.ConvertTimeToUtc(Date, localTimeZone);
            }
        }
C# 反射 时区 UTC 属性信息

评论

0赞 Matt Johnson-Pint 2/12/2021
你好。请编辑您的问题,将代码作为文本包含在内,而不是作为代码的图片。另请阅读:如何提出一个好问题?和 如何创建 Stack Overflow 帮助中心的最小、可重现示例。谢谢。
0赞 Matt Johnson-Pint 2/12/2021
此外,一般来说,不建议尝试将所有值从特定时区任意转换为 UTC。这可能会导致以后出现问题,例如,当应用程序的某些新部分需要以 UTC 或其他时区进行输入时。请参阅我对类似问题的回答:stackoverflow.com/a/51618873/634824
0赞 PPN 2/12/2021
@MattJohnson品脱,谢谢。我已经编辑了我的问题陈述,以包含代码作为文本。请建议处理我们希望以用户时区显示日期的方案的最佳方法。我做了一些研究,建议以UTC格式保存日期,并在演示时转换为用户的时区。我想为我现有的应用程序执行此操作,因此希望全局和通用地处理,而无需对每个类或文件进行更改。
0赞 Arvind Kumar Avinash 2/18/2021
它似乎不是 Java。它是哪种语言?在发布问题时,应始终标记相应的语言。

答: 暂无答案