在C#中将XML转换为JSON时如何保留布尔值?

时间:2018-12-12 13:41:44

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

我正在使用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
  }
}

1 个答案:

答案 0 :(得分: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
  }
}