首页 新闻 会员 周边 捐助

如何将Property首字母大写?

0
悬赏园豆:50 [已解决问题] 解决于 2012-09-14 17:10

有如下的XML及反序列化对象。问题是我想把MenuItem中的children属性的首字母大写,即改成Children,但如果大写就无法反序列化出子节点,请问有什么方法可以搞定?

<?xml version="1.0" encoding="utf-8" ?>
<menus>
  <menu name="a">
    <children>
      <menu name="a1" />
      <menu name="a2" />
      <menu name="a3" />
    </children>
  </menu>
  <menu name="b">
    <children>
      <menu name="b1" />
      <menu name="b2" />
      <menu name="b3">
        <children>
          <menu name="b31" />
          <menu name="b32" />
          <menu name="b33" />
        </children>
      </menu>
    </children>
  </menu>
</menus>
using System.Xml.Serialization;
using System.Xml.Schema;

[XmlRootAttribute(ElementName = "menus", Namespace = "", IsNullable = false)]
public class MenuItems
{

    [XmlElementAttribute("menu", Form = XmlSchemaForm.Unqualified)]
    public MenuItem[] Items { get; set; }
}

[XmlTypeAttribute(AnonymousType = true)]
public class MenuItem
{
    [XmlAttributeAttribute("name")]
    public string Name { get; set; }

    [XmlArrayItemAttribute("menu", typeof(MenuItem), Form = XmlSchemaForm.Unqualified, IsNullable = false)]
    public MenuItem[] children { get; set; }
}
空明流光的主页 空明流光 | 初学一级 | 园豆:111
提问于:2012-09-14 15:02
< >
分享
最佳答案
0

你可以把属性申明成大写开头,但是在 XmlElement 或 XmlArrayItem 里把序列化名称设置为小写开头。

收获园豆:35
Launcher | 高人七级 |园豆:45050 | 2012-09-14 15:26

高手,代码就在上面,麻烦给写下呗。我试了很多方法,都不行,要么编译不过,要么无法序列化。

[XmlArrayItemAttribute("menu", typeof(MenuItem), Form = XmlSchemaForm.Unqualified, IsNullable = false)]
    public MenuItem[] children { get; set; }

就这句,怎么改呢?
空明流光 | 园豆:111 (初学一级) | 2012-09-14 15:53

@沧海一杰: 简单的很:

[XmlArrayItemAttribute("menu", typeof(MenuItem), Form = XmlSchemaForm.Unqualified, IsNullable = false)]
[XmlArrayAttribute("children")]
public MenuItem[] Children { get; set; }

Launcher | 园豆:45050 (高人七级) | 2012-09-14 16:15

@Launcher: 高手,你终于出手了,果然如此,结贴给分。

空明流光 | 园豆:111 (初学一级) | 2012-09-14 17:08
其他回答(3)
0

改xml不行吗?反序列化之前是一个字符串吧?<children>替换为<Children>,</children>替换为</Children>?

收获园豆:5
田林九村 | 园豆:2367 (老鸟四级) | 2012-09-14 16:08

我们公司的代码规范,xml属性名第一个单词小写,C#属性第一个单词大写。

支持(0) 反对(0) 空明流光 | 园豆:111 (初学一级) | 2012-09-14 16:16

@沧海一杰: 反序列化之前做一下替换啊,没让你把xml文件中的小写也替换掉啊

支持(0) 反对(0) 田林九村 | 园豆:2367 (老鸟四级) | 2012-09-14 16:18
0

我怎么看你自己写的代码里面,把属性改为首字母大写完全可以正常运行的呀,你说“想把MenuItem中的children属性的首字母大写,即改成Children,但如果大写就无法反序列化出子节点”,这种情况根本不存在,你再试试看。

收获园豆:5
秦楼东 | 园豆:913 (小虾三级) | 2012-09-14 16:23

可以运行是可以运行,但Children=null,children就不会是null

支持(0) 反对(0) 空明流光 | 园豆:111 (初学一级) | 2012-09-14 16:31

@沧海一杰: 

哦,没留意里面的属性值,不过其他人也给出答案了,你只要再添加

XmlArray的声明就可以了。
支持(0) 反对(0) 秦楼东 | 园豆:913 (小虾三级) | 2012-09-14 16:33
0

设置 要序列化的父节点和子节点  [XmlArray,XmlArrayItem]

 [XmlArray("children"), XmlArrayItem("menu", typeof(MenuItem), Form = XmlSchemaForm.Unqualified, IsNullable = false)]
public MenuItem[] Children { get; set; }
收获园豆:5
Qlin | 园豆:2403 (老鸟四级) | 2012-09-14 16:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册