Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么System.TimeSpan不可XML序列化?_C#_Serialization_Xml Serialization_Timespan - Fatal编程技术网

C# 为什么System.TimeSpan不可XML序列化?

C# 为什么System.TimeSpan不可XML序列化?,c#,serialization,xml-serialization,timespan,C#,Serialization,Xml Serialization,Timespan,当我尝试将TimeSpan值存储到ApplicationData设置中时,会出现一个错误,因为TimeSpan无法序列化。这个问题说明了如何处理它: 为什么TimeSpan不容易序列化 还有,是否存在无法序列化的数据类型列表?它不会序列化的原因是XmlCustomFormatter没有实现序列化它的功能 在XmlCustomFormatter类中,以下是受支持的可序列化数据列表(来自fromdaultvalue方法): DateTime 日期 时间 如果查看源代码引用中的XmlSerializa

当我尝试将TimeSpan值存储到ApplicationData设置中时,会出现一个错误,因为TimeSpan无法序列化。这个问题说明了如何处理它:

为什么TimeSpan不容易序列化


还有,是否存在无法序列化的数据类型列表?

它不会序列化的原因是
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