Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# 如何序列化Nullable<;bool>;?_C#_.net_Serialization_Nullable_Boolean - Fatal编程技术网

C# 如何序列化Nullable<;bool>;?

C# 如何序列化Nullable<;bool>;?,c#,.net,serialization,nullable,boolean,C#,.net,Serialization,Nullable,Boolean,我想通过将一个可为null的bool转换为字符串来序列化它 public static string SerializeNullableBoolean(bool? b) { if (b == null) { return "null or -1 or .."; // What to return here? } else { return b.ToString(); } } 将空值序列化为空值最合适的字符串是什么?

我想通过将一个可为null的bool转换为字符串来序列化它

public static string SerializeNullableBoolean(bool? b)
{
    if (b == null)
    {
        return "null or -1 or .."; // What to return here?
    }
    else
    {
        return b.ToString();
    }
}

将空值序列化为空值最合适的字符串是什么?

我会选择一个空字符串来表示空值。

如果要为real
bool
值返回True/False,那么为了对称起见,如果
b
null

因为bool.ToString()返回“True”或“False”,我会选择“Null”。我也将此改写为:

return b.HasValue ? b.ToString() : "Null";
编辑:我收回这句话。bool?.ToString()返回空字符串,因此我将根据更方便的方式来决定。如果一个人需要读取输出,那么“Null”是更好的选择;若它只需要在代码中使用,那个么空字符串就可以了。如果使用空字符串,则它非常简单:

return b.ToString();
保持一致

b.ToString()
返回字符串“true”或“false”。因此,如果您返回-1,那么如果您实际读取序列化文件,那么它的一致性就会降低。反序列化代码也会变得更加“丑陋”,可读性也会降低

我会选择将其序列化为字符串“unset”(或类似于这些行的内容)或字符串“null”。除非您有非常严格的空间要求或非常大的数据集来序列化额外的字符,否则这些字符并不重要。

为什么不:

b.ToString()

如果b为null,则返回一个空字符串。因为这是框架返回的结果,所以我将使用它来保持一致性。这也是
XmlSerializer
用于可为空标量的功能。

如果使用内置XmlSerializer,还可以执行以下操作来序列化值(并防止大量难看的自定义序列化代码):


就我个人而言,我不会使用上述任何一种,而只是使用ShouldSerialize接口。 比如说,

[XmlElement("SomeBoolean ", Namespace = "SomeNamespace")]
public bool? SomeBoolean { get; set; }
public bool ShouldSerializeSomeBoolean() { return SomeBoolean.HasValue; }

感谢大家的投入!当然是:
true
false
FileNotFound
!(向DailyWTF站点点头)我实际上没有检查XmlSerializer是否能够正确处理可为空的bool,因此这可能是不必要的。
[XmlElement("SomeBoolean ", Namespace = "SomeNamespace")]
public bool? SomeBoolean { get; set; }
public bool ShouldSerializeSomeBoolean() { return SomeBoolean.HasValue; }