Какой атрибут XML использовать? - PullRequest
0 голосов
/ 16 декабря 2018

Я использую XmlSerializer и хочу получить дерево XML:

<request>
   <ix>ID</ix>
      <content>
            <name>NAMEVALUE</name>
            <visits>INT</visits>
         <dateRequested>yyyy-MM-dd</dateRequested>
      </content>
</request>

с моделью:

[XmlRoot(ElementName = "request")]
    public class RequestModel
    {
        [XmlElement("ix")]
        [JsonProperty("ix")]
        public int ID { get; set; }
        [XmlElement("name")]
        [JsonProperty("name")]
        public string Name { get; set; }
        [XmlElement("visits")]
        [JsonProperty("visits")]
        public int? Visits { get; set; }
        [XmlElement("date")]
        [JsonProperty("date")]
        public DateTime Date { get; set; }
    }

Какой атрибут я должен использовать для получения группы <content> в XMltree?

Мой сериализатор:

IEnumerable<RequestJSONModel> getModels = _context.Requests.ToList();
            foreach (var item in getModels)
            {
                RequestModel requestModel = new RequestModel();
                Content contentModel = new Content();
                //serialize
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(RequestModel));
                var serializedItem = "";
                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                ns.Add("", "");
                using (StringWriter writer = new Utf8StringWriter())
                {
                    xmlSerializer.Serialize(writer, xmlModel, ns);
                    serializedItem = writer.ToString(); // Your XML
                }
                serializedItem = serializedItem.Replace("\r\n", string.Empty);
            }

Как мне разобрать public class RequestModel и public class Content, если я использую решение jdweng ?

1 Ответ

0 голосов
/ 16 декабря 2018

попробуйте

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            RequestModel model = new RequestModel() {
                ix = 123,
                content = new Content() {
                    Name = "NAMEVALUE",
                    Visits = 456,
                    dateRequested = "2018-12-16"
                }
            };

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create(FILENAME, settings);

            XmlSerializer serializer = new XmlSerializer(typeof(RequestModel));

            serializer.Serialize(writer, model);
        }
    }
    [XmlRoot(ElementName = "request")]
    public class RequestModel
    {
        [XmlElement("ix")]
        public int ix { get; set; }

        [XmlElement("content")]
        public Content content { get; set; }

    }
    [XmlRoot(ElementName = "content")]
    public class Content
    {
        [XmlElement("name")]
        public string Name { get; set; }
        [XmlElement("visits")]
        public int? Visits { get; set; }

        private DateTime Date { get; set; }

        [XmlElement("dateRequested")]
        public string dateRequested
        {
            get { return Date.ToString("yyyy-MM-dd"); }
            set { Date = DateTime.ParseExact(value, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); }
        }

    }
}
...