我意识到已经发布了大量有关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
的简便方法?
谢谢!
答案 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.
}
}
}