问题描述
stringqueryInfoXml="<?xmlversion="1.0"encoding="utf-16"?><QueryInfo><Start>0</Start><Limit>0</Limit><IsQueryCount>false</IsQueryCount><IsQueryCountOnly>false</IsQueryCountOnly><ClientQueryParams><RoleId>1</RoleId><ParentRoleIdStr>1</ParentRoleIdStr></ClientQueryParams></QueryInfo>";我要把上面XML反序列化成QueryInfo对象,QueryInfo类中有一个属性ClientQueryParams是Object类型,我现在要怎么样才能获取ClientQueryParams节点下的值,反序列化无法直接获取?求助大神们
解决方案
解决方案二:
反序列化根本不知道你是什么东西,难道你连ClientQueryParams传的是什么都不知道?或者是什么样子的格式?
解决方案三:
就是把上面XML反序列化后的值放到QueryInfo对象对应的属性里,但是这个对象属性有一个是OBJECT类型,我要的是怎么获取ClientQueryParams节点下的值
解决方案四:
publicstaticstringSerialize(objecto){XmlSerializerser=newXmlSerializer(o.GetType());StringBuildersb=newStringBuilder();StringWriterwriter=newStringWriter(sb);ser.Serialize(writer,o);returnsb.ToString();}publicstaticTDeserialize<T>(strings){XmlDocumentxdoc=newXmlDocument();try{xdoc.LoadXml(s);XmlNodeReaderreader=newXmlNodeReader(xdoc.DocumentElement);XmlSerializerser=newXmlSerializer(typeof(T));objectobj=ser.Deserialize(reader);return(T)obj;}catch{returndefault(T);}}[Serializable()]publicclassQueryInfo{publicintX_Start;[XmlElement("Start")]publicintStart{get{returnX_Start;}set{X_Start=value;}}publicintX_Limit;[XmlElement("Limit")]publicintLimit{get{returnX_Limit;}set{X_Limit=value;}}publicboolX_IsQueryCount;[XmlElement("IsQueryCount")]publicboolIsQueryCount{get{returnX_IsQueryCount;}set{X_IsQueryCount=value;}}publicboolX_IsQueryCountOnly;[XmlElement("IsQueryCountOnly")]publicboolIsQueryCountOnly{get{returnX_IsQueryCountOnly;}set{X_IsQueryCountOnly=value;}}[XmlElement("ClientQueryParams")]publicList<ClientQueryParams>ClientQueryParams{get;set;}}publicclassClientQueryParams{publicintX_RoleId;[XmlElement("RoleId")]publicintRoleId{get{returnX_RoleId;}set{X_RoleId=value;}}publicintX_ParentRoleIdStr;[XmlElement("ParentRoleIdStr")]publicintParentRoleIdStr{get{returnX_ParentRoleIdStr;}set{X_ParentRoleIdStr=value;}}}stringqueryInfoXml="<?xmlversion="1.0"encoding="utf-16"?><QueryInfo><Start>0</Start><Limit>0</Limit><IsQueryCount>false</IsQueryCount><IsQueryCountOnly>false</IsQueryCountOnly><ClientQueryParams><RoleId>1</RoleId><ParentRoleIdStr>1</ParentRoleIdStr></ClientQueryParams></QueryInfo>";privatevoidbutton1_Click(objectsender,EventArgse){varl=Deserialize<QueryInfo>(queryInfoXml);intStart=l.Start;intLimit=l.Limit;boolIsQueryCount=l.IsQueryCount;boolIsQueryCountOnly=l.IsQueryCountOnly;List<ClientQueryParams>list=l.ClientQueryParams;intRoleid=list[0].X_RoleId;intParentRoleIdStr=list[0].X_ParentRoleIdStr;}
解决方案五:
XML和JSON正序列化可以;——但是反序列化必须指定类型。字节流的正反序列化可以不指定类型。
解决方案六:
使QueryInfo继承IXmlSerializable对象,在里面重写publicvoidReadXml(System.Xml.XmlReaderreader)方法然后去处理。
解决方案七:
<ClientQueryParams>的类型最好在序列化的时候保存下来。
解决方案八:
如何从文件中读取信息反序列化为对象protectedvoidButton2_Click(objectsender,EventArgse){stringfileName=Server.MapPath("~/File/SerializeFile.txt");Streamfs=newFileStream(fileName,FileMode.Open);IFormatterformat=newBinaryFormatter();UserInfouser=(UserInfo)format.Deserialize(fs);//反序列化Response.Write(user.UserName);fs.Close();}