Я хотел бы иметь возможность сериализации DateTime с определенным часовым поясом, который не является ни сервером, ни временем клиента. В основном, любой часовой пояс.
Можно ли переопределить сериализацию DateTime в веб-сервисах .Net2.0?
Я компилирую 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;
}
}