ado.net实体的bare-bones浅层序列化

时间:2012-04-23 15:35:55

标签: c# entity-framework serialization ado.net

我意识到已经发布了大量有关ADO.Net实体序列化的问题,但我没有找到真正能够解决我想做的问题的运气。

基本上,我需要一个非常简单,浅层的JSON或ADO.Net实体的普通对象表示。目的是改变日志记录;也就是说,当一条记录要改变时,我想在#34;之前找到它的数据副本。和"在"之后,记录更改。

我不想要考虑任何导航,复杂或其他属性;只是实体的标量属性。如果我错过了一些只出现在特殊情况下的数据,那很好 - 只是想做一个粗略的日志。理想情况下,我的最终代码应如下所示:

Employee emp = db.Employees.First();

string oldRecordJSON = MySerializer.serialize(emp);

emp.Name = "Fred";
db.saveChanges();

string newRecordJSON = MySerializer.serialize(emp);

ChangeLog.logDBChange("Employees", emp.ID, oldRecordJSON, newRecordJSON, DateTime.Now);

...任何快速&实施MySerializer.serialize的简便方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您只想要员工的某些特定属性,请考虑创建基本模型并将其序列化。

var serializer = new JavaScriptSerializer();
serializer.Serialize(new MyEmployeeModel{ // set fields here});

如果您愿意,可以将其构建为转换器,这就是我的方法。

我有一个界面,IConverter<TInputType, TOutputType>,您可以从中创建一个转换器(或者您想要做的任何事情)到您的代码中。

public interface IEmployeeFromDatabaseToBasicEmployeeModelConverter 
     : IConverter<TheDBType, MyEmployeeModel>{}

public class EmployeeFromDatabaseToBasicEmployeeModelConverter :
                               IEmployeeFromDatabaseToBasicEmployeeModelConverter 
{
  public MyEmployeeModel Invoke(TheDBType myDbTypeObject)
  {
     return new MyEmployeeModel{
      // set properties.
     }
  }
}