C# 为什么System.TimeSpan不可XML序列化?
当我尝试将TimeSpan值存储到ApplicationData设置中时,会出现一个错误,因为TimeSpan无法序列化。这个问题说明了如何处理它: 为什么TimeSpan不容易序列化C# 为什么System.TimeSpan不可XML序列化?,c#,serialization,xml-serialization,timespan,C#,Serialization,Xml Serialization,Timespan,当我尝试将TimeSpan值存储到ApplicationData设置中时,会出现一个错误,因为TimeSpan无法序列化。这个问题说明了如何处理它: 为什么TimeSpan不容易序列化 还有,是否存在无法序列化的数据类型列表?它不会序列化的原因是XmlCustomFormatter没有实现序列化它的功能 在XmlCustomFormatter类中,以下是受支持的可序列化数据列表(来自fromdaultvalue方法): DateTime 日期 时间 如果查看源代码引用中的XmlSerializa
还有,是否存在无法序列化的数据类型列表?它不会序列化的原因是
XmlCustomFormatter
没有实现序列化它的功能
在XmlCustomFormatter
类中,以下是受支持的可序列化数据列表(来自fromdaultvalue
方法):
DateTime
日期
时间
如果查看源代码引用中的XmlSerializationWriter
类,可以看到它是如何用于序列化所有内容的:
请参阅WriteTypedPrimitive
方法以了解有关primite等的更多详细信息
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.WriteTypedPrimitive"]/*' />
protected void WriteTypedPrimitive(string name, string ns, object o, bool xsiType) {
//
受保护的void WriteTypedPrimitive(字符串名称、字符串ns、对象o、布尔xsiType){
有关对象和xml序列化的详细信息:
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromByteArrayBase64"]/*' />
protected static byte[] FromByteArrayBase64(byte[] value) {
// Unlike other "From" functions that one is just a place holder for automatic code generation.
// The reason is performance and memory consumption for (potentially) big 64base-encoded chunks
// And it is assumed that the caller generates the code that will distinguish between byte[] and string return types
//
return value;
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromByteArrayHex"]/*' />
protected static string FromByteArrayHex(byte[] value) {
return XmlCustomFormatter.FromByteArrayHex(value);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromDateTime"]/*' />
protected static string FromDateTime(DateTime value) {
return XmlCustomFormatter.FromDateTime(value);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromDate"]/*' />
protected static string FromDate(DateTime value) {
return XmlCustomFormatter.FromDate(value);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromTime"]/*' />
protected static string FromTime(DateTime value) {
return XmlCustomFormatter.FromTime(value);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromChar"]/*' />
protected static string FromChar(char value) {
return XmlCustomFormatter.FromChar(value);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromEnum"]/*' />
protected static string FromEnum(long value, string[] values, long[] ids) {
return XmlCustomFormatter.FromEnum(value, values, ids, null);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromEnum1"]/*' />
protected static string FromEnum(long value, string[] values, long[] ids, string typeName) {
return XmlCustomFormatter.FromEnum(value, values, ids, typeName);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromXmlName"]/*' />
protected static string FromXmlName(string name) {
return XmlCustomFormatter.FromXmlName(name);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromXmlNCName"]/*' />
protected static string FromXmlNCName(string ncName) {
return XmlCustomFormatter.FromXmlNCName(ncName);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromXmlNmToken"]/*' />
protected static string FromXmlNmToken(string nmToken) {
return XmlCustomFormatter.FromXmlNmToken(nmToken);
}
/// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.FromXmlNmTokens"]/*' />
protected static string FromXmlNmTokens(string nmTokens) {
return XmlCustomFormatter.FromXmlNmTokens(nmTokens);
}
//
ByteArrayBase64中受保护的静态字节[](字节[]值){
//与其他“From”函数不同,其中一个函数只是自动代码生成的占位符。
//原因是(可能)大64base编码块的性能和内存消耗
//并且假定调用者生成的代码将区分byte[]和string返回类型
//
返回值;
}
///
ByteArrayHex中受保护的静态字符串(字节[]值){
返回XmlCustomFormatter.FromByteArrayHex(值);
}
///
受保护的静态字符串FromDateTime(DateTime值){
返回XmlCustomFormatter.FromDateTime(值);
}
///
受保护的静态字符串FromDate(日期时间值){
返回XmlCustomFormatter.FromDate(值);
}
///
受保护的静态字符串FromTime(日期时间值){
返回XmlCustomFormatter.FromTime(值);
}
///
受保护的静态字符串FromChar(char值){
返回XmlCustomFormatter.FromChar(值);
}
///
Enum中受保护的静态字符串(长值、字符串[]值、长[]ID){
返回XmlCustomFormatter.FromEnum(值、值、ID、null);
}
///
Enum中受保护的静态字符串(长值、字符串[]值、长[]ID、字符串类型名){
返回XmlCustomFormatter.FromEnum(值、值、ID、typeName);
}
///
受保护的静态字符串FromXmlName(字符串名称){
返回XmlCustomFormatter.FromXmlName(名称);
}
///
受保护的静态字符串FromXmlNCName(字符串ncName){
从XmlncName(ncName)返回XmlCustomFormatter.FromXmlNCName;
}
///
XMLNMTOKEN中受保护的静态字符串(字符串nmToken){
从XMLNMTOKEN(nmToken)返回XmlCustomFormatter.FromXmlNmToken;
}
///
XmlNMTokens中受保护的静态字符串(字符串nmTokens){
从XmlNMTokens(nmTokens)返回XmlCustomFormatter.FromXmlNmTokens;
}
它是[可序列化]
。这是一个不好的标题。不必争辩,但为什么TimeSpan不序列化?它会序列化。只需使用SoapFormatter或BinaryFormatter。可能的重复我不认为这是重复的。另一个问题是问如何序列化,这个问题是问为什么它不工作。如果我错了,请纠正我,但没有命名为的类日期还是时间?@Petoj你说得对。这三个都在使用DataTime
。