我有一个XML输入字符串,并希望将其反序列化为部分保留原始XML的对象。
<SetProfile>
<sessionId>A81D83BC-09A0-4E32-B440-0000033D7AAD</sessionId>
<profileDataXml>
<ArrayOfProfileItem>
<ProfileItem>
<Name>Pulse</Name>
<Value>80</Value>
</ProfileItem>
<ProfileItem>
<Name>BloodPresure</Name>
<Value>120</Value>
</ProfileItem>
</ArrayOfProfileItem>
</profileDataXml>
</SetProfile>
班级定义:
public class SetProfile
{
public Guid sessionId;
public string profileDataXml;
}
我希望反序列化语法看起来像
string inputXML = "..."; // the above XML
XmlSerializer xs = new XmlSerializer(typeof(SetProfile));
using (TextReader reader = new StringReader(inputXML))
{
SetProfile obj = (SetProfile)xs.Deserialize(reader);
// use obj ....
}
但XMLSerializer将抛出异常而不会输出&lt; profileDataXml&gt;是原始XML字符串中“profileDataXml”字段的后代。
有没有办法像这样实现反序列化?
答案 0 :(得分:4)
如果要将其反序列化为XML,则使用XML类型(XElement
或XmlElement
应该有效) - 请参阅下面的代码。
public class StackOverflow_11234676
{
const string XML = @"<SetProfile>
<sessionId>A81D83BC-09A0-4E32-B440-0000033D7AAD</sessionId>
<profileDataXml>
<ArrayOfProfileItem>
<ProfileItem>
<Name>Pulse</Name>
<Value>80</Value>
</ProfileItem>
<ProfileItem>
<Name>BloodPresure</Name>
<Value>120</Value>
</ProfileItem>
</ArrayOfProfileItem>
</profileDataXml>
</SetProfile>";
public class SetProfile
{
public Guid sessionId;
public XElement profileDataXml;
}
public static void Test()
{
string inputXML = XML;
XmlSerializer xs = new XmlSerializer(typeof(SetProfile));
using (TextReader reader = new StringReader(inputXML))
{
SetProfile obj = (SetProfile)xs.Deserialize(reader);
Console.WriteLine(obj.profileDataXml);
}
}
}
答案 1 :(得分:0)
我想说你可以反序化这个XML。
看看这篇文章: Attributes That Control XML Serialization
使其工作的最简单方法是使用REVERSE方法。创建类并应用xml序列化属性并尝试序列化,直到获得与发布相同的xml结果。获得相同的xml后,反序列化将起作用。
答案 2 :(得分:0)
我会使用Xml.Linq。
setProfile obj = new setProfile();
var doc = XDocument.Parse(yourXml);
obj.sessionID = doc.Root.Element("sessionID").value;
obj.profileDataXml = doc.Root.Element("profileDataXml").value;