【问题标题】:how to ask XSD.exe to generate proper class for me, so that i can create a fine XML如何让 XSD.exe 为我生成适当的类,以便我可以创建一个精细的 XML
【发布时间】:2012-10-02 17:28:42
【问题描述】:

我从 Visual Studio 2010 创建了一个 XSD 文件,

然后我使用xsd /c mydemo.xsd为我生成类,这样我就可以在运行时创建一个XML文件。

但是,当我使用该类、填写一些值并序列化对象时,XML 文件对我来说并不好看。

这是我的 XSD 文件Click here to see

我期望的 XML 文件是 Click here to see (从 Visual Studio“示例 XML”生成)

但是当我尝试序列化它时,XML文件是这样的CLick here to see

格式完全不同

例如

期待:

<ColumnInfo> 
  <Column Type="Type1" DisplayValue="DisplayValue1" Key="Key1"/> 
  <Column Type="Type2" DisplayValue="DisplayValue2" Key="Key2"/> 
  <Column Type="Type3" DisplayValue="DisplayValue3" Key="Key3"/> 
</ColumnInfo>

但是生成的结果是这样的:

<columnInfoField>
  <ColumnType>
    <displayValueField>Display value for key 1</displayValueField>
    <keyField>key1</keyField>
    <typeField>string</typeField>
  </ColumnType>
  <ColumnType>
    <displayValueField>Display value for key 2</displayValueField>
    <keyField>key2</keyField>
    <typeField>int</typeField>
  </ColumnType>
  <ColumnType>
    <displayValueField>Display value for key 3</displayValueField>
    <keyField>key3</keyField>
    <typeField>long</typeField>
  </ColumnType>
</columnInfoField>

我实现的用于序列化报告的代码是:

http://msdn.microsoft.com/en-us/library/ms731073.aspx

DataContractSerializer dcs = new DataContractSerializer(typeof(Report));
using (XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateTextWriter(File.Create(@"C:\demo\schema\output.xml"), Encoding.UTF8))
{
  dcs.WriteObject(xdw, report);
}

不知道为什么我不能使用“XmlSerializer”,当我使用它时,它会抱怨不能转换数组类型...

无法生成临时类(结果=1)。
错误 CS0030:无法将类型“ColumnValueType[]”转换为 '列值类型'
错误 CS0029:无法将类型“ColumnValueType”隐式转换为 '列值类型[]'

那么,谁能给我一些建议,我该如何修复我的 XML 格式???

【问题讨论】:

  • 请不要在标题中添加“[C#]”之类的内容。只需将它们留在标签中即可。
  • @John 好的...谢谢,我会记住的

标签: c# xml-serialization xsd xsd.exe


【解决方案1】:

xsd.exe 有一个错误 - 请查看此博客文章: http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html

【讨论】:

    【解决方案2】:

    数据协定序列化程序具有与 XmlSerializer 不同的规则。不如先试试XmlSerializer,看看输出是否“正确”。

    【讨论】:

    • 你的意思是使用 XmlSerializer 来处理从 XSD.exe 生成的“类”吗?...它们不能相互工作,XmlSerializer 抱怨不能将大小写类型转换为 xml 元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多