c# - 在使用 Json.Net 的 WebAPI 2 中,SQL Server 时间戳序列化但不反序列化

标签 c# asp.net-web-api timestamp json.net

SQL Server 时间戳成为 POCO 对象中的 byte[]。对象被序列化,时间戳变成 base 64 字符串。

一个例子是 'AAAAAAA2QDE='

当对象被回发到服务器时,在模型验证期间您将获得:

The value 'AAAAAAA2QDE=' is not valid for Byte.

我正在使用此值来检查记录的状态,以与 SQL 中的当前记录进行比较,以查看自从该用户检索它后是否其他人更新了它(非常正常)。

但是这个字符串并没有反序列化回一个字节数组,看起来它试图把它变成一个字节。

这应该是一个很常见的问题。有什么想法吗?

最佳答案

我们可以映射 SQL 列(通过 NHibernate 之类的 ORM...)或直接使用 ADO.NET 映射到类型为 byte[] 的属性,但使此属性 protected /在服务器内部。相反,我们可以让另一个 string 属性根据需要进行转换:

protected virtual byte[] Timestamp { get; set; }
public virtual string Version
{
    get { return Timestamp.IsEmpty() ? null : Convert.ToBase64String(Timestamp); }
    set { Timestamp = value.IsEmpty() ? null : Convert.FromBase64String(value); }
}

Timestamp 用于内部处理,代表真实的字节,Version 用于客户端......已很好地反序列化。

NHibernate 示例 here

关于c# - 在使用 Json.Net 的 WebAPI 2 中,SQL Server 时间戳序列化但不反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387456/

相关文章:

c# - Entity Framework Core 6.0 中默认情况下字符串不可为空

c# - 跨多个相关表进行批量插入?

c# - 放置异步/等待的最佳做法是什么?

asp.net-mvc - 如何将 Web API 添加到现有的 ASP.NET MVC 4 Web 应用程序项目?

c# - ASP NET Web API 中的路由 - 对于不同版本的 API

datetime - 在观察夏令时的同时解析本地时间(到 UTC)的有序时间戳

C# 如何在继承自 DynamicObject 的类上序列化(JSON、XML)普通属性

.net Core WebApi 内容协商

php - filemtime 在文件修改前后返回相同的值

.net - Entity Framework 模型第一个时间戳