public void SmElement(XlfEventArgs args)
        {
            if (!args.NodeType.Equals("EndElement"))
            {
                object parent = stack.Peek();
                switch (parent)
                {
                case Segment s:
                    //SmElement smElement = new SmElement();
                    SmElement smElement = mapper.Map <SmElement>(args);
                    //smElement.Attributes = args.Attributes;
                    if (args.sourceOrTarget.Equals("source"))
                    {
                        s.Source.Add(smElement);
                    }
                    else
                    {
                        s.Target.Add(smElement);
                    }

                    break;

                default:
                    break;
                }
            }
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
                                        JsonSerializer serializer)
        {
            var jobject = JObject.Load(reader);

            object resolvedType = null;

            var kind = jobject["kind"]?.Value <string>();

            if (kind != null)
            {
                switch (kind)
                {
                case "ec":
                    resolvedType = new EcElement();
                    break;

                case "em":
                    resolvedType = new EmElement();
                    break;

                case "ph":
                    resolvedType = new PhElement();
                    break;

                case "sc":
                    resolvedType = new ScElement();
                    break;

                case "sm":
                    resolvedType = new SmElement();
                    break;
                }
            }
            else
            {
                resolvedType = new TextElement();
            }


            serializer.Populate(jobject.CreateReader(), resolvedType);

            return(resolvedType);
        }