2012-04-10 19 views
0

我正在開發一個wcf客戶端應用程序。在這裏我有7個不同的要求。動態對象分配和依賴訪問

有什麼辦法可以像下面的演示代碼一樣嗎?

T obj =new anyobject ; 

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

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

我deserialise功能如下:

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

我認爲,我們可以通過動態的點網做到這一點。但我對這個動態概念很陌生。任何人都可以幫我嗎?

回答

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

+0

你可以發表這個使用動態? – 2012-04-11 03:54:04

+0

@Vetrivelmp喜歡最後一個例子嗎? – 2012-04-11 05:36:54

+0

T DeSeriableXMLToObject 這個函數在運行時如何知道T?例如你必須像DeSeriableXMLToObject ()一樣傳遞。但我不知道這是class1還是class1。如何寫這樣的DeSeriableXMLToObject ()?希望你瞭解我的要求。 – 2012-04-11 09:56:13