我希望能够使用不是服务器的特定时区序列化DateTime,也不是客户端时间.基本上,任何时区.
是否可以在.Net2.0 webservices中覆盖DateTime序列化?
是否可以在.Net2.0 webservices中覆盖DateTime序列化?
我使用xsd.exe编译xmlschema,所以我尝试使用XmlSchemaimporter.
XmlSchemaimporter,将其加载到gac中,运行xsd.exe,并生成具有我想要的类的代码……但该类是一个属性,最终无法反映.
[InvalidOperationException: Cannot
serialize member ‘MetadataDateTime’ of
type cuahsi.Xmloverrides.W3CDateTime.
XmlAttribute/XmlText cannot be used to
encode complex types.]
[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; } }
解决方法
不要直接序列化DateTimeOffset,而是序列化字符串:
// Don't serialize this one [System.Xml.Serialization.XmlIgnore] public System.DateTimeOffset MetadataDateTime { get { ... } set { ... } } // Serialize this one instead [System.Xml.Serialization.XmlAttribute("MetadataDateTime")] public string MetadataDateTimeXml { get { /* format MetadataDateTime to custom format */ } set { /* parse MetadataDateTime from custom format */ } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。