C# 在使用Json.Net的WebAPI 2中,SQL Server时间戳序列化但不反序列化
SQL Server时间戳成为POCO对象中的字节[]。对象被序列化,时间戳变成一个基64字符串 “aaaaaaaa2qde=”就是一个例子 将对象发回服务器时,在模型验证期间,您会得到: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中的当前记录进行比较,以查看自该用户检索到该记录后是否有其他人对其进行了更新(非常正常) 但是字符串并没有反序列化回一个字节数组,它似乎试图将其放入一个字节中 这应该是一
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。不依赖反序列化程序。。。格式化程序。。。但这只是一个建议(为我工作多年;)