![](/img/trans.png)
[英]XML Serialization of a List<DateTime> using a custom datetime format
[英]Custom DateTime XML Serialization
我希望能夠使用不是服務器的特定時區(也不是客戶端時間)來序列化DateTime。 基本上是任何時區。 .Net2.0 Webservices中是否可以覆蓋DateTime序列化?
我使用xsd.exe編譯xmlschema,因此嘗試使用XmlSchemaImporter。
OnSerialize示例顯示值更改,但不更改輸出格式。
XmlSchemaImporter,將其加載到gac中,運行xsd.exe,並生成具有我想要的類的代碼...但是該類是一個屬性,最終無法反映出來。
[InvalidOperationException:無法序列化Cuahsi.XmlOverrides.W3CDateTime類型的成員'metadataDateTime'。 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;
}
}
不要直接序列化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 */ }
}
您可能要使用DateTimeOffset而不是純DateTime對象。
這是2天前討論的。 這樣對您有用嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.