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);
我正在使用 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);