System.ZXParser.ParseComplexData C# (CSharp) Method

ParseComplexData() private static method

private static ParseComplexData ( object o, ZXPProxy zpp, string s, List ld, int &li ) : void
o object
zpp ZXPProxy
s string
ld List
li int
return void
        private static void ParseComplexData(object o, ZXPProxy zpp, string s, List<DIndices> ld, ref int li)
        {
            // Check For Data Availability
            if(li + 1 >= ld.Count || ld[li].Length < 1 || ld[li + 1].Type != DelimitType.Curly)
                return;

            // Check If A Key Is Available
            string key = GetKeyString(s, ld, li);
            if(string.IsNullOrWhiteSpace(key))
                return;

            // Get Substrings
            DIndices diType = ld[li], diData = ld[li + 1];
            li++;

            // Find The Field That Matches To This Key
            ZXPDatum datum = null;
            if(!zpp.DataDict.TryGetValue(key, out datum)) return;

            // Check For A Possible Conversion
            if(datum.Converter != null) {
                // Try To Convert
                object val = null;
                string sValue = s.Substring(ld[li].Start, ld[li].Length);
                if(ReadValue(sValue, datum.Converter, out val))
                    datum.SetValue(o, val);
                return;
            }
            else {
                // Get The Special Type
                string sType = s.Substring(diType.Start, diType.Length);
                if(string.IsNullOrWhiteSpace(sType)) return;
                Type cType = GetTypeFromString(sType);
                if(cType == null) return;

                // Create And Set The Data
                object val = null;
                string sValue = s.Substring(diData.Start, diData.Length);
                if(ReadValue(sValue, datum.Converter, cType, out val))
                    datum.SetValue(o, val);
            }
        }