私はちょうどそれは私がいうだけの設定多くのではなく、内とデータベースから連載ずっといただきたいSQLモデルへのLINQのカスタムオブジェクトのプロパティです。この場合には、同様の問題に直面してきてきました余分なフィールドと余分なコンストラクタ。私はこのことがあなたの状況にどれほど緊密に適合しているのかは分かりませんが、適応可能でなければなりません。私が見てきた
ほとんどのソリューションが欲しかったのどちらか(による自動コード生成のために可能ではない)含まれる属性または(あなたがなどをネストされたオブジェクトをキャプチャしたい場合は特に、過剰)カスタムコンバータをローリングしています。
LinqToSqlのために私が望まないすべてのプロパティが既に属性として与えられているので、それらを直列化しようとするプロパティを手動で取得するのではなく、最初に直列化してからDeSerializeします。これにより、作業がはるかに簡単で、すべてのネスティングが完了したオブジェクトグラフが得られます。
次は、望ましくないメンバー名を取得します。あなたは、これらはあなた次第です取得する方法、それも、あなたはMVCで結合モデルから除外していたものと同じ方法で、手動でそれに名前を与える場合があります。私の場合、少しのLinqと少しのリフレクションはLinqがSQLから生成するすべてのプロパティの名前を取得します。私たちのオブジェクトとして
は、我々の不要なメンバーを反復処理し、辞書からそれらを削除する簡単なDictonaryです。
最後に、再度辞書を逐次化してください。
public string JsonMinusProperties(object toSerialize)
{
//Replace this with your preferred way of getting your unwanted properties
var LinqMemberNames = toSerialize.GetType().GetProperties().Where(y=>
y.GetCustomAttributes(true).Any(x =>
x.GetType().Namespace == "System.Data.Linq.Mapping"
)
).Select(x=>x.Name);
JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(toSerialize);
var tempobj = js.DeserializeObject(json) as Dictionary<string, object>;
foreach (string linqMember in LinqMemberNames)
{
tempobj.Remove(linqMember);
}
return js.Serialize(tempobj);
}
深いプロパティを削除するために必要な場合には元本に辞書を歩きやすいべきであるが、これは、最初のレベルから削除されます。
DataMember属性の問題は、ScriptIgnore属性と同じ問題があることがわかります。第二に、私はこれらの事柄に対して明白なDTOを作らなければならないと思っています。なぜなら、余分なEFの外では、それらは完全に輸送に適しており、デカップリングは本当に私の心配ではないからです。 –