Удалите пустой xmlns = “” после XML-сериализации

В:

Check b[2] = {Check(5),Check(4)};

этот синтаксис означает, что аргументами конструктора для двух элементов массива являются 5 и 4. Это не значит, что аргументы временные.

Check(5) является выражением prvalue , это не обязательно означает, что временное материализовано. Одним из способов «использования» значения prvalue является инициализация объекта того же типа.

Это поведение изменилось в C ++ 17; до этого концептуально всегда было временное, но временное может быть опущено по усмотрению компилятора.

7
задан abatishchev 29 December 2010 в 15:10
поделиться

2 ответа

Это работает (Вам просто нужны они, чтобы быть в том же пространстве имен, и Вы используете класс пространств имен, таким образом, устройство записи не путает):

[TestMethod]
public void TestMethod3()
{
    var list = new []{new SitemapNode("1", DateTime.Now, 1), new SitemapNode("2", DateTime.Now.AddDays(1), 2)};
    var serializer = new XmlSerializer(typeof(SitemapNode));
    var st = new MemoryStream();
    using (var writer = XmlWriter.Create(st))
    {
        var ns = new XmlSerializerNamespaces();
        ns.Add("", "test");
        writer.WriteStartElement("test", "test");
        foreach (SitemapNode node in list)
        {
            serializer.Serialize(writer, node, ns);
        }
        writer.WriteEndElement();
    }
    st.Position = 0;
    TestContext.WriteLine(new StreamReader(st).ReadToEnd());
}


[XmlRoot(ElementName = "url", Namespace = "test")]
public class SitemapNode
{
    [XmlElement(ElementName = "loc")]
    public string Location { get; set; }
    [XmlElement(ElementName = "lastmod")]
    public DateTime LastModified { get; set; }
    [XmlElement(ElementName = "priority")]
    public decimal Priority { get; set; }

    public SitemapNode()
    {
        Location = String.Empty;
        LastModified = DateTime.Now;
        Priority = 0.5M;
    }

    public SitemapNode(string location, DateTime lastModified, decimal priority)
    {
        Location = location;
        LastModified = lastModified;
        Priority = priority;
    }
}

И вывод (на основе Ваших комментариев, именно это Вы искали):

    <?xml version="1.0" encoding="utf-8"?><test xmlns="test">
<url><loc>1</loc><lastmod>2009-03-05T13:35:54.6468-07:00</lastmod><priority>1</priority></url>
<url><loc>2</loc><lastmod>2009-03-06T13:35:54.6478-07:00</lastmod><priority>2</priority></url></test>
12
ответ дан 6 December 2019 в 14:10
поделиться

Вы попытались не указать пространство имен в своем атрибуте XmlRoot?

Т.е.:

[XmlRoot(ElementName = "url")]
public class SitemapNode
{ 
...
}
0
ответ дан 6 December 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: