/// <summary> /// Helper method to be used within the <see cref="SoapSerializeValue"/> method to write a <c>null</c> value /// into a SOAP serialization. /// </summary> /// <param name="writer">XML writer which is positioned at the starting tag of the XML element enclosing the value.</param> protected void SoapWriteNull(XmlWriter writer) { SoapHelper.WriteNull(writer); }
/// <summary> /// Serializes the given <paramref name="value"/> as contents of the current element in the /// given XML <paramref name="writer"/> in the formatting rules given by this data type. /// </summary> /// <param name="value">Value to serialize. The value must be of this data type.</param> /// <param name="writer">XML writer where the value will be serialized to. The value will be serialized as /// contents of the writer's current element. /// The writer's position is the start of the parent element, the result should go. The caller will write the end /// element tag.</param> public void SoapSerializeValue(object value, XmlWriter writer) { if (value == null) { SoapHelper.WriteNull(writer); return; } switch (_upnpTypeName) { case "ui1": case "ui2": case "ui4": case "ui8": case "i1": case "i2": case "i4": case "i8": case "int": writer.WriteString(value.ToString()); break; case "r4": case "r8": case "number": case "float": writer.WriteString(((Double)value).ToString("E", CultureInfo.InvariantCulture)); break; case "fixed.14.4": writer.WriteString(((Double)value).ToString("0.##############E+0", CultureInfo.InvariantCulture)); break; case "char": case "string": case "uuid": writer.WriteString(value.ToString()); break; case "date": writer.WriteString(((DateTime)value).ToString("yyyy-MM-dd")); break; case "dateTime": writer.WriteString(((DateTime)value).ToString("s")); break; case "dateTime.tz": writer.WriteString(((DateTime)value).ToUniversalTime().ToString("u")); break; case "time": writer.WriteString(((DateTime)value).ToString("T")); break; case "time.tz": writer.WriteString(((DateTime)value).ToUniversalTime().ToString("hh:mm:ss")); break; case "boolean": writer.WriteValue((bool)value); break; case "bin.base64": writer.WriteValue(value); break; case "bin.hex": writer.WriteString(EncodingUtils.ToHexString((byte[])value)); break; case "uri": writer.WriteString(((Uri)value).AbsoluteUri); break; default: throw new NotImplementedException(string.Format("UPnP standard data type '{0}' is not implemented", _upnpTypeName)); } }