0

ADO.Netエンティティのシリアル化に関しては、すでにたくさんの質問が投稿されていることに気づきましたが、自分がやりたいことを本当に解決できる質問を見つけることができませんでした。

基本的に、私はADO.Netエンティティの本当に必要最低限​​の浅いJSONまたはプレーンオブジェクト表現が必要です。目的は変更ログです。つまり、レコードが変更される場合、そのデータのコピーを「前」と「後」に取得し、変更をログに記録したいと思います。

ナビゲーション、複雑、またはその他のプロパティを考慮したくありません。エンティティのスカラープロパティのみ。特別な場合にのみ表示されるデータを見逃した場合、それは問題ありません。大まかなログを作成しようとするだけです。理想的には、私の最終的なコードは次のようになります。

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か?

ありがとう!

4

1 に答える 1

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.
     }
  }
}
于 2012-04-23T15:41:31.877 に答える