You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对象自动序列化为ServiceStack可接收的JSV格式表单内容

ServiceStack JSV表单序列化实现方案

ServiceStack官方内置了完整的JSV序列化能力,完全可以满足你的需求,不需要自行实现序列化逻辑,也有成熟的方案可以快速封装为你提到的JsvFormContent类型。

  • 核心序列化能力由官方ServiceStack.Text库提供,和ServiceStack服务端的JSV解析规则100%兼容,不会出现序列化后服务端无法识别的问题。
  • 整个实现不需要依赖ServiceStack的完整服务端组件,只需要引用轻量的ServiceStack.Text包即可。

基础使用方法

首先安装ServiceStack.TextNuGet包,之后你可以直接调用内置的扩展方法完成对象和JSV字符串的转换:

// 序列化对象为JSV字符串
var requestDto = new UserRequest { Id = 101, Name = "张三", IsActive = true };
string jsvStr = requestDto.ToJsv();

// 反序列化JSV字符串为对象
var parsedDto = jsvStr.FromJsv<UserRequest>();

封装JsvFormContent实现表单提交

你可以基于官方序列化能力快速封装符合要求的表单内容类,示例代码如下:

public class JsvFormContent : FormUrlEncodedContent
{
    /// <param name="requestDto">要提交的请求对象</param>
    /// <param name="jsvFieldName">服务端要求的JSV表单字段名,默认通常为jsv</param>
    public JsvFormContent(object requestDto, string jsvFieldName = "jsv") 
        : base(new [] { new KeyValuePair<string, string>(jsvFieldName, requestDto.ToJsv()) })
    {
        Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
    }
}

调用示例:

using var httpClient = new HttpClient();
var content = new JsvFormContent(new UserRequest { Id = 101, Name = "张三" });
var response = await httpClient.PostAsync("你的服务接口地址", content);

自定义序列化规则

如果需要调整序列化行为,比如日期格式、空值处理、枚举转字符串等,直接修改JsConfig全局配置即可,示例:

// 全局配置日期序列化格式
JsConfig<DateTime>.SerializeFn = time => time.ToString("yyyy-MM-dd HH:mm:ss");
// 序列化时忽略空值
JsConfig.IncludeNullValues = false;

内容的提问来源于stack exchange,提问作者Tony Valenti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:21:00