我们如何从动态对象转换为具体对象>?

how do we convert from a dynamic object to a concrete object>?

我正在尝试将 dynamic 类型显式转换为具体类型并获得以下内容:

Newtonsoft.Json: Can not convert from System.DateTimeOffset to System.DateTime.

我有以下具体模型:

public class RtfTiffMatchModel : TableEntity
{
    public RtfTiffMatchModel()
    {
    }

    public string visitId { get; set; }
    public DateTime rtfReceivedAt { get; set; }
    public string rtfFilename { get; set; }
    public DateTime tifReceivedAt { get; set; }
    public string tifFilename { get; set; }
    public string rtfRowKey { get; set; }
    public string tifRowKey { get; set; }
}

我也有这个动态类型:

{
  "visitId": "bbbb-2021-11305",
  "rtfReceivedAt": "2021-11-15T17:45:10.2006842Z",
  "rtfFilename": "usap_abs_adams_alex_10202021_bbbb-2021-11305_000_111_20211024.rtf",
  "tifReceivedAt": "2021-11-15T17:45:10.2006842Z",
  "tifFilename": "usap_ar_adams_alex_10202021_bbbb-2021-11305_000_111_20211024_0800.tif",
  "rtfRowKey": "FromjjjvilleBbbBilling",
  "tifRowKey": "FromjjjvilleBbbBilling",
  "PartitionKey": "FromjjjvilleBbbBilling",
  "RowKey": "68955313-8f66-4bf0-ad6d-abf635bdb537",
  "Timestamp": "0001-01-01T00:00:00+00:00",
  "$AzureWebJobsParentId": "e9d2e73d-170a-4367-9c4f-4beb054e79e5"
}

我正在尝试将上面的 dynamic 类型转换为 RtfTiffMatchModel:

        var rtfTiffMatch = new RtfTiffMatchModel { PartitionKey = match.PartitionKey,
            RowKey = match.RowKey,
            rtfReceivedAt = (DateTime)match.rtfReceivedAt,
            rtfFilename = match.rtfFilename,
            rtfRowKey = match.RowKey,
            tifFilename = match.tifFilename,
            tifReceivedAt = (DateTime)match.ReceivedAt,
            tifRowKey = match.RowKey,
            visitId = match.visitId };

*我做错了什么?如何将其转换为具体类型?

来自评论:

(DateTime)match.rtfReceivedAt is throwing your error. Newtonsoft thinks match.rtfReceivedAt is a DateTimeOffset. ((DateTimeOffset)match.rtfReceivedAt).DateTime should work as a quick/dirty fix. See Converting between DateTime and DateTimeOffset.

请注意,您在 tifReceivedAt: (DateTime)match.ReceivedAt 处似乎有错字。你的动态对象上没有ReceivedAt属性。 Here's a dotnetfiddle 显示正在转换。