我正在尝试实现IXmlSerializable。 我的类实现了serializable并写了一个字符串。我希望能够使用XsdDataContractExporter(标准的)导出对象图模式。
该类序列化为一个简单的xml。
<Urn ns='http://palantir.co.za/urn'>somestring</Urn>
我对GetSchema的实现,对应于XmlSchemaProvider属性,如下所示。
我需要能够生成并导出架构。
public static XmlQualifiedName GetSchema(XmlSchemaSet xs)
{
string ns = "http://palantir.co.za/urn";
if (xs.Schemas("http://palantir.co.za/urn").Count != 0)
return new XmlQualifiedName("Urn", ns); // tried many.
XmlSchema schema = new XmlSchema();
schema.Namespaces.Add("xs", XmlSchema.Namespace);
schema.Namespaces.Add("Urn", ns); // tried many prefixes.
schema.ElementFormDefault = XmlSchemaForm.Qualified;
schema.Items.Add(
new XmlSchemaElement() {
Name = "Urn",
SchemaTypeName = XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String).QualifiedName
});
schema.TargetNamespace = ns;
xs.Add(schema);
//xs.Compile();
return new XmlQualifiedName("Urn", schema.TargetNamespace);
}
我收到以下错误:
The http://www.w3.org/2001/XMLSchema:schema element is not declared..当我尝试导出架构时。
答案 0 :(得分:0)
尝试在单独的文件中编写XSD架构(在运行时编写更容易)。 确保它是正确的。 将xsd架构作为资源放入程序集中。 然后,在您的GetSchema方法中,只需反序列化它:
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
return XmlSchema.Read(stream, null);
}
另请注意,您的方法GetSchema将在运行时在任何(反)序列化上调用。 因此,每次不好的想法都会对模式进行绝望。