动态对象分配和属性访问

时间:2012-04-10 07:40:35

标签: .net dynamic

我正在开发一个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中的动态来实现这一点。但我是这个动态概念的新手。谁能帮助我?

2 个答案:

答案 0 :(得分: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>吗?

答案 1 :(得分: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;
}