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