in src/main/csharp/Protocol/XmlPrimitiveMapMarshaler.cs [89:169]
public IPrimitiveMap Unmarshal(byte[] mapContent)
{
string xmlString = this.encoder.GetString(mapContent, 0, mapContent.Length);
PrimitiveMap result = new PrimitiveMap();
if (xmlString == null || xmlString == "")
{
return result;
}
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreWhitespace = true;
settings.IgnoreProcessingInstructions = true;
XmlReader reader = XmlReader.Create(new StringReader(xmlString), settings);
reader.MoveToContent();
reader.ReadStartElement("map");
while(reader.Name == "entry")
{
reader.ReadStartElement();
string key = reader.ReadElementContentAsString("string", "");
Object value = null;
switch(reader.Name)
{
case "char":
value = Convert.ToChar(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "double":
value = Convert.ToDouble(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "float":
value = Convert.ToSingle(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "long":
value = Convert.ToInt64(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "int":
value = Convert.ToInt32(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "short":
value = Convert.ToInt16(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "byte":
value = (byte) Convert.ToInt16(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "boolean":
value = Convert.ToBoolean(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
case "byte-array":
value = Convert.FromBase64String(reader.ReadElementContentAsString());
reader.ReadEndElement();
break;
default:
value = reader.ReadElementContentAsString();
reader.ReadEndElement();
break;
};
// Now store the value into our new PrimitiveMap.
result[key] = value;
}
reader.Close();
return result;
}