Mud HttpUtils 的 XML 序列化器适配包,提供基于 System.Xml.Serialization.XmlSerializer 的 IHttpContentSerializer 实现(XmlContentSerializer)。
dotnet add package Mud.HttpUtils.Xml在 DI 中将默认的 JSON 序列化器替换为 XML:
// TryAdd 先注册者胜:自定义序列化器必须在 AddMudHttpClient 之前注册,
// 否则 AddMudHttpClient 内部的默认 TryAdd 注册将先生效。
services.TryAddSingleton<IHttpContentSerializer>(sp =>
new XmlContentSerializer(new XmlContentSerializerSettings
{
MediaType = "application/xml",
WriterSettings = new XmlWriterSettings
{
Encoding = Encoding.UTF8,
Indent = true,
OmitXmlDeclaration = false
}
}));
services.AddMudHttpClient("catalog", "https://api.example.com/");设置默认值:MediaType = "application/xml"、Indent = false、NewLineChars 固定为 "\r\n"(跨平台输出一致),示例中按需覆盖。
也可脱离 DI 独立使用(实现 IHttpContentSerializer 的全部方法):
var serializer = new XmlContentSerializer();
string xml = serializer.Serialize(new Order { Id = 1 });
var order = serializer.Deserialize<Order>(xml);- 实现
IHttpContentSerializer.GetFieldNameForProperty,读取属性上[XmlElement("...")]特性的ElementName,供生成器在查询参数等场景下映射字段名。 - 本包仅实现
IHttpContentSerializer,未实现ISynchronousContentSerializer——不存在同步/流式请求体路径(ToHttpContentSynchronous<T>/ToStreamingHttpContent<T>不可用)。
XmlSerializer 在运行时生成动态程序集,不支持 Native AOT 与裁剪。标注现状:[RequiresDynamicCode] 与 [RequiresUnreferencedCode] 经 #if NET7_0_OR_GREATER / #elif NET6_0_OR_GREATER 条件标注于序列化相关成员(netstandard2.0 资产不带标注);GetFieldNameForProperty、主构造函数与 Settings 属性完全未标注。消费方在启用 AOT 分析器时会在相应调用点获得编译期提示。本包 IsAotCompatible=false(非 AOT 路径),并已关闭 AOT/裁剪分析器以消除已知噪声。
Native AOT 场景请使用 Mud.HttpUtils.Client 内置的 SystemTextJsonContentSerializer + JsonSerializerContext(源生成 JSON 序列化)。
| 入口 | 机制 | 适用场景 |
|---|---|---|
XmlContentSerializer(本包) |
IHttpContentSerializer DI 抽象 |
请求体序列化引擎替换(如 [SerializationMethod(SerializationMethod.Xml)]) |
| 生成客户端内置路径 | ResponseDescriptor.XmlSerializer 元数据直通(源生成器发射 XmlSerializer 字段) |
生成的客户端方法的 XML 响应反序列化 |
二者互补、不互相替代。注意两条路径均基于 XmlSerializer(反射),均不受 Native AOT 支持。