9

DynamicObject をシリアル化して WCF で動作させることができた人がいるかどうか疑問に思っていましたか?

これが私の小さなテストです:

[DataContract]
class MyDynamicObject : DynamicObject
{
    [DataMember]
    private Dictionary<string, object> _attributes =
       new Dictionary<string, object>();

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        string key = binder.Name;

        result = null;

        if (_attributes.ContainsKey(key))
            result = _attributes[key];

        return true;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        _attributes.Add(binder.Name, value);

        return true;
    }
}

var dy = new MyDynamicObject();
var ser = new DataContractSerializer(typeof(MyDynamicObject));
var mem = new MemoryStream();
ser.WriteObject(mem, dy);

私が得るエラーは次のとおりです。

System.Runtime.Serialization.InvalidDataContractException が処理されませんでした Message=Type 'ElasticTest1.MyDynamicObject' は、DataContractAttribute または SerializableAttribute でマークされていない型から継承できません。基本型 'System.Dynamic.DynamicObject' を DataContractAttribute または SerializableAttribute でマークするか、派生型からそれらを削除することを検討してください。

助言がありますか?

4

2 に答える 2

10

あなたの問題の解決策

カスタムを実装するIDynamicMetaObjectProvider

于 2011-04-19T10:26:10.923 に答える
3

Dictionary<TKey, TValue>これを達成するために何かを使用できますか?

私は同様の問題を解決しようとしています。私の問題は、クライアントとサーバーの間でデータを転送するための DTO があることです。ただし、細粒度でフラット化された DTO を常に使用する必要があります。

たとえば、クライアントが顧客の名前と ID を取得したいが、それ以外には関心がない場合、理想的には、これら 2 つのプロパティのみを持つ DTO を作成する必要があります。すべてのメソッドに同じ CustomerDTO を転送すると、パフォーマンスに多くの影響があります。多くの冗長なフィールドを転送している可能性があります。

于 2011-02-18T15:28:28.957 に答える