You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XmlSchemaInference推断UInt32属性为xsd:unsignedByte的原因咨询

问题原因
  • XmlSchemaInference的类型推断逻辑是基于XML实例中的实际数据值,而非原始CLR类型。如果你的class.xml里u32Value的取值范围在0-255之间(unsignedByte的覆盖范围),它会优先推断为更精确的xsd:unsignedByte,而非你预期的xsd:unsignedInt。
  • 微软文档《Mapping XML Data Types to CLR Types》描述的是正向映射规则:将CLR类型序列化到XML Schema时的默认对应关系(比如用XmlSchemaExporter生成Schema),但你当前用的是反向推断(从XML实例推导Schema),两者逻辑完全不同。
解决办法
  • 修改XML实例数据:在class.xml里给u32Value设一个超过255的值(比如256),XmlSchemaInference就会自动推断为xsd:unsignedInt。
  • 调整推断规则:启用宽松推断模式,让工具优先选择更宽泛的类型:
XmlReader reader = XmlReader.Create("class.xml");
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference schema = new XmlSchemaInference();
schema.TypeInference = XmlSchemaInference.InferenceOption.Relaxed;

schemaSet = schema.InferSchema(reader);
  • 直接从CLR类生成Schema:如果你的目标是从C#类生成对应XSD,建议跳过XML实例,直接用XmlSerializer生成,这样能严格遵循官方的类型映射:
XmlSerializer serializer = new XmlSerializer(typeof(YourClass));
XmlSchemaSet schemaSet = new XmlSchemaSet();
serializer.GenerateSchema(schemaSet, null);
foreach (XmlSchema schema in schemaSet.Schemas())
{
    schema.Write(File.CreateText("output.xsd"));
}

内容的提问来源于stack exchange,提问作者TollMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:03:20