加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在servicestack中逐个类型地覆盖XML序列化格式

发布时间:2020-12-16 07:51:11 所属栏目:百科 来源:网络整理
导读:我有一个需要自定义 XML序列化和类型的类型.我希望在requestDto上用作属性的反序列化 对于JSON,我可以使用JsConfig.SerializeFn,XML是否有类似的钩子? ServiceStack使用.NET的XML DataContract序列化器.除了基础.NET框架实现提供的内容之外,它不可定制. 为
我有一个需要自定义 XML序列化和类型的类型.我希望在requestDto上用作属性的反序列化

对于JSON,我可以使用JsConfig.SerializeFn,XML是否有类似的钩子?

ServiceStack使用.NET的XML DataContract序列化器.除了基础.NET框架实现提供的内容之外,它不可定制.

为了支持自定义请求,您可以覆盖默认请求处理.
ServiceStack的Serialization and Deserialization wiki page显示了自定义请求处理的不同方法:

注册自定义请求DTO活页夹

base.RequestBinders.Add(typeof(MyRequest),httpReq => ... requestDto);

跳过自动反序列化并直接从Request InputStream中读取

告诉ServiceStack跳过反序列化并自己处理它,让你的DTO实现IRequiresRequestStream并自己反序列化请求(在你的服务中):

//Request DTO
public class Hello : IRequiresRequestStream
{
    /// <summary>
    /// The raw Http Request Input Stream
    /// </summary>
    Stream RequestStream { get; set; }
}

覆盖默认的XML Content-Type格式

如果您更喜欢使用其他XML Serializer,则可以在registering your own Custom Media Type之前覆盖ServiceStack中的默认内容类型,例如:

string contentType = "application/xml";
var serialize = (IRequest request,object response,Stream stream) => ...;
var deserialize = (Type type,Stream stream) => ...;

//In AppHost.Configure method pass two delegates for serialization and deserialization
this.ContentTypes.Register(contentType,serialize,deserialize);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读