2012-04-10 11 views
0

Ich entwickle eine WCF-Client-Anwendung. hier habe ich 7 verschiedene Anfragen.Dynamische Objektzuweisung und Zugriffsrechte

Gibt es eine Möglichkeit, wie unter Demo-Code zu tun?

T obj =new anyobject ; 

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

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

Meine deserialise Funktion wie folgt:

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

ich denke, wir können dies durch dynamische in dot net tun. aber ich bin neu in diesem dynamischen Konzept. Könnte mir jemand helfen?

Antwort

0

Ich habe mein Problem wie folgt gelöst.

dynamic obj= new anyobject(); 

obj=DeSeriableXMLToObject(xml,obj); 

if(obj.property1==200) 
{ 
} 

meine Deserialise-Funktion als so;

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

Die Deserialisierung wäre so etwas wie sein:

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

die Eigenschaft Einstellung kann auf verschiedene Arten erfolgen. Die bevorzugte ist eine gewisse Gemeinsamkeit zwischen den Typen haben, vielleicht eine Schnittstelle:

interface IFoo { 
    string property1 { get; } 
} 

und:

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

eine Alternative Reflexion oder 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; 
} 

btw; DeSeriableXMLToObject<T> sieht aus ... irgendwie funky wie ein Name. Darf ich nur Deserialize<T> oder DeserializeXml<T> vorschlagen?

+0

können Sie dies mit dynamic? –

+0

@Vetrivelmp wie das letzte Beispiel? –

+0

T DeSeriableXMLToObject In dieser Funktion Wie kann man T zur Laufzeit ermitteln? zum Beispiel müssen Sie wie DeSeriableXMLToObject () übergeben. aber ich weiß nicht, ob das Klasse1 oder Klasse1 ist. wie man so schreibt DeSeriableXMLToObject ()? hoffe du verstehst meine anforderung. –

Verwandte Themen