Schema type information provided by IXmlSerializable is invalid: Type 'string' is not declared

J

Jeremy

I've added the System.Xml.Serialization.XmlSchemaProvider attribute to my
class to customize the schema. Some of the datatypes in my schema are
strings, but I'm getting an error that string type is not declared. Can
anyone show me how to do this properly? I've included the code to my schema
below:

[System.Xml.Serialization.XmlSchemaProvider("MySchema")]
public class AnyTextData2 : AnyTextData,
System.Xml.Serialization.IXmlSerializable
{
public AnyTextData2()
{
}

public static System.Xml.XmlQualifiedName
MySchema(System.Xml.Schema.XmlSchemaSet xs)
{
System.Xml.Serialization.XmlSerializer schemaSerializer =
new
System.Xml.Serialization.XmlSerializer(typeof(System.Xml.Schema.XmlSchema));
System.Xml.Schema.XmlSchema s = AnyTextData2.Schema;
xs.XmlResolver = new System.Xml.XmlUrlResolver();
xs.Add(s);
return new System.Xml.XmlQualifiedName("AnyTextData2");//, ns);
}
private static System.Xml.Schema.XmlSchema Schema
{
get
{
/*
<s:complexType name="AnyTextData2">
<s:simpleContent>
<s:extension base="s:string">
<s:attribute name="Attribute" type="s:string" />
</s:extension>
</s:simpleContent>
</s:complexType>
*/
System.Xml.Schema.XmlSchema pSchema = new
System.Xml.Schema.XmlSchema();
pSchema.ElementFormDefault =
System.Xml.Schema.XmlSchemaForm.Qualified;

//<s:complexType name="CData">
System.Xml.Schema.XmlSchemaComplexType pComplexType = new
System.Xml.Schema.XmlSchemaComplexType();
pComplexType.Name = "AnyTextData2";

//<xs:simpleContent>
System.Xml.Schema.XmlSchemaSimpleContent pSimpleContent = new
System.Xml.Schema.XmlSchemaSimpleContent();

//<s:extension base="s:string">
System.Xml.Schema.XmlSchemaSimpleContentExtension pExtension =
new System.Xml.Schema.XmlSchemaSimpleContentExtension();
pExtension.BaseTypeName = new
System.Xml.XmlQualifiedName("string");//"s:string"

//<s:attribute name="Attribute" type="s:string" />
System.Xml.Schema.XmlSchemaAttribute pAttribute = new
System.Xml.Schema.XmlSchemaAttribute();
pAttribute.Name = "Attribute";
pAttribute.SchemaTypeName = new
System.Xml.XmlQualifiedName("string");//"s:string"
pExtension.Attributes.Add(pAttribute);

pSimpleContent.Content = pExtension;

pComplexType.ContentModel = pSimpleContent;

pSchema.Items.Add(pComplexType);
return pSchema;
}
}

}
 
J

John Saunders [MVP]

Jeremy said:
I've added the System.Xml.Serialization.XmlSchemaProvider attribute to my
class to customize the schema. Some of the datatypes in my schema are
strings, but I'm getting an error that string type is not declared. Can
anyone show me how to do this properly? I've included the code to my
schema below:

[System.Xml.Serialization.XmlSchemaProvider("MySchema")]
public class AnyTextData2 : AnyTextData,
System.Xml.Serialization.IXmlSerializable
{
public AnyTextData2()
{
}

public static System.Xml.XmlQualifiedName
MySchema(System.Xml.Schema.XmlSchemaSet xs)
{
System.Xml.Serialization.XmlSerializer schemaSerializer =
new
System.Xml.Serialization.XmlSerializer(typeof(System.Xml.Schema.XmlSchema));
System.Xml.Schema.XmlSchema s = AnyTextData2.Schema;
xs.XmlResolver = new System.Xml.XmlUrlResolver();
xs.Add(s);
return new System.Xml.XmlQualifiedName("AnyTextData2");//, ns);
}
private static System.Xml.Schema.XmlSchema Schema
{
get
{
/*
<s:complexType name="AnyTextData2">
<s:simpleContent>
<s:extension base="s:string">
<s:attribute name="Attribute" type="s:string" />
</s:extension>
</s:simpleContent>
</s:complexType>
*/
System.Xml.Schema.XmlSchema pSchema = new
System.Xml.Schema.XmlSchema();
pSchema.ElementFormDefault =
System.Xml.Schema.XmlSchemaForm.Qualified;

//<s:complexType name="CData">
System.Xml.Schema.XmlSchemaComplexType pComplexType = new
System.Xml.Schema.XmlSchemaComplexType();
pComplexType.Name = "AnyTextData2";

//<xs:simpleContent>
System.Xml.Schema.XmlSchemaSimpleContent pSimpleContent = new
System.Xml.Schema.XmlSchemaSimpleContent();

//<s:extension base="s:string">
System.Xml.Schema.XmlSchemaSimpleContentExtension pExtension =
new System.Xml.Schema.XmlSchemaSimpleContentExtension();
pExtension.BaseTypeName = new
System.Xml.XmlQualifiedName("string");//"s:string"

Jeremy, "qualified" means "qualified with a namespace". You have no
namespace. The name {no namespace}:string is not defined.

You need to qualifiy these names with the "http://www.w3.org/2001/XMLSchema"
namespace.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,225
Members
46,815
Latest member
treekmostly22

Latest Threads

Top