gpt4 book ai didi

c# - 为什么 System.TimeSpan 不是可序列化的 XML?

转载 作者:太空狗 更新时间:2023-10-29 18:35:57 32 4
gpt4 key购买 nike

当我尝试将 TimeSpan 值存储到 ApplicationData 设置中时,出现错误,因为 TimeSpan 无法序列化。这个 SO 问题显示了如何处理它:How to serialize a TimeSpan to XML

为什么 TimeSpan 不容易序列化?

还有,有不能序列化的数据类型列表吗?

最佳答案

它不会序列化的原因是因为 XmlCustomFormatter 没有实现序列化它的功能。

来自 XmlCustomFormatter 类,这里是支持的可序列化数据列表(来自 FromDefaultValue 方法):

日期时间

日期

时间

如果您查看源代码引用中的 XmlSerializationWriter 类,您可以了解它是如何用于序列化所有内容的:

请参阅 WriteTypedPrimitive 方法以获取有关基元等的更多详细信息。

    /// <include file='doc\XmlSerializationWriter.uex' path='docs/doc[@for="XmlSerializationWriter.WriteTypedPrimitive"]/*' /> 
protected void WriteTypedPrimitive(string name, string ns, object o, bool 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);
}

关于c# - 为什么 System.TimeSpan 不是可序列化的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937535/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com