[英]Remove namespace on property of type object in .NET XML serialization in API
如何獲得此XML屬性上這個不必要的名稱空間? 它可以是十進制或整數。
<Score xmlns:d6p1="http://www.w3.org/2001/XMLSchema" i:type="d6p1:double">2.5</Score>
應該
<Score>2.5</Score>
類
[DataContract(Name = "Participant", Namespace = "")]
public class ApiGameParticipant
{
[DataMember(IsRequired = false, EmitDefaultValue = false)]
public object Score { get; set; }
如果您需要XML看起來完全一樣或想要刪除名稱空間,那么使用XmlSerializer
可能會更好。 DataContractSerializer
不能像假定您在兩端都使用它那樣為您提供相同級別的控制-命名空間在這方面至關重要,因為它可以解決類型的一致序列化和反序列化。
假定名稱空間前綴“ i”在某些包含元素中綁定到http://www.w3.org/2001/XMLSchema-instance
。 在這種情況下,如果刪除命名空間d6p1
的聲明,則文檔將不是xsd-schema-valid。 這是因為xsi:type
屬性(通常是這樣寫的)必須是QName,並且要成為有效的QName,必須聲明前綴部分(在本例中為d6p1
)。
現在,也許您不需要文檔是架構有效的。 在那種情況下,我也將擺脫i:type
屬性。 保留屬性但丟失賦予其含義的名稱空間聲明似乎是一個糟糕的主意。
如果您想擺脫屬性和名稱空間,使用XSLT就足夠了。
后來
更仔細地看您的問題,我發現您確實想擺脫屬性和名稱空間聲明。 用於所有元素的XSLT代碼是:
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="{namespace-uri()}">
<xsl:apply-templates select="@*|*"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="@i:type"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>
第一條規則將元素原樣復制,但不保留未使用的名稱空間。 第二條規則不變地復制屬性; 第三條規則刪除i:type
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.