internal void FixStreamDataForNonPLP()
{
object value = GetCoercedValue();
AssertCachedPropertiesAreValid();
if (!_coercedValueIsDataFeed)
{
return;
}
_coercedValueIsDataFeed = false;
if (value is TextDataFeed)
{
if (Size > 0)
{
char[] buffer = new char[Size];
int nRead = ((TextDataFeed)value)._source.ReadBlock(buffer, 0, Size);
CoercedValue = new string(buffer, 0, nRead);
}
else
{
CoercedValue = ((TextDataFeed)value)._source.ReadToEnd();
}
return;
}
if (value is StreamDataFeed)
{
if (Size > 0)
{
byte[] buffer = new byte[Size];
int totalRead = 0;
Stream sourceStream = ((StreamDataFeed)value)._source;
while (totalRead < Size)
{
int nRead = sourceStream.Read(buffer, totalRead, Size - totalRead);
if (nRead == 0)
{
break;
}
totalRead += nRead;
}
if (totalRead < Size)
{
Array.Resize(ref buffer, totalRead);
}
CoercedValue = buffer;
}
else
{
MemoryStream ms = new MemoryStream();
((StreamDataFeed)value)._source.CopyTo(ms);
CoercedValue = ms.ToArray();
}
return;
}
if (value is XmlDataFeed)
{
CoercedValue = MetaType.GetStringFromXml(((XmlDataFeed)value)._source);
return;
}
// We should have returned before reaching here
Debug.Assert(false, "_coercedValueIsDataFeed was true, but the value was not a known DataFeed type");
}