2011-12-01 82 views
0

所以我必须打一个web服务(xml-rpc),即时通讯使用xml-rpc.net库来执行此操作。我必须传递的一个参数必须是.net中没有这种东西的类型作为变量。目前我只写XML并发布,这不是一个可以满足的解决方案。C#xml-rpc <dateTime.iso8601>

的日期时间的XML的外观:

</param> 
<param> 
    <value> 
    <dateTime.iso8601>20101117T09:42:00</dateTime.iso8601> 
    </value> 
</param> 
<param> 

任何人有任何奇思妙想,有人说做一个类dateTime.iso8601的变量,并用其作为参数类型。

+0

你确定xml-rpc.net不会自动以适当的格式序列化你的'DateTime'吗? – madd0

+0

我将在下周对它进行测试并更新 – David

回答

1

xml-rpc.net肯定需要System.Datetime并转换为dateTime.iso8601。我遇到的一个问题是对dateTime.iso8601的各种解释。从你的XML模板中,你的日期时间输出被支持(20101117T09:42:00),你不会有同样的问题。我有一个非常严格的上游服务器,需要一些偏移量(例如+001),我不得不延长并将日期时间格式传递给xml-rpc.net。

编辑

是啊,我修改了代码,以实现新的DateTimeFormat。我下载了源代码并进行了下列修改(我希望它更好地托管,并且可以提供修改)。

有一个XmlRpcSerializer.cs,这是将类型序列化为xml-rpc格式的地方。你需要的是自然的方法...

void Serialize(
     XmlWriter xtw, 
     Object o, 
     MappingActions mappingActions, 
     List<object> nestedObjs) 

某处在这种方法中,是XmlRpcType.tDateTime检查:

else if (xType == XmlRpcType.tDateTime) 
     { 
      DateTime dt = (DateTime)o; 
      //The following line is what you need, if a custom DateTime format was supplied, to override the default 
      string sdt = dt.ToString((string.IsNullOrEmpty(DateTimeFormat) ? "yyyyMMdd'T'HH':'mm':'ss" : DateTimeFormat), 
      DateTimeFormatInfo.InvariantInfo); 
      WriteFullElementString(xtw, "dateTime.iso8601", sdt); 
     } 

故事的其余部分是如何自定义日期时间格式传递给XmlRpcSerializer类。你可以添加一个属性到这个类来实现它。有一个可以使用的XmlRpcFormatSettings,但这取决于你。

+0

您是如何“将日期时间格式扩展并传递给xml-rpc.net的?”? –

+0

希望你在找什么? – keni

+0

我使用XML-RPC.NET版本3.0.0,我不能使用proxy.DateTimeFormat 所以我认为你改变了源代码。 –