zoukankan      html  css  js  c++  java
  • 根据 XSD生成 Data Contract之怪现象

    1. 如果在xml中一个complexType的属性中包含一个属性组A,而在属性组A中又包含属性组B,则B的所有属性在生成类文件时,会被忽略。

        微软对此也有详细说明:http://msdn.microsoft.com/en-us/library/484632e7(v=vs.80).aspx

        有个解决方法是写一个xsl文件,将所有嵌套的属性组遍历出来,写在最外层,然后再对该文件生成.

    2. 明明赋了值,也有xmlAttribute,但是序列化出来的文件里,该属性的值却丢失了

        i.e.

       XSD:

               <xs:attribute name="Start" type="xs:datetime" use="optional" />

       生成如下代码:

            [System.Xml.Serialization.XmlAttributeAttribute(DataType = "date")]
            public System.DateTime Start
            {
               ...
            }

            /// <remarks/>
            [System.Xml.Serialization.XmlIgnoreAttribute()]
            public bool StartSpecified
            {
                ...
            }


             这里, 不仅要设置obj.Start = ..., 还要加上obj.StartSpecified = true;

             原因:http://msdn.microsoft.com/zh-cn/library/w6sktzs3(v=vs.80).aspx              

             简单解释:

                   未指定 default 的 optional:Xsd.exe 生成一个具有 XmlAttributeAttribute 的公共字段。
                   此外,如果该属性的类型不是引用类型(例如字符串),它会生成一个 bool 类型的公共字段,该字段的名称为该属性字段的名称再追加 Specified。
                   例如,如果属性字段的名称为 start,则 bool 字段的名称将为 startSpecified。将某个对象序列化为 XML 时,
                   XmlSerializer 类检查 bool 字段的值,以确定是否写入可选的属性。
                   出现的 bool 字段具有 System.Xml.Serialization.XmlIgnoreAttribute,可防止它被 XmlSerializer 序列化。

  • 相关阅读:
    Node.js——fs常用API
    Node.js——Stream
    Node.js——Buffer
    Node.js——post方式提交的图片如何保存
    CSS——BFC
    Node.js——body方式提交数据
    Node.js——基本服务开启
    Node.js——url模块
    Node.js——render封装
    Node.js——开放静态资源原生写法
  • 原文地址:https://www.cnblogs.com/DataFlow/p/2116815.html
Copyright © 2011-2022 走看看