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/