0

我正在开发一个 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
}

我认为,我们可以通过 dot net 中的动态来做到这一点。但我对这个动态概念很陌生。谁能帮帮我?

4

2 回答 2

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 回答
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 回答