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

C# 在使用Json.Net的WebAPI 2中,SQL Server时间戳序列化但不反序列化,c#,asp.net-web-api,timestamp,json.net,C#,Asp.net Web Api,Timestamp,Json.net,SQL Server时间戳成为POCO对象中的字节[]。对象被序列化,时间戳变成一个基64字符串 “aaaaaaaa2qde=”就是一个例子 将对象发回服务器时,在模型验证期间,您会得到: The value 'AAAAAAA2QDE=' is not valid for Byte. 我使用这个值来检查记录的状态,以便与SQL中的当前记录进行比较,以查看自该用户检索到该记录后是否有其他人对其进行了更新(非常正常) 但是字符串并没有反序列化回一个字节数组,它似乎试图将其放入一个字节中 这应该是一

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

“aaaaaaaa2qde=”就是一个例子

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

The value 'AAAAAAA2QDE=' is not valid for Byte.
我使用这个值来检查记录的状态,以便与SQL中的当前记录进行比较,以查看自该用户检索到该记录后是否有其他人对其进行了更新(非常正常)

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

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

我们可以将SQL列(通过类似NHibernate的ORM…)或直接使用ADO.NET映射到类型为
byte[]
的属性,但将此属性设置为受保护的/服务器内部属性。相反,我们可以让另一个
字符串
属性根据需要进行转换:

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); }
}
时间戳
用于内部处理,表示实际字节,
版本
用于客户端。。。已很好地反序列化


NHibernate的一个例子

看看这里:这是一个很好的例子,但是我从一个WebAPI项目中获取和返回数据,与使用数据的客户端无关。在本例中,它是一个基于knockoutjs的web应用程序,但也可能是一个iPhone应用程序。我需要的是一个如何让Json.net将字节数组反序列化回其原始形式的示例。我想让JSON.net正确地反序列化它,谢谢你的建议。不要误解我的意思。上述建议完全遵循POCO。(请勾选此项)。关键是,该字符串几乎可以被任何工具(xml、url…)序列化或使用,因此,当我们使用DB引擎的原生形式(
byte[]
)的时间戳时,我们确实会将其隐藏在外部世界中-将其发布为base64。不依赖反序列化程序。。。格式化程序。。。但这只是一个建议(为我工作多年;)