C# 我应该如何序列化一些简单的审计数据以存储在SQL表中?
我在SQL server中有一个审计表。记录每个高级用户操作的条目,例如更新记录、添加新记录、删除记录等 我有一个检测和记录所有更改的机制(在.NET中,而不是作为数据库中的触发器),并且有一个记录字段名、以前的值和新值的对象集合。我希望将字段更改存储在同一个表中(而不是单独的表中,也就是说,我不希望对此进行全面的规范化关系设计),因此我有一个blob字段(也可以是字符字段),我希望在其中记录字段级审核数据 我想我只是想获取我的对象图(基本上只是这些字段更改对象的列表)并将其序列化,然后将序列化的版本存储在表中 稍后,当用户想要查看更改时,我可以反序列化字段并重建字段更改集合C# 我应该如何序列化一些简单的审计数据以存储在SQL表中?,c#,serialization,C#,Serialization,我在SQL server中有一个审计表。记录每个高级用户操作的条目,例如更新记录、添加新记录、删除记录等 我有一个检测和记录所有更改的机制(在.NET中,而不是作为数据库中的触发器),并且有一个记录字段名、以前的值和新值的对象集合。我希望将字段更改存储在同一个表中(而不是单独的表中,也就是说,我不希望对此进行全面的规范化关系设计),因此我有一个blob字段(也可以是字符字段),我希望在其中记录字段级审核数据 我想我只是想获取我的对象图(基本上只是这些字段更改对象的列表)并将其序列化,然后将序列化
那么,在.NET3.5中最好使用什么样的框架/序列化格式呢?我不太在意对象的大小,它也不必是人类可读的。要序列化对象,您需要使用[Serializable]属性标记对象类,或者实现ISerializable接口,即
[Serializable]
public class MySerializableClass
{
...
}
或
}
还可以看看在哪里可以选择要将对象序列化到的数据类型。我可能会使用xml,尽管二进制文件对于大小/性能来说是最好的
有了xml,您仍然可以使用SQL查询数据,而不必太担心对象的版本控制。如果使用二进制,则必须考虑版本控制,以防对象发生变化。 < P>避免长期存储(例如在数据库中)的<代码> BinaryFormatter <代码>;因为它包含类型/程序集元数据,您很容易发现以后无法反序列化数据。另外,它是特定于.NET的!所以,如果你想从其他平台阅读它,你就有点泄气了 JSON(通过JSON.NET)将成为一种简单、可读性好、占用空间小的格式。通过
XmlSerializer
或DataContractSerializer
生成Xml是可以的,但可读性较差。如果您最关心的是空间,那么可能是“协议缓冲区”(protobuf net和其他)之类的东西—如果没有支持的实用程序dll,几乎不可能读取,但是非常快速和高效
我个人很想使用JSON。这意味着我可以在SSMS中读取审计…BinaryFormatter对于长期存储来说可能有风险。有很多方法可以永久地打破这一局面。。。
using System.Runtime.Serialization;
public class MySerializableClass : ISerializable
{
SerializationInfo info;
StreamingContext context;
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
this.info = info;
this.context = context;
// implementation code goes here
}