【发布时间】:2014-07-23 03:13:17
【问题描述】:
我有一个对象,我使用修改后的 DataContractSerializer 将其转换为 XML。
我去掉了所有的元数据/命名空间等,所以结果就是:
<myObject>
<someProperty>5</someProperty>
<mySubObjects>
<mySubObject>...</mySubObject>
<mySubObject>...</mySubObject>
...
</myObject>
等等
我想知道是否可以将其放回对象中。
我能够通过使用 JSON.NET 将其转换为有效的 JSon 来部分地做到这一点,但是尽管阅读了一些关于它的解释,但我无法理解的反序列化 JSon 和列表存在问题。
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true);
var obj = JsonConvert.DeserializeObject<T>(jsonText);
无法反序列化当前 JSON 对象(例如 {"name":"value"}) 进入类型“...”,因为该类型需要 JSON 数组(例如 [1,2,3]) 正确反序列化。要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其 是一个普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是 集合类型,如数组或列表),可以从 JSON 对象。 JsonObjectAttribute 也可以添加到类型中以 强制它从 JSON 对象反序列化。
应该有一个更直接的解决方案,因为源数据也来自对象,所以永远不会出现尝试进行无效转换的问题,某种映射库或其他东西应该能够解决这个问题.有什么想法吗?
【问题讨论】:
-
我不清楚你想做什么。 “将其放回对象中”是什么意思?您说您尝试使用 JSON 进行某些操作,但它“抱怨 Lists an IEnumerables”并没有告诉我们您尝试做什么。
-
忽略 JSON 部分,我想将 XML 转换为对象。由于没有元数据,我认为 XmlSerializer 不会工作(当我尝试时,我收到错误“无效的 xml”,但我可以将 XML 放入
XmlDocument,所以它必须是有效的)。我想我只需要一些东西来迭代并将每个条目映射到一个对象,但它必须足够聪明才能处理列表。我已经澄清了我的问题(今天压力很大!) -
这个结构看起来你应该可以很好地使用 XMLSerilizer。它可以处理数组和列表之类的东西。您只需要创建与您在那里的结构相匹配的类。您在类上放置的属性告诉它标签的名称。以您的示例为指导,您将需要一个名为 myObject 的类,以及一个名为 someProperty 的整数属性。然后它需要一个名为 mySubObjects 的数组或 List
。 -
是的,这就是我所拥有的——因为源 XML 来自被反序列化的对象,被剥离了任何元数据等,然后用于重新创建对象。我只是收到错误
There is an error in XML document (1, 133). {"Input string was not in a correct format."},没有任何解释它是如何不正确的格式。我想知道它是否进行了无效的演员表?因为它没有关于数据类型的任何信息。 -
所以你想重新创建对象,即使你剥离了元数据?我不确定这意味着什么,但听起来不可能。