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

Gle*_*Orr 4 c# timestamp json.net asp.net-web-api

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

一个例子是 'AAAAAAA2QDE='

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

The value 'AAAAAAA2QDE=' is not valid for Byte.
Run Code Online (Sandbox Code Playgroud)

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

但是该字符串并没有反序列化回字节数组,它似乎试图将其放入单个字节中。

这应该是一个非常普遍的问题。有任何想法吗?

Rad*_*ler 5

我们可以将 SQL 列(通过 ORM 像 NHibernate...)或直接使用 ADO.NET 映射到 type 的属性byte[],但要将此属性保护/在服务器内部。相反,我们可以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); }
}
Run Code Online (Sandbox Code Playgroud)

Timestamp是内部处理,代表真正的字节,Version是一个客户端...很好DE /序列化。

这里有一个 NHibernate 的例子