2012-04-23 8 views
0

ADO.Netエンティティのシリアル化に関して既に多くの質問が掲載されていますが、私がやりたいことを本当に解決することはできません。ADO.NETエンティティの直列化に関するベアボーンの浅いシリアライゼーション

基本的に、私は本当に素朴な、浅いJSONまたはプレーンオブジェクト表現のADO.Netエンティティが必要です。変更ログの目的は、つまり、レコードが変更されるときに、そのデータのコピーを「前」および「後」にかけてログに記録し、変更を記録したいとします。

私はナビゲーション、複合または他の特性を考慮したくありません。エンティティのスカラープロパティだけです。特別な場合にしか表示されないデータが欠けていても、大丈夫です。 ... MySerializer.serializeを実装するために、任意の迅速&簡単な方法を

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); 

:理想的には私の最終的なコードは次のようになりますか?

ありがとうございます!

答えて

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

+0

コンバータは素早く汚れていないかもしれませんが、最初の部分はです。データを保持するクラスを作成し、オブジェクトを作成し、データでデータを取り込み、シリアル化します。それは30秒の仕事です。 –

+0

また、データベースから返されるオブジェクトをシリアル化するだけです。あなたはすでに私が見る従業員オブジェクトを持っています。私は私の答えで概説したシリアライザに渡すだけです。 –

関連する問題