【问题标题】:Adding xml prefix to default serializer in vb.net将 xml 前缀添加到 vb.net 中的默认序列化程序
【发布时间】:2016-10-27 09:17:30
【问题描述】:

我有一个用 vb.net 编写的 REST 服务,它使用内置的序列化程序返回数据,所以如果我从这样定义的类返回数据:

Public Class Minion
    Public Property Name As String = ""
    Public Property ID As String = ""
End Class

我的 xml 会像这样返回:

<?xml version="1.0"?>
<Minion xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Testv3">
   <ID>1</ID>
   <Name>Kevin</Name>
</Minion>

但是我怎样才能在我的 xml 元素中添加一个前缀,以便我可以看到类似的内容:

<myLevel1:Minion>
   <mylevel2:ID>

我需要自己序列化数据吗?

【问题讨论】:

  • 您可以定义生成的命名空间,将类似这样的内容添加到 Minion 类:&lt;DataContract(Name := "Minion", [Namespace] := "your namespace")&gt;。要控制前缀,你需要实现一个序列化器,这个链接可以帮助你:stackoverflow.com/a/17798306/4730201
  • 感谢您的回答,我认为这是我首先想到的,我需要自己序列化数据。这很烦人,因为您可以设置 ElementName 和 NameSpace 之类的东西,但不能设置前缀。 :-(

标签: xml vb.net rest wcf


【解决方案1】:

为你的 Minion 类添加命名空间

<XmlRoot([Namespace]:="myLevel1")>
Public Class Minion

    <XmlElement([Namespace]:="myLevel2")>
    Public Property Name As String = ""

    Public Property ID As String = ""

End Class

并将命名空间添加到序列化器:

        Dim _xs As New XmlSerializer(GetType(Minion))

        Dim xn As New XmlSerializerNamespaces
        xn.Add("myLevel1", "myLevel1")
        xn.Add("myLevel2", "myLevel2")

        Using _fs As New FileStream("test.xml", FileMode.Create)
            _xs.Serialize(_fs, New Minion With {.ID = 1, .Name = "minion1"}, xn)    
        End Using

会给你这个:

<?xml version="1.0"?>
<myLevel1:Minion xmlns:myLevel2="myLevel2" xmlns:myLevel1="myLevel1">
  <myLevel2:Name>minion1</myLevel2:Name>
  <myLevel1:ID>1</myLevel1:ID>
</myLevel1:Minion>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2011-08-21
    相关资源
    最近更新 更多