ServiceStack 输出 XML 格式 - xml 属性

ServiceStack Output XML format - xml attribute

我正在使用 ServiceStack,需要以特定格式呈现 XML。

这是我的 POCO class

[DataContract]
public class LookupModelBase
{
    [XmlAttribute, DataMember]
    public int Id { get; set; }

    [XmlText, DataMember]
    public string Label { get; set; }
}

预期的输出应该如下所示。

<LookupModelBase Id="1">
   <Label>Label 1</Label>
</LookupModelBase>

但是我得到如下输出

<LookupModelBase>
   <Id>1</Id>
   <Label>Label 1</Label>
</LookupModelBase>

我该如何解决这个问题。

ServiceStack 使用 .NETs XML DataContractSerializer,它只允许通过 .NETs DataContract 属性进行自定义,而不是您正在使用的 XmlSerializer 属性。

我解决了,

public static class CustomServiceStackXmlFormat
{
    public static string Format = "application/xml";

    public static void Serialize(IRequest req, object response, Stream stream)
    {
        System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(response.GetType());
        xmlSerializer.Serialize(stream, response);
    }

    public static object Deserialize(Type type, Stream stream)
    {
        System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(type.GetType());
        var obj = ((Type)xmlSerializer.Deserialize(stream));
        return obj;
    }
}

在你的AppHost.cs

this.ContentTypes.Register(CustomServiceStackXmlFormat.Format, CustomServiceStackXmlFormat.Serialize, CustomServiceStackXmlFormat.Deserialize);