【问题标题】:How to keep Boolean values when converting XML to JSON in C#? [duplicate]在 C# 中将 XML 转换为 JSON 时如何保留布尔值? [复制]
【发布时间】:2018-12-12 13:41:44
【问题描述】:

我正在使用 JSON。当我将 XML 转换为 JSON 时,它不会将布尔值保留为布尔值。它为布尔值提供双引号。我正在使用 Json.Net 进行转换。

这是我的 XML:

<root>
  <file>
    <field_name>contains_mrn</field_name>
    <field_value>true</field_value>
 </file>
 </root>

输出:

{
  "file": {
    "field_name": "contains_mrn",
    "field_value": "true"
  }
}

但我的期望是:

{
  "file": {
    "field_name": "contains_mrn",
    "field_value": true
  }
}

【问题讨论】:

  • 而您的转换代码是......? XML 没有类型(好吧,如果我们暂时忽略 XML Schema),因此没有好的方法可以知道“true”在这里应该被视为 JSON 布尔值而不是字符串。在某个地方,一些代码将不得不调用我们想要的字符串“true”和“false”。 (同样的问题以某种形式存在于数字中。)
  • 大多数人在 JSON 中使用 1 和 0 来表示真假。
  • @jdweng 他们有吗?这听起来像是我的猜想。你的来源是什么?

标签: c# .net json xml json.net


【解决方案1】:

如果 Json 是您最终想要的输出,您可能应该采取更长的路线。您需要先将您的 XML 反序列化,然后再将其序列化为 JSON。

var serializer = new XmlSerializer(typeof(Root));
var obj = (Root)serializer.Deserialize(new StringReader(str));
var json = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);

其中类定义如下。

[XmlRoot(ElementName="file")]
public class File 
{
   [XmlElement(ElementName="field_name")]
   [JsonProperty(PropertyName = "field_name")]
   public string Field_name { get; set; }

   [JsonProperty(PropertyName = "field_value")]
   [XmlElement(ElementName="field_value")]
   public bool Field_value { get; set; }
}

[XmlRoot(ElementName="root")]
public class Root 
{
  [XmlElement(ElementName="file")]
  [JsonProperty(PropertyName = "file")]
  public File File { get; set; }
}

这会给你想要的输出。

{
  "file": {
    "field_name": "contains_mrn",
    "field_value": true
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2018-07-23
    • 2016-10-21
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多