protected virtual void ReadXmlSerializable(XmlReader reader)
{
// <DataSet xsi:nil="true"> does not mean DataSet is null,but it does not have any child
// so dont do anything, ignore the attributes and just return empty DataSet;
_useDataSetSchemaOnly = false;
_udtIsWrapped = false;
if (reader.HasAttributes)
{
const string xsinill = Keywords.XSI + ":" + Keywords.XSI_NIL;
if (reader.MoveToAttribute(xsinill))
{
string nilAttrib = reader.GetAttribute(xsinill);
if (string.Equals(nilAttrib, "true", StringComparison.Ordinal))
{
// case sensitive true comparison
MoveToElement(reader, 1);
return;
}
}
const string UseDataSetSchemaOnlyString = Keywords.MSD + ":" + Keywords.USEDATASETSCHEMAONLY;
if (reader.MoveToAttribute(UseDataSetSchemaOnlyString))
{
string useDataSetSchemaOnly = reader.GetAttribute(UseDataSetSchemaOnlyString);
if (string.Equals(useDataSetSchemaOnly, "true", StringComparison.Ordinal) ||
string.Equals(useDataSetSchemaOnly, "1", StringComparison.Ordinal))
{
_useDataSetSchemaOnly = true;
}
else if (!string.Equals(useDataSetSchemaOnly, "false", StringComparison.Ordinal) &&
!string.Equals(useDataSetSchemaOnly, "0", StringComparison.Ordinal))
{
throw ExceptionBuilder.InvalidAttributeValue(Keywords.USEDATASETSCHEMAONLY, useDataSetSchemaOnly);
}
}
const string udtIsWrappedString = Keywords.MSD + ":" + Keywords.UDTCOLUMNVALUEWRAPPED;
if (reader.MoveToAttribute(udtIsWrappedString))
{
string _udtIsWrappedString = reader.GetAttribute(udtIsWrappedString);
if (string.Equals(_udtIsWrappedString, "true", StringComparison.Ordinal) ||
string.Equals(_udtIsWrappedString, "1", StringComparison.Ordinal))
{
_udtIsWrapped = true;
}
else if (!string.Equals(_udtIsWrappedString, "false", StringComparison.Ordinal) &&
!string.Equals(_udtIsWrappedString, "0", StringComparison.Ordinal))
{
throw ExceptionBuilder.InvalidAttributeValue(Keywords.UDTCOLUMNVALUEWRAPPED, _udtIsWrappedString);
}
}
}
ReadXml(reader, XmlReadMode.DiffGram, true);
}