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

如何将Azure DevOps混合JSON与XML响应反序列化为C#类

解决Azure DevOps REST API混合JSON/XML反序列化问题

问题背景

从Azure DevOps REST API获取的响应为JSON结构,但部分字段值是XML格式字符串(如Microsoft.VSTS.TCM.Steps)。使用System.Text.Json直接反序列化到自定义C#类时,会抛出JsonException,无法将XML字符串直接转换为Steps类型对象。

解决方案:自定义JsonConverter

通过实现JsonConverter<Steps>,让System.Text.Json在反序列化时自动处理XML字符串到Steps对象的转换,无需事后手动处理。

1. 实现自定义转换器

创建StepsJsonConverter类,集成JsonConverter<Steps>,在读写方法中分别处理XML与对象的转换:

using System.Text.Json;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
using System.IO;

public class StepsJsonConverter : JsonConverter<Steps>
{
    private readonly XmlSerializer _xmlSerializer = new XmlSerializer(typeof(Steps));

    public override Steps Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var xmlString = reader.GetString();
        if (string.IsNullOrWhiteSpace(xmlString))
            return null;

        using var stringReader = new StringReader(xmlString);
        return (Steps)_xmlSerializer.Deserialize(stringReader);
    }

    public override void Write(Utf8JsonWriter writer, Steps value, JsonSerializerOptions options)
    {
        using var stringWriter = new StringWriter();
        _xmlSerializer.Serialize(stringWriter, value);
        writer.WriteStringValue(stringWriter.ToString());
    }
}

2. 标记属性使用转换器

在Fields类的MicrosoftVSTSTCMSteps属性上添加JsonConverter特性,指定使用自定义转换器:

public class Fields
{
    // 其他属性...
    [JsonPropertyName("Microsoft.VSTS.TCM.Steps")]
    [JsonConverter(typeof(StepsJsonConverter))]
    public Steps MicrosoftVSTSTCMSteps { get; set; }
}

3. 正常执行反序列化

原反序列化代码无需修改,转换器会自动处理XML字符串的转换:

var response = client.Get(request);
if (response.StatusCode == HttpStatusCode.OK
    && response.Content != null)
{
    return JsonSerializer.Deserialize<T>(response.Content);
}

原理说明

自定义转换器在Read阶段读取JSON中的XML字符串,通过XmlSerializer反序列化为Steps对象;在Write阶段则将Steps对象序列化为XML字符串后写入JSON,完全适配混合格式的序列化/反序列化需求,无需额外的事后处理步骤。

内容的提问来源于stack exchange,提问作者Pebermynte Lars

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:23:37