C#-TableServiceContext:序列化时无法转换为不受支持的类型“ DateTimeOffset”异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-TableServiceContext:序列化时无法转换为不受支持的类型“ DateTimeOffset”异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2797字,纯文字阅读大概需要4分钟。
内容图文
![C#-TableServiceContext:序列化时无法转换为不受支持的类型“ DateTimeOffset”异常](/upload/InfoBanner/zyjiaocheng/676/a10792c4881e4fdd92a0c97f905e4a57.jpg)
我一直在尝试为连接到Azure Table Services的Azure创建新的MVC Web角色设置.我在VS 2012中使用了1.8 Azure SDK和Azure项目模板.我将所有nuget软件包更新为最新版本,尽管我仍然怀疑WCF对DateTimeOffset的支持存在问题,这在版本5中是新的.
我有一个简单的污垢对象,如下所示:
[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程序包仅在一个多星期前发布,也许还没有打算发布.我无法使其与开发人员存储或实时Azure一起使用,但是要恢复到分别从10月和6月开始的1.8和1.7 SDK附带的1.7程序集,则需要进行一些重写,但它确实适用于两个开发人员存储和Azure.
解决方法:
在我看来,您在混合使用各种访问方式. TableServiceContext来自1.x存储API,而TableEntity来自2.0存储API.
如果要使用1.x库,请派生自TableServiceEntity而不是TableEntity,并且不要使用这些属性.
如果要使用2.0库,请使用CloudTable和TableOperation代替TableServiceContext.
内容总结
以上是互联网集市为您收集整理的C#-TableServiceContext:序列化时无法转换为不受支持的类型“ DateTimeOffset”异常全部内容,希望文章能够帮你解决C#-TableServiceContext:序列化时无法转换为不受支持的类型“ DateTimeOffset”异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。