【发布时间】:2018-08-02 12:42:54
【问题描述】:
我正在开发一个解析 XML 文档并将其序列化的应用程序。我能够解析并转换为 JSON 但问题。
如果 XML 中不存在该元素节点,我想要实现的是在 json 中添加一个空数组结构。但从我的代码来看,输出为element : null。
到目前为止我做了什么 -
我的班级:
[Serializable()]
[XmlRoot("CarCollection")]
public class CarCollection
{
[XmlArray("Cars")]
[XmlArrayItem("Car", typeof(Car))]
public Car[] Car { get; set; }
}
[Serializable()]
public class Car
{
[XmlElement("StockNumber")]
public string stockNumber { get; set; }
[XmlElement("Make")]
public string make { get; set; }
[XmlArray("Models")]
[XmlArrayItem("model", typeof(Model))]
public Model[] Model { get; set; }
}
[Serializable()]
public class Model
{
[XmlElement("modelName")]
public string modelName { get; set; }
[XmlElement("modelType")]
public string modelType { get; set; }
[XmlElement("price")]
public string price { get; set; }
[XmlElement("preOrderNeeded")]
public string preOrderNeeded { get; set; }
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<CarCollection>
<Cars>
<Car>
<StockNumber>1020</StockNumber>
<Make>Renault</Make>
<Models>
<model>
<modelName>Kwid</modelName>
<modelType>Basic</modelType>
<price>5 Lakhs</price>
<preOrderNeeded>No</preOrderNeeded>
</model>
<model>
<modelName>Kwid</modelName>
<modelType>Compact Model with all upgrades</modelType>
<price>7.25 Lakhs</price>
<preOrderNeeded>Yes</preOrderNeeded>
</model>
</Models>
</Car>
<Car>
<StockNumber>1010</StockNumber>
<Make>Toyota</Make>
</Car>
</Cars>
</CarCollection>
我的序列化逻辑:
CarCollection cars = null;
XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
using (StreamReader sr = new StreamReader(@"C:\Users\someNAme\Downloads\XML\modelXML.xml"))
{
cars = (CarCollection)serializer.Deserialize(sr);
string output = JsonConvert.SerializeObject(cars);
}
这就是我得到的:
{
"stockNumber": "1010",
"make": "Toyota",
"Model": null
}
我想实现:
{
"stockNumber": "1010",
"make": "Toyota",
"Model": []
}
【问题讨论】:
-
您可以只添加额外的逻辑行,如果属性为空,则实例化一个新的空数组...或者您可以忽略它,如:stackoverflow.com/questions/6507889/…
-
其实这个项目只是一个示例。我正在做的事情有点复杂。 XML 节点也是如此。因此,您的建议可能适用于直接 XML。但我也试过这个,它不工作。我期待类似 - "Models": [ { "childElements": { "childElement": [{ }] 其中 childElement 是模型类中的另一个列表
-
那么最终目标是什么,您宁愿提供一个空对象而不是为整个架构提供null?
-
如果您想查看完整的结构,您也可以只实例化内部数组。不过,Hozikimaru 根据您的示例回答了这个问题,因此最好在您的问题中准确说明您想要的结构。
标签: c# json xml serialization