Kho*_*mbe 10 c# xml arrays serialization
我正在尝试在序列化XML时得到这个结果
<Test>
<Category>
<FileName>C:\test.txt</FileName>
<!-- Note that here this is an array of a simple class with two fields
without root -->
<Prop1>1</Prop1>
<Prop2>2</Prop2>
<Prop1>4</Prop1>
<Prop2>5</Prop2>
<!-- End array -->
</Category>
</Test>
Run Code Online (Sandbox Code Playgroud)
我已经尝试过不同的东西了
[Serializable]
[XmlRoot("Test")]
public class Test
{
[XmlElement("Category")]
public List<Category> Category= new List<Category>();
}
[Serializable]
[XmlRoot("Category")]
public class Category
{
[XmlElement("FileName")]
public string FileName { get; set; }
[XmlElement("Property")]
public List<Property> Properties = new List<Property>();
}
[Serializable]
public class Property
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到这个输出:
<Test>
<Category>
<FileName>C:\test.txt</FileName>
<Property>
<Prop1>1</Prop1>
<Prop2>2</Prop2>
</Property>
<Property>
<Prop1>4</Prop1>
<Prop2>5</Prop2>
</Property>
</Category>
</Test>
Run Code Online (Sandbox Code Playgroud)
如何删除Property标签?非常感谢提前
如果你真的需要确切的输出,如上所述,你可以使用这样的解决方法:
[Serializable]
public partial class Test {
public List<Category> Category;
}
[Serializable]
public partial class Category {
[XmlElement("FileName")]
public string FileName;
[XmlElement("Prop1")]
[XmlElement("Prop2")]
[XmlChoiceIdentifier("propName")]
public string[] Properties;
[XmlIgnore]
public PropName[] propName;
}
public enum PropName {
Prop1,
Prop2,
}
Run Code Online (Sandbox Code Playgroud)
不,如果不让事情变得复杂,这是不可能的。一种选择是实施IXmlSerializable,但很难做到 100% 正确。您还可以通过创建两个子类型、使用基于类型的版本[XmlArrayItem]并将模型分解为碎片来实现这一点。坦白说,我认为这也不值得。
我个人的偏好是选择不同的布局,或使用 LINQ-to-XML。这可不是什么好事XmlSerializer。
| 归档时间: |
|
| 查看次数: |
8723 次 |
| 最近记录: |