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 中的当前记录进行比较,以查看自该用户检索到它后是否有其他人对其进行了更新(非常正常)。
但是该字符串并没有反序列化回字节数组,它似乎试图将其放入单个字节中。
这应该是一个非常普遍的问题。有任何想法吗?
我们可以将 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 的例子