C# ado.net实体的简单浅层序列化

C# ado.net实体的简单浅层序列化,c#,entity-framework,serialization,ado.net,C#,Entity Framework,Serialization,Ado.net,我意识到已经有很多关于ADO.Net实体序列化的问题发布了,但是我还没有找到一个真正解决我想做的事情的问题 基本上,我需要ADO.Net实体的简单、浅JSON或普通对象表示。目的是进行变更记录;i、 当一条记录要更改时,我想在“之前”和“之后”找到它的数据副本,并记录更改 我不想考虑任何导航、复杂或其他属性;只是实体的标量属性。如果我遗漏了一些只有在特殊情况下才会出现的数据,那没关系——只是尝试做一个粗略的日志。理想情况下,我的最终代码应该如下所示: Employee emp = db.Empl

我意识到已经有很多关于ADO.Net实体序列化的问题发布了,但是我还没有找到一个真正解决我想做的事情的问题

基本上,我需要ADO.Net实体的简单、浅JSON或普通对象表示。目的是进行变更记录;i、 当一条记录要更改时,我想在“之前”和“之后”找到它的数据副本,并记录更改

我不想考虑任何导航、复杂或其他属性;只是实体的标量属性。如果我遗漏了一些只有在特殊情况下才会出现的数据,那没关系——只是尝试做一个粗略的日志。理想情况下,我的最终代码应该如下所示:

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的任何快速简便的方法


谢谢var serializer = new JavaScriptSerializer(); serializer.Serialize(new MyEmployeeModel{ // set fields here}); 如果你愿意的话,你可以把它建成一个转换器,我就是这么做的

我有一个接口,
IConverter
,您可以通过它创建一个转换器,将(或任何您想做的事情)注入到代码中

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

public class EmployeeFromDatabaseToBasicEmployeeModelConverter :
                               IEmployeeFromDatabaseToBasicEmployeeModelConverter 
{
  public MyEmployeeModel Invoke(TheDBType myDbTypeObject)
  {
     return new MyEmployeeModel{
      // set properties.
     }
  }
}
公共接口IEEmployeeFromDatabase到SicEmployeeModelConverter
:IConverter{}
公共类EmployeeFromDatabaseToBasicEmployeeModelConverter:
IEEmployeeFromDatabase到SicEmployeeModelConverter
{
公共MyEmployeeModel调用(DBTYPE myDbTypeObject)
{
返回新的MyEmployeeModel{
//设置属性。
}
}
}

真的希望得到完全通用的东西;对于这个项目,我的时间非常紧迫,只需要一个快速而肮脏的解决方案(不一定是“最佳”解决方案)。转换器可能不会快速而肮脏,但第一部分是。创建一个类来保存数据,创建一个对象,用数据填充它,序列化它。这是一个30秒的工作。或者只是序列化从数据库返回的对象。我看到你已经有一个雇员对象了。只需将其传递给我在回答中概述的序列化程序。啊啊啊。。。。你的意思是我可以直接将实体对象(“Employee”)传递到JavascriptSerializer?没有意识到是这样的!结果表明,这只适用于没有任何循环关系的实体。我真正需要做的是做与上面相同的事情,但是跳过任何导航属性。