2012-04-23 9 views
0

我意识到已经发布了很多有关ADO.Net实体序列化的问题,但是我没有找到一个真正解决我想做的事情的运气。ado.net实体的裸骨骼浅序列化

基本上,我需要一个真正的骨骼,浅层JSON或ADO.Net实体的简单对象表示。目的是改变记录;即当记录将要改变时,我想在“之前”和“之后”之间截取其数据的副本,并记录更改。

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

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

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

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. 
    } 
    } 
} 
+0

真的希望有一些完全一致的东西;我对这个项目的压缩时间非常紧迫,只需要一个快速而又脏的解决方案(不一定是最好的解决方案)。 – DanM 2012-04-23 16:30:29

+0

转换器可能不够快速,但第一部分是。创建一个类来保存数据,创建一个对象,用数据填充它,然后序列化它。这是一份30秒的工作。 – 2012-04-23 16:31:46

+0

或者只是序列化从数据库中返回的对象。你已经有一个我看到的Employee对象。只需将它传递给我在我的答案中概述的序列化程序。 – 2012-04-23 16:33:28