det*_*ale 3 c# xml deserialization
我获得了一个 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>
Run Code Online (Sandbox Code Playgroud)
类定义:
public class SetProfile
{
public Guid sessionId;
public string profileDataXml;
}
Run Code Online (Sandbox Code Playgroud)
我希望反序列化语法看起来像
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 ....
}
Run Code Online (Sandbox Code Playgroud)
但 XMLSerializer 将引发异常,并且不会将 < profileDataXml > 的后代输出到原始 XML 字符串中的“profileDataXml”字段。
有什么办法可以实现这样的反序列化吗?
如果您想将其反序列化为 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1653 次 |
| 最近记录: |