System.Xml.Serialization.ReflectionXmlSerializationWriter.WritePrimitiveValue C# (CSharp) Method

WritePrimitiveValue() private method

private WritePrimitiveValue ( TypeDesc typeDesc, object o, bool isElement, string &stringValue ) : bool
typeDesc TypeDesc
o object
isElement bool
stringValue string
return bool
        private bool WritePrimitiveValue(TypeDesc typeDesc, object o, bool isElement, out string stringValue)
        {
            if (typeDesc == StringTypeDesc || typeDesc.FormatterName == "String")
            {
                stringValue = (string)o;
                return true;
            }
            else
            {
                if (!typeDesc.HasCustomFormatter)
                {
                    stringValue = CovertPrimitiveToString(o, typeDesc);
                    return true;
                }
                else if (o is byte[] && typeDesc.FormatterName == "ByteArrayHex")
                {
                    stringValue = FromByteArrayHex((byte[])o);
                    return true;
                }
                else if (o is DateTime)
                {
                    if (typeDesc.FormatterName == "DateTime")
                    {
                        stringValue = FromDateTime((DateTime)o);
                        return true;
                    }
                    else if (typeDesc.FormatterName == "Date")
                    {
                        stringValue = FromDate((DateTime)o);
                        return true;
                    }
                    else if (typeDesc.FormatterName == "Time")
                    {
                        stringValue = FromTime((DateTime)o);
                        return true;
                    }
                    else
                    {
                        throw new InvalidOperationException(SR.Format(SR.XmlInternalErrorDetails, "Invalid DateTime"));
                    }
                }
                else if (typeDesc == QnameTypeDesc)
                {
                    stringValue = FromXmlQualifiedName((XmlQualifiedName)o);
                    return true;
                }
                else if (o is string)
                {
                    switch (typeDesc.FormatterName)
                    {
                        case "XmlName":
                            stringValue = FromXmlName((string)o);
                            break;
                        case "XmlNCName":
                            stringValue = FromXmlNCName((string)o);
                            break;
                        case "XmlNmToken":
                            stringValue = FromXmlNmToken((string)o);
                            break;
                        case "XmlNmTokens":
                            stringValue = FromXmlNmTokens((string)o);
                            break;
                        default:
                            stringValue = null;
                            return false;
                    }

                    return true;
                }
                else if (o is char && typeDesc.FormatterName == "Char")
                {
                    stringValue = FromChar((char)o);
                    return true;
                }
                else if (o is byte[])
                {
                    // we deal with byte[] specially in WritePrimitive()
                }
                else
                {
                    throw new InvalidOperationException("Unknown type's HasCustomFormatter=true");
                }
            }

            stringValue = null;
            return false;
        }