private JNode BuildOriginalValuesMapNode(StructuralAspect aspect, NamingConvention nc)
        {
            var ovMap = aspect.OriginalValuesMap.ToDictionary(kvp => nc.ClientPropertyNameToServer(kvp.Key), kvp => kvp.Value);
            var cps   = aspect is EntityAspect
        ? ((EntityAspect)aspect).EntityType.ComplexProperties
        : ((ComplexAspect)aspect).ComplexType.ComplexProperties;

            cps.ForEach(cp => {
                var co         = aspect.GetValue(cp.Name);
                var serverName = nc.ClientPropertyNameToServer(cp.Name);
                if (cp.IsScalar)
                {
                    var ovmNode       = BuildOriginalValuesMapNode(((IComplexObject)co).ComplexAspect, nc);
                    ovMap[serverName] = ovmNode;
                }
                else
                {
                    var ovmNodes      = ((IEnumerable)co).Cast <IComplexObject>().Select(co2 => BuildOriginalValuesMapNode(co2.ComplexAspect, nc));
                    ovMap[serverName] = JNode.ToJArray(ovmNodes);
                }
            });
            var result = JNode.BuildMapNode(ovMap);

            return(result);
        }