gpt4 book ai didi

c# - 将 XElement 转换为不带 JSON 的 JObject - 或 - 为空元素配置 SerializeXNode

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:32 24 4
gpt4 key购买 nike

我正在使用 Json.NET 的能力来 convert XML to JSON它工作得很好。我说“很好”是因为它将空的 XML 节点映射到 null而不是 {} (空 JSON 对象)。但是,由于此 Web 服务结果驱动 一个 knockout.js 绑定(bind),我需要空 XML 元素映射到 {}为了保持绑定(bind)结构1

目前的方法是这样的:

// Json.NET XML->JSON
// Can I specify any custom converters for this?
var json = Newtonsoft.Json.JsonConvert.SerializeXNode(xDoc);

// JSON->JObject
var jObject = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

// Update all `null` values to `{}`
// This "works reliably" because XML properties can never be null, but is
// hackish in its own right.
ConvertNullToEmptyObject(jObject as JContainer);

// And we're back at JSON, but I'd like to avoid such
// a complicated XML->JSON->JObject(Fixup)->JSON route.
// Performance isn't an issue, but it just feels dirty.
var finalJson = Newtonsoft.Json.JsonConvert.SerializeObject(jObject);

那么(问题!);

  1. 如何避免通过 JSON 的迂回之旅?
  2. 有没有更好的方法将 XElement 转换为 JSON(应用特殊规则)?

注意事项:

  • 我知道我可以写我的自己的 XElement->JObject转换函数(使用与 Json.NET 相同的规则,甚至代码),但如果可能,我想重新使用库支持。如果您认为我应该首先这样做,请发表评论。
  • 我想坚持使用 Json.NET,但不会被劝阻寻找替代库或补充库,只要它们是免费的、小型的并且可以在 .NET 3.5 中工作。

1 knockout<-JSON<-WS(XML)->JSON->knockout的一般方法效果很好。这里的问题是标准 knockout.js 模板绑定(bind)(结合 ko.mapping )将不会“自动激活”结构,即使绑定(bind)到不存在的属性(在现有结构中)工作正常。

最佳答案

如果你有更好的答案,写下来。可以更改已接受的答案。


好吧,我要说的是,这对于 Json.NET 来说“不太可能”。

我破解了Json.NET's XmlNodeConverter并且它仅与 JsonReader 和 JsonWriter 进行外部接口(interface)。

虽然可能会编写一个 JObjectReader 和一个 JObjectWriter,但这将涉及比我目前愿意投入的更多的工作。

或者,我可以复制 XmlNodeConverter 代码的所有(其中大部分是私有(private)/内部代码)并根据我的要求修改它 - 但这种复制'n'粘贴批量复制让我感到困惑错了。

我现在所拥有的已经足够好了,即使看起来很浪费。

关于c# - 将 XElement 转换为不带 JSON 的 JObject - 或 - 为空元素配置 SerializeXNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14869596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com