c# - XML को समान टैग दो बार सीरियल करें




.net exception-handling (2)

आप धारावाहिककर्ता को अपनी वर्तमान संपत्तियों को अनदेखा करने के लिए कह सकते हैं, और धारावाहिककरण के उद्देश्य के लिए एक नया जोड़ सकते हैं:

public class Test
{
    [XmlIgnore]
    public String Header1 { get; set; }

    [XmlIgnore]
    public String Header2 { get; set; }

    [XmlElement("HeaderText")]
    public String[] HeaderText
    {
        get{  return new[]{Header1,Header2};   }
        set{  if(value.Length == 2) { Header1 = value[0]; Header2 = value[1];} }
    }
}

लाइव उदाहरण: http://rextester.com/YVEF64085

मुझे समस्या है:

मुझे एक्सएमएल फ़ाइल को वर्ग को सीरियल करना होगा। लेकिन दो गुणों को समान नाम से नाम दिया जाना चाहिए:

वांछित xml:

<?xml version="1.0"?>
<Test>
  <HeaderText>
    <Tag1>AAA</Tag1>
  </HeaderText>
  <HeaderText>
    <Tag2>BBB</Tag2>
  </HeaderText>
</Test>

मुझे इसे ऑब्जेक्ट पर वापस करने के लिए deserialize की जरूरत नहीं है

कोड:

public class Header1
{
    [XmlElement("Tag1")]
    public String Tag1 { get; set; }
}

public class Header2
{
    [XmlElement("Tag2")]
    public String Tag2 { get; set; }
}

public class Test
{
    [XmlElement("HeaderText")]
    public Header1 Header1 { get; set; }

    [XmlElement("HeaderText")]
    public Header2 Header2 { get; set; }
}

var doc = new Test
{
    Header1 = new Header1 { Tag1 = "AAA" },
    Header2 = new Header2 { Tag2 = "BBB" }
};

var xml = new XmlSerializer(typeof(Test));
using (var fs = new FileStream("test.xml", FileMode.Create))
{
    xml.Serialize(fs, doc);
}

यह कोड काम नहीं करता है

एक्सएमएल तत्व 'हेडरटेक्स्ट' नामस्थान से '' पहले से मौजूद गुंजाइश में मौजूद है। तत्व के लिए एक और एक्सएमएल नाम या नेमस्पेस निर्दिष्ट करने के लिए एक्सएमएल गुण का उपयोग करें

मैं क्या कर सकता हूँ?

वास्तविक दुनिया का उदाहरण:

  <Product>
    <RecordReference>1-15991</RecordReference>
    <MainSubject>
      <MainSubjectSchemeIdentifier>66</MainSubjectSchemeIdentifier>
      <SubjectCode>2</SubjectCode>
    </MainSubject>
    <MainSubject>
      <MainSubjectSchemeIdentifier>20</MainSubjectSchemeIdentifier>
      <SubjectHeadingText>Venäläisiä kirjoja: uskonto, teosofia, mystiikka</SubjectHeadingText>
    </MainSubject>
</Product>

एक सरणी का उपयोग करें:

public class Test
{
    [XmlElement("HeaderText")]
    public string[] HeaderText { get; set; }
}

और फिर:

var doc = new Test
{
    HeaderText = new[] { "AAA", "BBB" }
};
var xml = new XmlSerializer(typeof(Test));
using (var fs = new FileStream("test.xml", FileMode.Create))
{
    xml.Serialize(fs, doc);
}

List<string> साथ भी काम करता है

अद्यतन करें:

जटिल वस्तुओं के साथ आप एक मॉडल को परिभाषित करते हैं:

public class Header
{
    public string Tag { get; set; }
}

और फिर आपके पास इस मॉडल का संग्रह है:

public class Test
{
    [XmlElement("HeaderText")]
    public Header[] HeaderText { get; set; }
}

और फिर आप क्रमबद्ध करें:

var doc = new Test
{
    HeaderText = new[] 
    { 
        new Header { Tag = "AAA" }, 
        new Header { Tag = "BBB" }
    }
};
var xml = new XmlSerializer(typeof(Test));
using (var fs = new FileStream("test.xml", FileMode.Create))
{
    xml.Serialize(fs, doc);
}




xml-serialization