C#类序列化映射
发布时间:2020-12-15 22:13:41 所属栏目:百科 来源:网络整理
导读:我正在寻找有关如何实现和/或更改以下类的类序列化行为的提示,想法. 简化(不完整)样本类: [Serializable]public class Choobakka{ public string Name { get; set; } public VariableListItem Stuff { get; set; }}[Serializable]public class Item{ public
我正在寻找有关如何实现和/或更改以下类的类序列化行为的提示,想法.
简化(不完整)样本类: [Serializable] public class Choobakka { public string Name { get; set; } public VariableList<Item> Stuff { get; set; } } [Serializable] public class Item { public string Name { get; set; } public string Value { get; set; } } [Serializable] public sealed class VariableList<T> : AVariableList<T> { public new ItemList<T> Items { get { return _items; } set { _items = value; } } public new bool IsNull { get { return Items == null; } } public new bool IsEmpty { get { return IsNull || Count <= 0; } } public new int Count { get { return IsNull ? 0 : this.Items.Count; } } public new string CountAsString { get { return Count.ToString(); } } public VariableList() { _items = new ItemList<T>(); } } 这就是我填写和序列化Choobakka的东西的方式 var choobakka = new Choobakka() { Name = "CHOO-BAKKA",Stuff = new VariableList<Item>() }; choobakka.Stuff.Items.Add( new Item() { Name = "passport",Value = "lv" } ); choobakka.Stuff.Items.Add( new Item() { Name = "wallet",Value = "50euro" } ); StringBuilder sb = new StringBuilder(); using (TextWriter tw = new StringWriter(sb)) { XmlSerializer xs = new XmlSerializer(typeof(Choobakka)); xs.Serialize(tw,choobakka); } 序列化的XML看起来像: <Choobakka> <Name>CHOO-BAKKA</Name> <Stuff> <Items> <Item> <Name>passport</Name> <Value>lv</Value> </Item> <Item> <Name>wallet</Name> <Value>50euro</Value> </Item> </Items> </Stuff> </Choobakka> 现在问题是你如何建议获得< Items>的装备标签(如果可能的话) <Choobakka> <Name>CHOO-BAKKA</Name> <Stuff> <Item> <Name>passport</Name> <Value>lv</Value> </Item> <Item> <Name>wallet</Name> <Value>50euro</Value> </Item> </Stuff> </Choobakka> 话虽如此,我无法改变VariableList< T>的结构. class,除了应用一些XML序列化属性. 这样做的原因不仅在于简化了生成的XML,还在于对SQL Server查询生成的XML进行去逐化.我有属性的想法,xsd / xslt转换…… 解决方法
如果你不能改变VariableList<>,那么改变Choobaka就行了
public class Choobakka { public string Name { get; set; } [XmlIgnore] public VariableList<Item> Stuff { get; set; } // we do not serialize this [XmlArray("Stuff")] public Item[] _Stuff // but this { get { // get Item[] from Stuff property somehow // ... // as test return new Item[] {new Item() { Name = "1",Value = "111"},new Item() { Name = "2",Value = "222"}}; } set { // set Stuff property from Item[] somehow // ... } } } 生产(proof) <?xml version="1.0" encoding="utf-16"?> <Choobakka xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Name>CHOO-BAKKA</Name> <Stuff> <Item> <Name>1</Name> <Value>111</Value> </Item> <Item> <Name>2</Name> <Value>222</Value> </Item> </Stuff> </Choobakka> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |