【发布时间】:2019-02-18 04:59:26
【问题描述】:
我有一个 XML,它有一些值,有时可能有如下所示的空值:我不希望在 XML 中列出所有具有空值的节点!元素在类中设置为IsNullable = true。任何建议,因为我在 Google 中尝试了很多东西.. 没有任何帮助!
<?xml version="1.0" encoding="utf-8"?>
<Materials>
<Material>
<MaterialName>ABC</MaterialName>
<Weight Value="0.303">
<Weight_A xsi:nil="true" />
<Weight_B xsi:nil="true" />
</Weight>
<Density Value="800">
<Density_A xsi:nil="true" />
<Density_B xsi:nil="true" />
</Density>
<Volume Value="8771.427" />
</Material>
<Material>
<MaterialName>ABC</MaterialName>
<Weight>
<V5_Weight>2.009</V5_Weight>
<V6_Weight>1.3318154561904</V6_Weight>
</Weight>
<Density>
<V5_density>1000</V5_density>
<V6_density>663</V6_density>
</Density>
<Volume Value="2008771.427" />
</Material>
</Materials>
类结构如下:
[XmlRoot(ElementName = "Weight")]
public class Weight
{
[XmlElement(ElementName = "Weight_A", IsNullable = true)]
public string Weight_A { get; set; }
[XmlElement(ElementName = "Weight_B", IsNullable = true)]
public string Weight_B { get; set; }
[XmlAttribute(AttributeName = "Value")]
public string Value { get; set; }
}
[XmlRoot(ElementName = "Density")]
public class Density
{
[XmlElement(ElementName = "Density_A", IsNullable = true)]
public string Density_A { get; set; }
[XmlElement(ElementName = "Density_B", IsNullable = true)]
public string Density_B { get; set; }
[XmlAttribute(AttributeName = "Value")]
public string Value { get; set; }
}
[XmlRoot(ElementName = "Volume")]
public class Volume
{
[XmlElement(ElementName = "Volume_A")]
public string Volume_A { get; set; }
[XmlElement(ElementName = "Volume_B")]
public string Volume_B { get; set; }
[XmlAttribute(AttributeName = "Value")]
public string Value { get; set; }
}
[XmlRoot(ElementName = "Material")]
public class Material
{
[XmlElement(ElementName = "MaterialName")]
public string MaterialName { get; set; }
[XmlElement(ElementName = "Weight")]
public Weight Weight { get; set; }
[XmlElement(ElementName = "Density")]
public Density Density { get; set; }
[XmlElement(ElementName = "Volume")]
public Volume Volume { get; set; }
}
[XmlRoot(ElementName = "Materials")]
public class Materials
{
[XmlElement(ElementName = "Material")]
public List<Material> Material { get; set; }
}
【问题讨论】:
-
请发布您的课程
-
这个答案stackoverflow.com/questions/37838640/… 允许更细粒度地控制属性何时被序列化,但我怀疑你的 [XmlAttribute] 有问题。
-
您的 XML 格式不正确。它缺少
xsi:命名空间前缀的定义,可能是因为它是某个较大文档的片段。很可能应该是<Materials xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">,你能确认一下吗?
标签: c# xml serialization xmlserializer