我正在尝试编写一个使用 XmlSerialzer 输出 xml 的 WCF 服务。我需要一个特定的xml输出,这就是为什么我不使用DataContract Seriailzer的原因。具体来说,我正在编写一个具有定义模式等的目录服务 web(csw)。
我一直在尝试先编写类,然后测试输出的XML。这是相当乏味的,我可能会切换到xsd实用程序。我想知道的是我可以将 xml 属性添加到其他类成员,还是那些装饰的 xml 属性只会添加到根元素(即类名)中?与使用 XDocument 手动编写 CML 相比,似乎存在灵活性问题。另外每次我需要嵌套元素(不是集合)时,似乎我需要创建一个新类?是吗?
我需要的输出 xml 是:
<ows:ContactInfo>
<ows:OnlineResource
xlink:href="mailto:enquiry@gis.nottscc.gov.uk"/>
</ows:ContactInfo>
这是我的班级:
public class ContactInfo
{
[XmlElement]
public string OnlineResource = "";
[XmlElementAttribute(ElementName = "OnlineResource",Namespace = "http://www.w3.org /1999/xlink")]
public string href = "mailto:enquiry@gis.nottscc.gov.uk";
}
它输出 XML,如下所示:
<ows:ContactInfo xlink:href="mailto:enquiry@gis.nottscc.gov.uk">
<ows:OnlineResource>mailto:enquiry@gis.nottscc.gov.uk</ows:OnlineResource>
</ows:ContactInfo>
您需要更改对象模型才能实现此目的...尝试这样的事情...
[XmlType("ContactInfo")]
public class ContactInfo
{
[XmlElement("OnlineResource")]
public OnlineResource Resource { get; set; }
}
[XmlType("OnlineResource")]
public class OnlineResource
{
[XmlAttribute("href")]
public string href = "mailto:enquiry@gis.nottscc.gov.uk";
}
为此输出是...
<ContactInfo>
<OnlineResource href="mailto:enquiry@gis.nottscc.gov.uk" />
</ContactInfo>
当然,您需要进行调整以获取命名空间等,但这正朝着正确的方向发展......希望对:)有所帮助
是的..当你嵌套元素时,你将需要一个新类......这有道理吗?基元如何生成一组嵌套的值?