0

私は1つのwcfクライアントアプリケーションを開発しています。ここに7つの異なるリクエストがあります。

以下のデモコードのようにする方法はありますか?

T obj =new anyobject ;

obj=DeSeriableXMLToObject<typeof(obj)>(string);

if(obj.property1=="200")
{
}

私の逆シリアル化関数は次のとおりです。

public static T DeSeriableXMLToObject<T>(string xml)
    {
// process for derisialising
}

私は、ドットネットで動的にこれを行うことができると思います。しかし、私はこの動的な概念に不慣れです。誰かが私を助けることができますか?

4

2 に答える 2

0

デシリアライズは次のようになります。

var serializer = new XmlSerializer(typeof(T));
T obj = (T)serializer.Deserialize(new StringReader(value));

プロパティの設定はさまざまな方法で行うことができます。推奨されるのは、タイプ間でいくつかの共通点、おそらくインターフェースを持つことです。

interface IFoo {
    string property1 { get; }
}

と:

T DeSeriableXMLToObject<T>(string value) where T : IFoo {
    var serializer = new XmlSerializer(typeof(T));
    T obj = (T)serializer.Deserialize(new StringReader(value));        
    if(obj.property1 == "200") { ...}
    return obj;
}

別の方法はリフレクションまたはdynamic

T DeSeriableXMLToObject<T>(string value) {
    var serializer = new XmlSerializer(typeof(T));
    dynamic obj = serializer.Deserialize(new StringReader(value));        
    if(obj.property1 == "200") { ...}
    return obj;
}

ところで; DeSeriableXMLToObject<T>名前としてはちょっとファンキーに見えます。ただ提案してもいいですDeserialize<T>DeserializeXml<T>

于 2012-04-10T08:00:44.307 に答える
0

私は以下のように私の問題を解決しました。

dynamic obj= new anyobject();

obj=DeSeriableXMLToObject(xml,obj);

if(obj.property1==200)
{
}

私の逆シリアル化関数は次のようになります。

dynamic DeSeriableXMLToObject(string xml,dynamic obj1) { 
//
Byte[] _bytes = (new UTF8Encoding()).GetBytes(xml);

DataContractSerializer datacontractser = new DataContractSerializer(obj.GetType ());

        object deserialized = _datacontractser .ReadObject(new MemoryStream(_bytes));

        return deserialized;
}
于 2012-04-12T03:21:43.427 に答える