/// <summary> /// Записывает данные LOB-свойства /// </summary> /// <param name="xobj">объект-владелец свойства</param> /// <param name="xmlProp">xml-свойство</param> /// <param name="propInfo">описание свойства</param> private void writeLOBProp(DomainObjectData xobj, XmlElement xmlProp, XPropInfoBase propInfo) { string sPropName = propInfo.Name; XPropType vt = propInfo.VarType; object vPropValue; int nDataSize = 0; if (xobj.IsNew) { vPropValue = xobj.GetUpdatedPropValue(sPropName); if (vPropValue == null || vPropValue == DBNull.Value) { nDataSize = 0; } else { xmlProp.InnerText = XmlPropValueWriter.GetXmlTypedValue(vPropValue, vt); } } else { nDataSize = xobj.GetLoadedPropDataSize(sPropName); if (nDataSize > 0) { vPropValue = xobj.GetLoadedPropValue(sPropName); if (vPropValue == null) { // данные в свойстве есть, но не загружены xmlProp.SetAttribute("loaded", "0"); } else { xmlProp.InnerText = XmlPropValueWriter.GetXmlTypedValue(vPropValue, vt); } } } xmlProp.SetAttribute("data-size", XmlConvert.ToString(nDataSize)); }
private void serializePropertyInternal(DomainObjectData xobj, XmlElement xmlProp, PreloadsNavigator nav) { DomainObjectDataSet dataSet = xobj.Context; string sPropName; object vPropValue; sPropName = xmlProp.LocalName; XPropInfoBase propInfo = xobj.TypeInfo.GetProp(sPropName); switch (propInfo.VarType) { case XPropType.vt_bin: case XPropType.vt_text: writeLOBProp(xobj, xmlProp, propInfo); break; case XPropType.vt_object: if (propInfo is XPropInfoObjectScalar) { // скалярное свойство if (xobj.IsNew) { vPropValue = xobj.GetUpdatedPropValue(sPropName); } else { vPropValue = xobj.GetLoadedPropValue(sPropName); } if (vPropValue != null && !(vPropValue is DBNull)) { addValueIntoObjectProp(dataSet, xmlProp, (XPropInfoObjectScalar)propInfo, (Guid)vPropValue, nav); } } else { // массивное свойство if (xobj.IsNew) { vPropValue = xobj.GetUpdatedPropValue(sPropName); } else { vPropValue = xobj.GetLoadedPropValue(sPropName); } writeArrayProp(xobj, xmlProp, vPropValue, (XPropInfoObject)propInfo, nav); } break; default: if (xobj.IsNew) { vPropValue = xobj.GetUpdatedPropValue(sPropName); } else { vPropValue = xobj.GetLoadedPropValue(sPropName); } if (vPropValue != null && !(vPropValue is DBNull)) { xmlProp.InnerText = XmlPropValueWriter.GetXmlTypedValue(vPropValue, propInfo.VarType); } else { xmlProp.InnerText = String.Empty; } break; } }