For the complete documentation index, see llms.txt. This page is also available as Markdown.

Zongsoft.Serialization

从 Discussions 用户归档筛选与模型属性理解序列化边界。

Serializer.Json 在 System.Text.Json 基础上支持 Zongsoft 模型与数据字典等框架类型。Discussions 的用户归档提供者使用它将输入流还原为条件模型,然后交给数据服务。

真实输入不是任意对象图

来源:src/Features/Archiving/UserDataTemplateModelProvider.cs(节选;上下文见源文件)。

UserDataTemplateModelProvider.cs
public override IDataTemplateModel GetModel(IDataTemplate template, object argument)
{
	var schema = $"*, {nameof(UserProfile.Site)}" + "{*}";

	if(argument is Stream stream)
		argument = Serializer.Json.Deserialize<UserProfileCriteria>(stream);

	var data = argument switch
	{
		string key => this.Services.ResolveRequired<UserService>().Get(key, schema),
		IModel model => this.Services.ResolveRequired<UserService>().Select(Criteria.Transform(model), schema),
		_ => this.Services.ResolveRequired<UserService>().Select(null, schema),
	};

	return new DataTemplateModel(new { Users = data });
}

流输入明确指定 UserProfileCriteria,随后通过 Criteria.Transform 转为数据条件。字符串输入则按用户键查询;这两条路径不同,不应随意把输入反序列化成 Dictionary 再拼接 SQL。

模型字段与输出范围

来源:src/Models/Post.cs(节选;上下文见源文件)。

忽略成员特性控制序列化可见性,不代表这些成员不存在于数据库,也不替代 schema 或授权。模型返回正文之前,还会经过审核过滤和外置内容读取。

框架选项参考

选项
用途

Indented

可读缩进输出

NamingConvention

成员命名约定

IgnoreNull、IgnoreZero

控制空值或默认值输出

IncludeFields

是否包含字段

MaximumDepth

对象图深度限制

Typified

为松散值保留类型信息

Discussions 当前未使用 Typified 或自定义 JSON 转换器作为归档入口。相关真实测试可查阅 JsonSerializerTest 和 TextSerializationOptionsTest。

安全与生命周期

反序列化成功只说明输入能被解析,不说明调用者有权查询或导出相应用户。应限制输入大小与对象深度,传播取消信号,并让服务层继续验证业务范围。归档输出的工作簿结构见表格与模板。

最后更新于