Выходной XML-формат ServiceStack - атрибут xml
Я использую ServiceStack и мне нужно визуализировать XML в определенном формате.
Вот мой класс POCO
[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>
Как я могу исправить эту проблему.
2 ответа
Решение
Я решил,
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);
ServiceStack использует.NET XML XML DataContractSerializer, который позволяет настраивать только с помощью атрибутов.NET DataContract, но не атрибутов XmlSerializer, которые вы также используете.