谁能帮我解决这个问题?我正在使用 Linq XElement 类创建一个 XML 文档。创建文档后,我将其放入数据集对象中。数据集允许对象允许我从创建的 XML 推断 XSD 模式,这很方便。但是...... XSD 中的数据类型都以字符串类型出现,即使对于数值也是如此。
下面是一些重现该问题的示例代码:
class Person
{
public int ID { get; set; }
public String Name { get; set; }
public int Age { get; set; }
public double Score { get; set; }
public XElement GetXML()
{
var person = new XElement("Person", new XAttribute("ID", ID));
person.Add(new XElement("Name", Name));
person.Add(new XElement("Age", Age));
person.Add(new XElement("Score", Score));
return person;
}
}
static void Main(string[] args)
{
var set = new DataSet("Test");
var root = new XElement("root");
var p1 = new Person() { ID = 1, Name = "P1", Age = 32, Score = 50.4 };
var p2 = new Person() {ID = 2, Name = "P2", Age = 40, Score = 0 };
root.Add(p1.GetXML());
root.Add(p2.GetXML());
set.ReadXml(root.CreateReader());
var xml = set.GetXml();
var schema = set.GetXmlSchema();
Console.WriteLine(schema);
Console.WriteLine(xml);
Console.ReadKey(true);
}
运行代码时,架构将包含如下项目:
<xs:element name="Age" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
例如,我看不到如何将其类型设置为整数。
我尝试更改以下行:
set.ReadXml(root.CreateReader());
到:
set.ReadXml(root.CreateReader(), XmlReadMode.InferTypedSchema);
这几乎奏效了,但它仍然没有产生我想要的确切类型。此外,使用导致值不一致(有时具有十进制类型的值,例如 Score 将是 type='xs:double',其他时候它们会是 type='xs:Anonymous'
有什么方法可以指定属性和节点的数据类型?请注意,我处于必须使用 Syste.Data.DataSet 类最终保存 xml 的位置,但我不一定必须使用 linq XElement 类来构造要放置在其中的 XML。我怀疑这个问题可能与调用 CreateReader 创建的 XNodeReader 对象以及 XElement 类的简单性有关。
任何建议,将不胜感激!谢谢