2017-03-14 2 views
0

I aC# -Klasse, die ich von XSD generiert, ich bin Serialisierung, ich Szenario haben, dass einige Elemente in bestimmten Bedingung hinzugefügt werden, Dies ist meine KlasseXML Serialisierung nicht Elemente in XML Hinzufügen

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
public partial class MyRequestClass 
{ 
    private string testNOField; 
    private string mOBNOField; 
    private int sTYPEField; 
    private System.DateTime fRMDATEField; 
    private System.DateTime tODATEField; 
    public string TESTNO 
    { 
     get 
     { 
      return this.testNOField; 
     } 
     set 
     { 
      this.testNOField = value; 
     } 
    } 

    public string MOBNO 
    { 
     get 
     { 
      return this.mOBNOField; 
     } 
     set 
     { 
      this.mOBNOField = value; 
     } 
    } 


    public int STYPE 
    { 
     get 
     { 
      return this.sTYPEField; 
     } 
     set 
     { 
      this.sTYPEField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute(DataType = "date")] 
    public System.DateTime FROMDATE 
    { 
     get 
     { 
      return this.fRMDATEField; 
     } 
     set 
     { 
      this.fRMDATEField = value; 
     } 
    } 


    [System.Xml.Serialization.XmlElementAttribute(DataType = "date")] 
    public System.DateTime TODATE 
    { 
     get 
     { 
      return this.tODATEField; 
     } 
     set 
     { 
      this.tODATEField = value; 
     } 
    } 

} 

Die Eigenschaften FromDate und ToDate werden unter bestimmten Bedingungen hinzugefügt. Das Problem ist, wenn ich diesen beiden Eigenschaften Werte zur Verfügung stelle, diese nicht in XML hinzufüge und auch kein Fehler erscheint, obwohl andere Elemente in diesem Fall hinzugefügt werden. Dies ist, wie ich

 string output = string.Empty; 
     XmlSerializer xsSubmit = new XmlSerializer(typeof(MyRequestClass)); 
     using (StringWriter sww = new StringWriter()) 
      { 
       using (XmlWriter writer = XmlWriter.Create(sww)) 
       { 
        // sww.WriteLine(@"<?xml version=""1.0"" encoding=""UTF-8""?>"); 
        xsSubmit.Serialize(writer , env); 
        output = sww.ToString(); 
       } 
      } 

     var doc = XDocument.Parse(output); 
     Enumerable<XElement> emptyElements; 
     emptyElements = from descendant in doc.Descendants() 
         where descendant.IsEmpty || string.IsNullOrWhiteSpace(descendant.Value) 
         select descendant; 
     emptyElements.Remove(); 
     doc.Root.RemoveAttributes(); 
     output = doc.ToString(); 

Zweitens bin Serialisierung ich diese Klasse in zwei verschiedenen Fällen bin Serialisierung, sollte in einem Fall MOBNO in XML und in anderen Fällen erscheint es nicht erscheinen sollte, was soll ich diese Funktion implementieren tun ?

Antwort

0

Sie können den Attributwert dynamisch hinzufügen/ändern, in diesem Fall wird XmlIgnore (Element ausblenden) angezeigt. Hier ist der Code:

if (yourCondition) 
{ 
    XmlAttributes myRequestClassPropertyAttributes = new XmlAttributes(); 
    myRequestClassPropertyAttributes.XmlIgnore = true; 

    XmlAttributeOverrides myRequestClassAttributes = new XmlAttributeOverrides(); 
    myRequestClassAttributes.Add(typeof(MyRequestClass), "MOBNO", myRequestClassPropertyAttributes); 

    XmlSerializer xsSubmit = new XmlSerializer(typeof(MyRequestClass), myRequestClassAttributes); 

    using (StringWriter sww = new StringWriter()) 
    { 
      using (XmlWriter writer = XmlWriter.Create(sww)) 
      { 
       // sww.WriteLine(@"<?xml version=""1.0"" encoding=""UTF-8""?>"); 
       xsSubmit.Serialize(writer, env); 
       output = sww.ToString(); 
      } 
     } 
}