Пример #1
0
        private static JArray CustomizeSubmodelElement(ISubmodelElement element, string[] columns)
        {
            JArray jArray      = new JArray();
            Type   elementType = element.GetType();
            List <PropertyInfo> propertyInfos = elementType.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
            JObject             jObj          = new JObject();

            if (element.ModelType == ModelType.SubmodelElementCollection)
            {
                var valueContainer = element as SubmodelElementCollection;
                foreach (var subElement in valueContainer.Value)
                {
                    JArray subJArray = CustomizeSubmodelElement(subElement, columns);
                    jArray.Merge(subJArray, new JsonMergeSettings()
                    {
                        MergeArrayHandling = MergeArrayHandling.Union
                    });
                }
            }
            else
            {
                foreach (var column in columns)
                {
                    var info = propertyInfos.Find(p => p.Name == column.UppercaseFirst());
                    if (info != null)
                    {
                        var value = info.GetValue(element);
                        if (value != null)
                        {
                            jObj.Add(column, JToken.FromObject(value));
                        }
                    }
                }
            }
            if (jObj.HasValues)
            {
                jArray.Add(jObj);
            }

            return(jArray);
        }