我希望能够使用既不是服务器时间也不是客户端时间的特定时区来序列化 DateTime。基本上,任何时区。 是否可以在 .Net2.0 网络服务中覆盖 DateTime 序列化?
我使用 xsd.exe 编译了一个 xmlschema,所以我尝试使用 XmlSchemaImporter。
OnSerialize 示例显示值更改,但不更改输出格式。
XmlSchemaImporter,将其加载到 gac 中,运行 xsd.exe,并生成具有我想要的类的代码...但是该类是一个属性,最终无法反射(reflect)出来。
[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;
}
}
XmlSchema 导入器
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 */ }
}
关于c# - 自定义日期时间 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/306579/