使用JSON.. NET序列化到XmlDictionaryWriter



我正在转换我们所有的项目使用JSON。. NET而不是DataContractJsonSerializer。如何使用JSON。. NET写到XmlDictionaryWriter?

当前实现(使用DataContractJsonSerializer):

public class ErrorBodyWriter : BodyWriter
{
    protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
    {
        if (Format == WebContentFormat.Json)
        {
            // How do I use json.net below?
            var serializer = 
                new DataContractJsonSerializer(typeof(ErrorMessage));
            serializer.WriteObject(writer, Error);
        }
        else { // xml }
    }
    public ErrorBodyWriter() : base(true){}
    public ErrorMessage Error { get; set; }
    public WebContentFormat Format { get; set; }
}

你不能直接这么做。WCF主要是基于XML的,为了支持JSON,它定义了一个JSON到XML的映射,如果用非常特定的格式编写XML,并且底层XML编写器可以生成JSON,那么将输出正确的JSON。

默认的WCF JSON序列化器(DataContractJsonSerializer)知道如何使用该映射将JSON写入XML编写器。JSON。净不。所以一种选择是使用JSON写入内存流。. NET,然后使用WCF JSON/XML阅读器将其读入XML,然后使用它写入XmlDictionaryWriter。代码看起来像下面的代码片段(写在记事本上,可能需要解决一些问题):

public class ErrorBodyWriter : BodyWriter
{
    protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
    {
        if (Format == WebContentFormat.Json)
        {
            var json = JsonConvert.SerializeObject(Error);
            var jsonBytes = Encoding.UTF8.GetBytes(json);
            using (var reader = JsonReaderWriterFactory.CreateJsonReader(jsonBytes, XmlDictionaryReaderQuotas.Max)) {
                writer.WriteNode(reader, false);
            }
        }
        else { // xml }
    }
    public ErrorBodyWriter() : base(true){}
    public ErrorMessage Error { get; set; }
    public WebContentFormat Format { get; set; }
}

相关内容

  • 没有找到相关文章

最新更新