【问题标题】:What XML attribute to use?要使用什么 XML 属性?
【发布时间】:2018-12-16 11:07:36
【问题描述】:

我正在使用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; }
    }

我应该使用什么属性来接收 XMl 树中的&lt;content&gt; 组?

我的序列化器:

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);
            }

如果我使用 jdweng​​strong> 的解决方案,如何解析 public class RequestModelpublic class Content

【问题讨论】:

  • 你可以试试object inside object :: RequestModel-&gt;{public ContentModel model{get;set;}{
  • 与您的问题无关,但您对Utf8StringWriter 的使用完全没有意义,因为在serializedItem = writer.ToString() 之后,您的序列化数据是back to UTF-16
  • @GSerg 替换为.ToArray() 应该足够了吗?
  • StringWriter 没有定义 ToArray()。在所有情况下,所有strings 始终为 UTF-16。
  • @GSerg 稍后我需要使用XmlDocument xmlFile = new XmlDocument(); xmlFile.LoadXml(serializedItem); 创建 XML 文档,据我所知,它无论如何都会给我一个字符串。是否可以使用此解决方案在最后对其进行编码? stackoverflow.com/questions/14057434/… 这样:byte[] bytes = Encoding.Default.GetBytes(serializedItem); serializedItem = Encoding.UTF8.GetString(bytes); ?

标签: c# xml xml-serialization


【解决方案1】:

试试这个

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); }
        }

    }
}

【讨论】:

  • 我用我的序列化器更新了我的问题,现在我还不知道如何使用你的解决方案来序列化它。
  • 好的,这太棒了!我在哪里可以给你寄一些包装巧克力?我相信您为我节省了大量尝试各种想法的时间 :) 我已经花了半天时间试图找出解决方案。
猜你喜欢
  • 2011-07-02
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2011-04-04
相关资源
最近更新 更多