C# TableServiceContext:Can';t转换为不受支持的类型';DateTimeOffset';序列化时发生异常

C# TableServiceContext:Can';t转换为不受支持的类型';DateTimeOffset';序列化时发生异常,c#,azure,azure-table-storage,C#,Azure,Azure Table Storage,我一直在尝试为Azure获取一个新的MVC web角色设置,连接到Azure表服务。我在VS 2012中使用了1.8 Azure SDK和Azure项目模板。我将所有nuget软件包更新为最新版本,尽管我仍然怀疑版本5中新增的对DateTimeOffset的WCF支持存在问题 我有一个非常简单的对象,如下所示: [DataServiceEntity()] [DataServiceKey("PartitionKey", "RowKey")] public class AppUser : Table

我一直在尝试为Azure获取一个新的MVC web角色设置,连接到Azure表服务。我在VS 2012中使用了1.8 Azure SDK和Azure项目模板。我将所有nuget软件包更新为最新版本,尽管我仍然怀疑版本5中新增的对DateTimeOffset的WCF支持存在问题

我有一个非常简单的对象,如下所示:

[DataServiceEntity()]
[DataServiceKey("PartitionKey", "RowKey")]
public class AppUser : TableEntity
{
}
我有一个MVC操作来创建一个新的AppUser,如下所示:

var connectionString = CloudConfigurationManager.GetSetting("DataStorageConnectionString");
var storageAccount = CloudStorageAccount.Parse(connectionString);
var tableClient = storageAccount.CreateCloudTableClient();
var ctx = new TableServiceContext(tableClient);

ctx.AddObject("Users", user);
var response = ctx.SaveChanges();
当此代码在我的MVC web角色中执行时,我的connectString的结果是UseDevelopmentStorage=true

SaveChanges调用导致以下异常:

System.NotSupportedException was caught
  HResult=-2146233067
  Message=Can't cast to unsupported type 'DateTimeOffset'
  Source=System.Data.Services.Client
  StackTrace:
       at System.Data.Services.Client.ClientConvert.GetEdmType(Type propertyType)
       at System.Data.Services.Client.DataServiceContext.WriteContentProperty(XmlWriter writer, String namespaceName, ClientProperty property, Object propertyValue)
       at System.Data.Services.Client.DataServiceContext.WriteContentProperties(XmlWriter writer, ClientType type, Object resource, EpmSourcePathSegment currentSegment, Boolean& propertiesWritten)
       at System.Data.Services.Client.DataServiceContext.CreateRequestData(EntityDescriptor box, Boolean newline)
       at System.Data.Services.Client.DataServiceContext.SaveResult.CreateChangeData(Int32 index, Boolean newline)
       at System.Data.Services.Client.DataServiceContext.SaveResult.BeginNextChange(Boolean replaceOnUpdate)
       at System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options)
       at MvcWebRole1.Controllers.UserController.Create(AppUser user) in c:\src\Azure1\MvcWebRole1\Controllers\UserController.cs:line 67
  InnerException: 
查看TableEntity时,Timestamp属性的类型为DateTimeOffset。我一直在调查我的构建中的一个依赖项是旧的并且会引起问题,但是我还没有发现任何旧版本。据我所知,我正在使用最新版本的SDK,最新版本的项目模板,并更新了所有的软件包,所以我现在有点不知所措

**更新12/26**


我创建了一个新的控制台应用程序,用于仅使用存储客户端进行测试,并且能够完美地复制该行为。Azure存储客户机nuget软件包仅在一周多前发布,也许它还没有打算发布。我无法让它与dev存储或live Azure配合使用,但是,要恢复到1.7程序集(分别从10月和6月开始随1.8和1.7 SDK一起提供),需要进行一些重写,但它确实适用于开发人员存储和Azure。

您是否尝试过不从TableEntity派生,而只是将自己的PartitionKey/RowKey属性实现为字符串,将时间戳实现为DateTime


此外,请尝试对real Azure存储帐户进行测试。在过去几年中,我发现仿真存储帐户并不是一个用于Azure存储开发的有用的测试平台。

在我看来,您在混合访问方法。TableServiceContext来自1.x存储API,而TableEntity来自2.0存储API

如果要使用1.x库,请从TableServiceEntity而不是TableEntity派生,不要使用这些属性。
如果要使用2.0库,请使用CloudTable和TableOperation,而不是TableServiceContext。

我尝试了这两种建议,但都不起作用。生产系统也给了我同样的问题,尽管这个问题似乎是在请求发送之前的序列化过程中表现出来的。这又让我回到了依赖关系的一些问题上。对不起,还没有完全完成。我不能从TableEntity继承,但API要求该属性或从ITableEntity继承,ITableEntity仍然要求Timestamp属性的类型为DateTimeOffset。