C# 注释IXmlSerializable

C# 注释IXmlSerializable,c#,wcf,xsd,annotations,ixmlserializable,C#,Wcf,Xsd,Annotations,Ixmlserializable,我创建了一个类型,它实现了IXmlSerializable,并使用XmlSchemaProviderAttribute来定义其模式,以便在WCF服务中使用。据我所知,所有这些都符合“最佳实践”/MSDN 长话短说,出于各种原因,我必须使用IXmlSerializable(不能使用DataContract),并且我希望通过使用xs:annotation和xs:documentation在XSD模式中记录我的类型。除了类型本身之外,似乎所有的东西都可以被注释,不知何故,类型注释是从模式中剥离出来的

我创建了一个类型,它实现了IXmlSerializable,并使用XmlSchemaProviderAttribute来定义其模式,以便在WCF服务中使用。据我所知,所有这些都符合“最佳实践”/MSDN

长话短说,出于各种原因,我必须使用IXmlSerializable(不能使用DataContract),并且我希望通过使用xs:annotation和xs:documentation在XSD模式中记录我的类型。除了类型本身之外,似乎所有的东西都可以被注释,不知何故,类型注释是从模式中剥离出来的

有人能解释为什么,我的代码有什么问题,或者一个可行的解决方案吗

使用下面的类作为操作的参数/返回值,或者作为DataContract的一部分,可以正确地将ComplexType添加到模式中,除了类型注释之外,其他内容都可以

具体来说,这一行没有任何效果(尽管在return语句处有一个断点,我可以验证注释是否确实存在,看起来是否正确):

type.Annotation.Items.Add(新的XmlSchemaDocumentation{Markup=TextToMarkup(“MyClass文档”);
完整样本


id元素的注释
选择1
选择2
[XmlSchemaProvider(“GenerateSchema”)]
公共类MyClass:IXmlSerializable
{
公共静态XmlQualifiedName生成架构(XmlSchemaSet架构)
{
//创造选择
var choice=newxmlschemachoice();
var choice1=新的XmlSchemaElement
{
Name=“MyStringChoice”,
SchemaTypeName=XmlSchemaType.GetBuildinSimpleType(XmlTypeCode.String).QualifiedName,
Annotation=新的XmlSchemaAnnotation()
};
var choice2=新的XmlSchemaElement
{
Name=“MyIntChoice”,
SchemaTypeName=XmlSchemaType.GetBuildinSimpleType(XmlTypeCode.Integer).QualifiedName,
Annotation=新的XmlSchemaAnnotation()
};
choice1.Annotation.Items.Add(新XmlSchemaDocumentation{Markup=TextToMarkup(“选项号1”)});
choice2.Annotation.Items.Add(新XmlSchemaDocumentation{Markup=TextToMarkup(“选项号2”)});
选项。项目。添加(选项1);
选项。项目。添加(选项2);
//创建id元素
var id=新的XmlSchemaElement
{
Name=“MyId”,
SchemaTypeName=XmlSchemaType.GetBuildinSimpleType(XmlTypeCode.Integer).QualifiedName,
Annotation=新的XmlSchemaAnnotation()
};
添加(新的XmlSchemaDocumentation{Markup=TextToMarkup(“id元素的注释”)});
//创建序列
var序列=新的XmlSchemaSequence();
顺序.项目.添加(id);
顺序.项目.添加(选择);
//创建类型
变量类型=新的XmlSchemaComplexType
{
Name=“MyClass”,
粒子=序列,
Annotation=新的XmlSchemaAnnotation()
};
//注释类型:这不起作用!!!!!!!
type.Annotation.Items.Add(新的XmlSchemaDocumentation{Markup=TextToMarkup(“MyClass文档”)});
//向架构添加类型
var schema=GetOrCreateSchema(schemas,“MyNamespace”);
schema.Items.Add(类型);
//返回非匿名类型的XmlQualifiedName
返回新的XmlQualifiedName(“MyClass”、“MyNamespace”);
}
/// 
///创建一个
/// 
/// 
/// 
私有静态XmlNode[]文本标记(字符串文本)
{
var doc=新的XmlDocument();
var t=doc.CreateTextNode(文本);
返回新的XmlNode[]{t};
}
/// 
///查找与命名空间匹配的架构,如果不存在,则创建并添加要设置的架构
/// 
私有静态XmlSchema GetOrCreateSchema(XmlSchemaSet架构,字符串targetNamespace)
{
var schema=schemas.schemas(targetNamespace).OfType().FirstOrDefault();
if(schema==null)
{
schema=新的XmlSchema
{
TargetNamespace=TargetNamespace,
ElementFormDefault=XmlSchemaForm.Qualified
};
schemas.Add(schema);
}
返回模式;
}
公共XmlSchema GetSchema()
{
返回null;
}
公共void ReadXml(XmlReader)
{
//执行委员会
}
public void WriteXml(XmlWriter)
{
//执行委员会
}
}