/// <summary> /// 将数据源中的所有成员的名称和值写入到数据写入器中。 /// </summary> /// <param name="dataWriter">数据写入器</param> public void OnReadAll(IDataWriter <string> dataWriter) { const XBindingFlags MembersOptInWithSkipDefaultValue = XBindingFlags.RWSkipDefaultValue | XBindingFlags.RWMembersOptIn; if ((xTypeInfo.flags & MembersOptInWithSkipDefaultValue) == MembersOptInWithSkipDefaultValue) { MembersOptIn_SkipDefaultValue(); } else if ((xTypeInfo.flags & XBindingFlags.RWMembersOptIn) != 0) { MembersOptIn(); } else if ((xTypeInfo.flags & XBindingFlags.RWSkipDefaultValue) != 0) { SkipDefaultValue(); } else { None(); } void MembersOptIn_SkipDefaultValue() { var valueCopyer = new ValueCopyer(); foreach (var item in xTypeInfo.rwFields) { if (item is XAttributedFieldRW fieldRW && fieldRW.CanRead) { fieldRW.OnReadValue(obj, valueCopyer); if (!valueCopyer.IsEmptyValue()) { valueCopyer.WriteTo(dataWriter[fieldRW.Name]); } } } } void MembersOptIn() { foreach (var item in xTypeInfo.rwFields) { if (item is XAttributedFieldRW fieldRW && fieldRW.CanRead) { fieldRW.OnReadValue(obj, dataWriter[fieldRW.Name]); } } } void SkipDefaultValue() { var valueCopyer = new ValueCopyer(); foreach (var item in xTypeInfo.rwFields) { if (item.CanRead) { item.OnReadValue(obj, valueCopyer); if (!valueCopyer.IsEmptyValue()) { valueCopyer.WriteTo(dataWriter[item.Name]); } } } } void None() { foreach (var item in xTypeInfo.rwFields) { if (item.CanRead) { item.OnReadValue(obj, dataWriter[item.Name]); } } } }