Beispiel #1
0
        private async Task <List <Meta> > ProcessMetaAsync(List <object> data)
        {
            bool          codeValuesBlock = false;
            int           i         = 0;
            JArray        tempJA    = new JArray();
            List <Meta>   layerMeta = new List <Meta>();
            StringBuilder sb        = new StringBuilder();
            StringWriter  sw        = new StringWriter(sb);
            JsonWriter    writer    = new JsonTextWriter(sw);

            try
            {
                JObject jObj = JsonUtils.MergeJSON <object>(data);
                tempJA = (JArray)jObj["fields"];

                JsonReader reader = tempJA.CreateReader();
                await writer.WriteStartArrayAsync();

                while (reader.Read())
                {
                    if (codeValuesBlock == false)
                    {
                        if (reader.Value != null)
                        {
                            if (reader.TokenType == JsonToken.PropertyName)
                            {
                                if (reader.Value.ToString() == "domain")
                                {
                                    codeValuesBlock = true;

                                    if (jObj["fields"][i]["domain"].HasValues)
                                    {
                                        var something = "";
                                        try
                                        {
                                            something = jObj["fields"][i]["domain"]["codedValues"].ToString();
                                            await writer.WritePropertyNameAsync("domain");

                                            await writer.WriteRawValueAsync(something);

                                            await writer.WritePropertyNameAsync("range");
                                        }
                                        catch (NullReferenceException e)
                                        {
                                            await writer.WritePropertyNameAsync("range");

                                            something = jObj["fields"][i]["domain"]["range"].ToString();
                                            await writer.WriteRawValueAsync(something);

                                            await writer.WritePropertyNameAsync("domain");
                                        }

                                        await writer.WriteStartArrayAsync();

                                        await writer.WriteEndArrayAsync();

                                        await writer.WriteEndObjectAsync();
                                    }
                                    else
                                    {
                                        await writer.WritePropertyNameAsync("domain");

                                        await writer.WriteStartArrayAsync();

                                        await writer.WriteEndArrayAsync();

                                        await writer.WritePropertyNameAsync("range");

                                        await writer.WriteStartArrayAsync();

                                        await writer.WriteEndArrayAsync();

                                        await writer.WriteEndObjectAsync();

                                        codeValuesBlock = false;
                                    }
                                    i++;
                                }
                                else
                                {
                                    if (reader.Value.ToString() == "name")
                                    {
                                        await writer.WriteStartObjectAsync();
                                    }

                                    await writer.WritePropertyNameAsync(reader.Value.ToString());
                                }
                            }
                            else
                            {
                                await writer.WriteValueAsync(reader.Value.ToString());
                            }
                        }
                    }
                    else
                    {
                        if (reader.Depth == 1)
                        {
                            codeValuesBlock = false;
                        }
                    }
                }
                await writer.WriteEndAsync();

                layerMeta = JsonConvert.DeserializeObject <List <Meta> >(sw.ToString());
                writer.Close();
            }
            catch (Exception e)
            {
                writer.Close();
            }
            //from appsettings.[env].json
            string[] excludesList = _config.GetSection("excludeFilters").Get <string[]>();
            layerMeta = layerMeta.Where(m => !excludesList.Any(e => e.ToLower() == m.name.ToLower())).ToList();
            return(layerMeta);
        }