使用 XmlSerializer 将 XML 反序列化为类型
Deserializing XML to a type with XmlSerializer
我有下面的示例 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>
我更新了 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" }|] } } }
我有下面的示例 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>
我更新了 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" }|] } } }