Guideline: Use .NET’s System.Xml.XmlConvert to generate a lexical representation of xs:duration when the binding is to a type of System.string.
javax.xml.datatype.Duration maps to xs:duration. .NET maps xs:duration to a different datatype for DataContractSerializer and XmlSerializer.
DataContractSerializer binds xs:duration to .NET System.TimeSpan.
XmlSerializer binds xs:duration to .NET System.string.
When xs:duration is bound to .NET System.string, the string value must be a lexical representation for xs:duration. .NET provides utility System.Xml.XmlConvert for this purpose.
Example: Mapping xs:duration using DataContactSerializer
//-- Java code fragment public class PurchaseReport { public javax.xml.datatype.Duration period; } //-- Schema fragment <xs:complexType name="purchaseReport"> <xs:sequence> <xs:element name="period" type="xs:duration" minOccurs="0"/> </xs:sequence> </xs:complexType> //-- .NET auto generated code from schema //-- Using svcutil.exe /serializer:DataContractSerializer <wsdl file> public partial class purchaseReport: object, System.Runtime.Serialization.IExtensibleDataObject { private System.TimeSpan periodField; //-- ..... other generated code ........ public System.TimeSpan period { get { return this.periodField; } set { this.periodField = value; } } } //-- C# code fragment purchaseReport tmpR = new purchaseReport(); tmpR.period = new System.TimeSpan.MaxValue;
Example: Mapping xs:duration using XmlSerializer
//-- .NET auto generated code from schema //-- Using svcutil.exe /serializer:XmlSerializer <wsdl file> public partial class purchaseReport { private string periodField; public string period { get { return this.periodField; } set { this.periodField = value; } } } //-- C# code fragment purchaseReport tmpR = new purchaseReport(); tmpR.period = System.Xml.XmlConvert.ToString(new System.TimeSpan(23, 0,0));