使用 XmlSerializer 将 XML 反序列化为类型
Posted
技术标签:
【中文标题】使用 XmlSerializer 将 XML 反序列化为类型【英文标题】:Deserializing XML to a type with XmlSerializer 【发布时间】:2020-12-09 23:38:00 【问题描述】:我有下面的示例 XML 和 .NET 类型,我认为这是 XMLSerializer
要使用的类型的正确属性,但我只是在我的类型中返回空值。我在不同的地方尝试了各种属性,但我无法填充类型。
[<CLIMutable>]
[<XmlTypeAttribute("ROW")>]
type MyItem =
Id: string
At: string
Latitude: double
Longitude: double
RegNum: string
[<CLIMutable>]
[<XmlTypeAttribute(AnonymousType = true)>]
type MyRowset =
[<XmlArrayAttribute("ROW")>]
items: MyItem []
[<CLIMutable>]
[<XmlTypeAttribute("ROWSET")>]
type Myresult =
[<XmlElementAttribute("ROWSET")>]
rowset: MyRowset
[<CLIMutable>]
[<XmlTypeAttribute(AnonymousType = true)>]
[<XmlRootAttribute(Namespace = "", IsNullable = false, ElementName = "RESPONSE")>]
type MyResponse =
[<XmlElementAttribute("RESULT")>]
result: Myresult
//<RESPONSE>
// <RESULT>
// <ROWSET>
// <ROW>
// </ROW>
// </ROWSET>
// </RESULT>
//</RESPONSE>
【问题讨论】:
【参考方案1】:我更新了 MyRowset 类型,现在类型如下:
<CLIMutable>]
[<XmlTypeAttribute("ROW")>]
type MyItem =
Id: string
At: string
Latitude: double
Longitude: double
RegNum: string
[<CLIMutable>]
[<XmlTypeAttribute(AnonymousType = true)>]
type MyRowset =
[<XmlElement("ROW")>]
items: MyItem array
[<CLIMutable>]
[<XmlTypeAttribute("ROWSET")>]
type Myresult =
[<XmlElementAttribute("ROWSET")>]
rowset: MyRowset
[<CLIMutable>]
[<XmlTypeAttribute(AnonymousType = true)>]
[<XmlRoot(Namespace = "", IsNullable = false, ElementName = "RESPONSE")>]
type MyResponse =
[<XmlElementAttribute("RESULT")>]
result: Myresult
XML 示例
<RESPONSE>
<RESULT>
<ROWSET>
<ROW>
<Id>Id1</Id>
<At>ATTT</At>
<Latitude>1.0</Latitude>
<Longitude>2.0</Longitude>
<RegNum>test</RegNum>
</ROW>
</ROWSET>
</RESULT>
</RESPONSE>
输出
result: result = rowset = items = [| Id = "Id1"
At = "ATTT"
Latitude = 1.0
Longitude = 2.0
RegNum = "test" |]
【讨论】:
以上是关于使用 XmlSerializer 将 XML 反序列化为类型的主要内容,如果未能解决你的问题,请参考以下文章
使用 XmlSerializer 将空 xml 属性值反序列化为可为空的 int 属性
使用 XmlSerializer 时如何向 XML 文件写入注释?
无法使用 c# xmlserializer 反序列化以前序列化的 XML
XmlSerializer C# - 对象传递的简单值被转换并显示为 xml 文件中的科学值