【问题标题】:How do I serialize/deserialize a JsonValue object to and from XML in a WCF web service utilitzing Web Api?如何在使用 Web Api 的 WCF Web 服务中将 JsonValue 对象序列化/反序列化与 XML 之间的序列化/反序列化?
【发布时间】:2011-12-21 04:59:09
【问题描述】:

所以我一直在使用最新的 Web API 程序集开发 WCF Web 服务,并且我喜欢 JsonValue 对象。

我想要做的是接受绑定到 JsonValue 对象的 JSON,然后将该 JsonValue 对象转换为等效的 XML 表示形式,该表示形式可以传递到存储过程中进行处理。这消除了创建对象以将 JsonValue 绑定到的需要,这使事情保持流畅。

然后我希望能够以 XML 格式从数据库中选择数据,然后将其转换为 JsonValue 以返回给客户端。

我已经能够通过这种扩展方法将 JsonValue 转换为 XML 的字符串表示:

// Convert JsonValue to XML string
public static string ToXmlString(this JsonValue instance) {
    using (var ms = new MemoryStream()) {
        using (var xdw = XmlDictionaryWriter.CreateTextWriter(ms)) {
            instance.Save(xdw);
            xdw.Flush();
            return Encoding.UTF8.GetString(ms.ToArray());
        }
    }
}

有没有更好的方法来做到这一点?这个方法很好,但我只是想知道。

我还能够使用 Json.NET 库将 XML 字符串值转换回 JsonValue 以将 XML 字符串转换为 JSON 字符串,然后将字符串加载到 JsonValue 对象中,如下所示:

// Return JSON representation of XML
return JsonValue.Parse(JsonConvert.SerializeXNode(xmlElement, Formatting.None, true));

这种方法很好,但我不想依赖 Json.NET 库,因为我仅将它包含在这种方法中。有没有办法在不使用 Json.NET 库的情况下做到这一点?

提前感谢您的帮助!

丹尼尔

【问题讨论】:

    标签: xml wcf json serialization wcf-web-api


    【解决方案1】:

    这不适合你吗?

    XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);
    

    【讨论】:

    • 嘿 Craig,我正在尝试在不依赖 Json.NET 库的情况下完成这项工作。同样,库没有任何问题,我只是想弄清楚是否存在进行转换的本机方式。
    • 我不知道任何 OOB,但您可以查看 ISerializable msdn.microsoft.com/en-us/library/…,它允许您定义自己处理时的序列化方式。
    【解决方案2】:

    您的转换代码很好。要将 XML 转换回 JsonValue,您可以使用 Web API 中的JsonValueExtensions 类:

    // Convert JsonValue to XML string
    public static string ToXmlString(this JsonValue instance) {
        using (var ms = new MemoryStream()) {
            using (var xdw = XmlDictionaryWriter.CreateTextWriter(ms)) {
                instance.Save(xdw);
                xdw.Flush();
                return Encoding.UTF8.GetString(ms.ToArray());
            }
        }
    }
    
    // Convert XML string to JsonValue
    public static JsonValue FromXmlString(this string jsonAsXml) {
        using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonAsXml))) {
            using (var xdr = XmlDictionaryReader.CreateTextReader(ms, XmlDictionaryReaderQuotas.Max))) {
                return JsonValueExtensions.Load(xdr);
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多