Hier ist eine viel sauberere Lösung, die ich basierend auf einigen anderen Fragen, die ich gefunden habe, kam. Es ist viel sauberer, weil dann nicht wahr, außer in Ihrem Code etwas brauchen die Art, wie SAFEBOOL zu erklären, wie folgt aus:
public class MyXMLClass
{
public SafeBool Bool { get; set; }
public SafeBool? OptionalBool { get; set; }
}
Sie können sogar machen sie optional und es funktioniert einfach. Diese SafeBool-Struktur behandelt alle Fallvarianten von wahr/falsch, ja/nein oder y/n. Es wird immer serialisieren als wahr/falsch, aber ich habe andere Strukturen ähnlich wie ich es verwenden, um speziell als y/n oder ja/nein zu serialisieren, wenn das Schema dies erfordert (zB: BoolYN, BoolYesNo Strukturen).
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace AMain.CommonScaffold
{
public struct SafeBool : IXmlSerializable
{
private bool _value;
/// <summary>
/// Allow implicit cast to a real bool
/// </summary>
/// <param name="yn">Value to cast to bool</param>
public static implicit operator bool(
SafeBool yn)
{
return yn._value;
}
/// <summary>
/// Allow implicit cast from a real bool
/// </summary>
/// <param name="b">Value to cash to y/n</param>
public static implicit operator SafeBool(
bool b)
{
return new SafeBool { _value = b };
}
/// <summary>
/// This is not used
/// </summary>
public XmlSchema GetSchema()
{
return null;
}
/// <summary>
/// Reads a value from XML
/// </summary>
/// <param name="reader">XML reader to read</param>
public void ReadXml(
XmlReader reader)
{
var s = reader.ReadElementContentAsString().ToLowerInvariant();
_value = s == "true" || s == "yes" || s == "y";
}
/// <summary>
/// Writes the value to XML
/// </summary>
/// <param name="writer">XML writer to write to</param>
public void WriteXml(
XmlWriter writer)
{
writer.WriteString(_value ? "true" : "false");
}
}
}
Sie sollten ein Beispiel dafür angeben. Sie haben wahrscheinlich den besten Vorschlag, wenn Sie es tun. –