Я могу заставить XmlSerializer проигнорировать пространство имен на десериализации?

После обновления комментариев и OP необходимо использовать $('.ProductList').hide().filter("#" + id + "List").show()

$(".col-sm-4.rowitem").click(function (e) {
    var id = this.id;
    $('.ProductList').hide().filter("#" + id + "List").show()
});
.ProductList{
  display : none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-sm-4 rowitem" id="Snacks">
    <a href="#">
        <img src="~/XImages/snacks.png" />
    </a>
</div>
<div class="col-sm-4 rowitem" id="Baby">
    <a href="#">
        <img src="~/XImages/baby.png" />
    </a>
</div>
<div class="col-sm-4 rowitem" id="Perfumes">
    <a href="#">
        <img src="~/XImages/perfumes.png" />
    </a>
</div>

<div class="ProductList" id="SnacksList" >
    Under construction Snacks
</div>
<div class="ProductList" id="BabyList">
    Under construction Baby
</div>
<div class="ProductList" id="PerfumesList" >
    Under construction Perfumes
</div>

40
задан NotDan 15 May 2009 в 18:57
поделиться

2 ответа

Да, вы можете указать XmlSerializer игнорировать пространства имен во время десериализации.

Определите XmlTextReader, который игнорирует пространства имен. Примерно так:

// helper class to ignore namespaces when de-serializing
public class NamespaceIgnorantXmlTextReader : XmlTextReader
{
    public NamespaceIgnorantXmlTextReader(System.IO.TextReader reader): base(reader) { }

    public override string NamespaceURI
    {
        get { return ""; }
    }
}

// helper class to omit XML decl at start of document when serializing
public class XTWFND  : XmlTextWriter {
    public XTWFND (System.IO.TextWriter w) : base(w) { Formatting= System.Xml.Formatting.Indented;}
    public override void WriteStartDocument () { }
}

Вот пример десериализации с помощью этого TextReader:

public class MyType1 
{
    public string Label
    {
        set {  _Label= value; } 
        get { return _Label; } 
    }

    private int _Epoch;
    public int Epoch
    {
        set {  _Epoch= value; } 
        get { return _Epoch; } 
    }        
}



    String RawXml_WithNamespaces = @"
      <MyType1 xmlns='urn:booboo-dee-doo'>
        <Label>This document has namespaces on its elements</Label>
        <Epoch xmlns='urn:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>0</Epoch>
      </MyType1>";


    System.IO.StringReader sr;
    sr= new System.IO.StringReader(RawXml_WithNamespaces);
    var o1= (MyType1) s1.Deserialize(new NamespaceIgnorantXmlTextReader(sr));
    System.Console.WriteLine("\n\nDe-serialized, then serialized again:\n");
    s1.Serialize(new XTWFND(System.Console.Out), o1, ns);
    Console.WriteLine("\n\n");

Результат примерно такой:

    <MyType1>
      <Label>This document has namespaces on its elements</Label>
      <Epoch>0</Epoch>
    </MyType1>
46
ответ дан 27 November 2019 в 01:33
поделиться

Зачем пытаться заставить XmlSerializer забыть, как работает XML? Это факт XML, что два элемента с одним и тем же именем, но с разными пространствами имен являются разными элементами.

Если вы хотите обработать XML, который не имеет пространств имен, вы должны предварительно обработать его, чтобы удалить пространства имен, и тогда передать его сериализатору.

-3
ответ дан 27 November 2019 в 01:33
поделиться
Другие вопросы по тегам:

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