Я хотел был бы иметь возможность Сериализовать DateTime с определенным часовым поясом, который не является сервером, и не является клиентом. В принципе, любой часовой пояс. Можно ли переопределить сериализацию DateTime, в .Net2.0 webservices?Custom DateTime XML Serialization
Я компилирую xmlschema с помощью xsd.exe, поэтому я попытался использовать XmlSchemaImporter.
Примеры OnSerialize показывают изменение значений, но не изменяют формат вывода.
XmlSchemaImporter, загрузил его в gac, запустил xsd.exe и сгенерировал код, который имеет класс, который я хочу ... но этот класс является атрибутом, который в конечном итоге не может быть отражен.
[InvalidOperationException: Может не сериализации член 'metadataDateTime' из типа Cuahsi.XmlOverrides.W3CDateTime. XmlAttribute/XmlText не могут быть использованы для закодировать сложных типов]
Сгенерированный код
[System.Xml.Serialization.XmlAttributeAttribute()]
public Cuahsi.XmlOverrides.W3CDateTime dateTime {
get {
return this.dateTimeField;
}
set {
this.dateTimeField = value;
}
}
XmlSchemaImporter
public class ImportW3CTime :
System.Xml.Serialization.Advanced.SchemaImporterExtension
{
public override string ImportSchemaType(string name, string ns,
XmlSchemaObject context, XmlSchemas schemas,
XmlSchemaImporter importer, CodeCompileUnit compileUnit,
CodeNamespace mainNamespace, CodeGenerationOptions options,
CodeDomProvider codeProvider)
{
if (XmlSchema.Namespace == ns)
{
switch (name)
{
case "dateTime":
string codeTypeName = typeof(W3CDateTime).FullName;
CodeTypeDeclaration cls =
new CodeTypeDeclaration("W3CDateTime");
cls.IsStruct = true;
cls.Attributes = MemberAttributes.Public;
cls.BaseTypes.Add("dateTime");
mainNamespace.Types.Add(cls);
return codeTypeName;
default: return null;
}
}
else { return null; }
}
}
Добавление 1:. Я просто устал DateTimeOffset, и что все еще вызывает ошибку, когда класс помечен как:
[System.Xml.Serialization.XmlAttributeAttribute(DataType = "dateTime")]
public System.DateTimeOffset metadataDateTime {
get {
return this.metadataDateTimeField;
}
set {
this.metadataDateTimeField = value;
}
}
ли вы когда-нибудь найти решение? – 2011-01-30 06:38:05