c# - Json.net 属性 : single value or array of values

标签 c# json.net

我有一个关于 JSON.Net 库的问题。通常我有一个像这样的 XML 字符串:

<Config>
  ....
  <Name>some name</Name>
  ....
</Config>

然后我使用 JSON.Net 库将字符串转换为 json 字符串,如下所示:

Congif: {
   ...
   Name: "some name",
   ...
}

最后我将这个 json 字符串映射到 Config 类的一个实例:

Config instance = JsonConvert.DeserializeObject<Config>(json);

如果名称属性是我的 Config 类中的名称数组:

class Config {
   ....
   public string[] Name { get; set; }
   ....
}

我知道在 json 字符串中,数组是这样定义的:

  Name: ["some name"],

因为我得到了一个从 XMl 字符串转换而来的 json 字符串,所以我可能在那里有一个或多个 Name 节点。当 XMl 中只定义一个名称时,这会给我带来麻烦。我会得到异常提示它不能将字符串转换为字符串[]。如果XML文件中定义了多个Name节点就OK了。

不确定是否有任何方法或选项设置让 JSON 库在映射看到目标属性名称是数组类型属性时自动将其转换为字符串数组,即使名称只有一个值?

最佳答案

我想我必须接受 JSON.Net 的方式。如果 jsonString 包含键的字符串值,那么它应该将该值转换为字符串值而不是字符串数组,即使映射属性是数组类型也是如此。

我能做的是,如果 XML 字符串中只有一个节点,则向 XML 字符串添加一个空值节点,使其像节点数组一样,或者无论如何向所有现有节点添加空值节点。

唯一的问题是数组中附加了一个空条目。

关于c# - Json.net 属性 : single value or array of values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/901919/

相关文章:

c# - 从 C# 中的通用数据表中删除行

c# - Linq 的性能包含

c# - 支持混合空格和制表符的编辑器?

c# - 将没有成员名称的 JSON 数组反序列化为 C# 对象

c# - F# 类型到 Json 正在输出 Name@ 和 Name

android - 带有 JSON.NET 的包非常大

c# - 如何为具有无效值的属性使用 JSON.net 的默认值

c# - FFMPEG 将视频叠加在另一个视频之上

c# - 由于 "make-local-hook",无法为 emacs 加载 C# 模式

c# - 如何在一个特定的序列化中序列化除特定属性之外的所有属性