📄 xmlimporter.cs
字号:
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
}
offs += 8;
continue;
case ClassDescriptor.FieldType.tpFloat:
buf.extend(offs + 4);
if (elem != null)
{
if (elem.isIntValue())
{
Bytes.packF4(buf.arr, offs, (float)elem.IntValue);
}
else if (elem.isRealValue())
{
Bytes.packF4(buf.arr, offs, (float) elem.RealValue);
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
}
offs += 4;
continue;
case ClassDescriptor.FieldType.tpDouble:
buf.extend(offs + 8);
if (elem != null)
{
if (elem.isIntValue())
{
Bytes.packF8(buf.arr, offs, (double) elem.IntValue);
}
else if (elem.isRealValue())
{
Bytes.packF8(buf.arr, offs, elem.RealValue);
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
}
offs += 8;
continue;
case ClassDescriptor.FieldType.tpDecimal:
buf.extend(offs + 16);
if (elem != null)
{
decimal d = 0;
if (elem.isIntValue())
{
d = elem.IntValue;
}
else if (elem.isRealValue())
{
d = (decimal)elem.RealValue;
}
else if (elem.isStringValue())
{
try
{
d = Decimal.Parse(elem.StringValue);
}
catch (FormatException)
{
throwException("Invalid date");
}
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
Bytes.packDecimal(buf.arr, offs, d);
}
offs += 16;
continue;
case ClassDescriptor.FieldType.tpGuid:
buf.extend(offs + 16);
if (elem != null)
{
if (elem.isStringValue())
{
Guid guid = new Guid(elem.StringValue);
byte[] bits = guid.ToByteArray();
Array.Copy(bits, 0, buf.arr, offs, 16);
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
}
offs += 16;
continue;
case ClassDescriptor.FieldType.tpDate:
buf.extend(offs + 8);
if (elem != null)
{
if (elem.isIntValue())
{
Bytes.pack8(buf.arr, offs, elem.IntValue);
}
else if (elem.isNullValue())
{
Bytes.pack8(buf.arr, offs, - 1);
}
else if (elem.isStringValue())
{
try
{
Bytes.packDate(buf.arr, offs, DateTime.Parse(elem.StringValue));
}
catch (FormatException)
{
throwException("Invalid date");
}
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
}
offs += 8;
continue;
case ClassDescriptor.FieldType.tpString:
if (elem != null)
{
System.String val = null;
if (elem.isIntValue())
{
val = System.Convert.ToString(elem.IntValue);
}
else if (elem.isRealValue())
{
val = elem.RealValue.ToString();
}
else if (elem.isStringValue())
{
val = elem.StringValue;
}
else if (elem.isNullValue())
{
val = null;
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
offs = buf.packString(offs, val);
continue;
}
buf.extend(offs + 4);
Bytes.pack4(buf.arr, offs, - 1);
offs += 4;
continue;
case ClassDescriptor.FieldType.tpOid:
case ClassDescriptor.FieldType.tpObject:
{
int oid = 0;
if (elem != null)
{
XMLElement refElem = elem.getSibling("ref");
if (refElem == null)
{
throwException("<ref> element expected");
}
oid = mapId(getIntAttribute(refElem, "id"));
}
buf.extend(offs + 4);
Bytes.pack4(buf.arr, offs, oid);
offs += 4;
continue;
}
case ClassDescriptor.FieldType.tpValue:
offs = packObject(elem, fd.valueDesc, offs, buf);
continue;
#if SUPPORT_RAW_TYPE
case ClassDescriptor.FieldType.tpRaw:
#endif
case ClassDescriptor.FieldType.tpArrayOfByte:
case ClassDescriptor.FieldType.tpArrayOfSByte:
offs = importBinary(elem, offs, buf, fieldName);
continue;
case ClassDescriptor.FieldType.tpCustom:
{
if (!elem.isStringValue())
{
throwException("text element expected");
}
String str = elem.StringValue;
CustomSerializable obj = storage.serializer.Parse(str);
storage.serializer.Pack(obj, buf.GetOutputStream());
offs = buf.used;
break;
}
case ClassDescriptor.FieldType.tpArrayOfBoolean:
if (elem == null || elem.isNullValue())
{
buf.extend(offs + 4);
Bytes.pack4(buf.arr, offs, - 1);
offs += 4;
}
else
{
XMLElement item = elem.getSibling("element");
int len = (item == null)?0:item.Counter;
buf.extend(offs + 4 + len);
Bytes.pack4(buf.arr, offs, len);
offs += 4;
while (--len >= 0)
{
if (item.isIntValue())
{
buf.arr[offs] = (byte) (item.IntValue != 0?1:0);
}
else if (item.isRealValue())
{
buf.arr[offs] = (byte) (item.RealValue != 0.0?1:0);
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
item = item.NextSibling;
offs += 1;
}
}
continue;
case ClassDescriptor.FieldType.tpArrayOfChar:
case ClassDescriptor.FieldType.tpArrayOfShort:
case ClassDescriptor.FieldType.tpArrayOfUShort:
if (elem == null || elem.isNullValue())
{
buf.extend(offs + 4);
Bytes.pack4(buf.arr, offs, - 1);
offs += 4;
}
else
{
XMLElement item = elem.getSibling("element");
int len = (item == null)?0:item.Counter;
buf.extend(offs + 4 + len * 2);
Bytes.pack4(buf.arr, offs, len);
offs += 4;
while (--len >= 0)
{
if (item.isIntValue())
{
Bytes.pack2(buf.arr, offs, (short) item.IntValue);
}
else if (item.isRealValue())
{
Bytes.pack2(buf.arr, offs, (short) item.RealValue);
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
}
item = item.NextSibling;
offs += 2;
}
}
continue;
case ClassDescriptor.FieldType.tpArrayOfEnum:
if (elem == null || elem.isNullValue())
{
buf.extend(offs + 4);
Bytes.pack4(buf.arr, offs, - 1);
offs += 4;
}
else
{
XMLElement item = elem.getSibling("element");
int len = (item == null)?0:item.Counter;
Type elemType = f.FieldType.GetElementType();
buf.extend(offs + 4 + len * 4);
Bytes.pack4(buf.arr, offs, len);
offs += 4;
while (--len >= 0)
{
if (item.isIntValue())
{
Bytes.pack4(buf.arr, offs, (int) item.IntValue);
}
else if (item.isRealValue())
{
Bytes.pack4(buf.arr, offs, (int) item.RealValue);
}
else if (item.isStringValue())
{
try
{
#if COMPACT_NET_FRAMEWORK
Bytes.pack4(buf.arr, offs, (int)ClassDescriptor.parseEnum(elemType, item.StringValue));
#else
Bytes.pack4(buf.arr, offs, (int)Enum.Parse(elemType, item.StringValue));
#endif
}
catch (ArgumentException)
{
throwException("Invalid enum value");
}
}
else
{
throwException("Conversion for field " + fieldName + " is not possible");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -