2016-09-23 161 views
1

我要添加屬於場C#XmlSerializer的添加屬性到現場

的目標是讓下面的XML定製屬性:

<?xml version="1.0"?> 
<doc> 
    <assembly> 
     <name>class1</name> 
    </assembly> 
    <members> 
     <member name="P:class1.clsPerson.isAlive"> 
      <Element> 
      isAlive 
      </Element> 
      <Description> 
      Whether the object is alive or dead 
      </Description> 
      <StandardValue> 
      false 
      </StandardValue> 
     </member> 
    </members> 
</doc> 

我目前有:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Serialization; 

namespace class1 
{ 
    public class clsPerson 
    { 
     [XmlElement(ElementName="isAlive")] 
     [Description("Whether the object is alive or dead")] 
     [StandardValue(false)] 
     public bool isAlive { get; set; } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      clsPerson p = new clsPerson(); 
      p.isAlive = true; 
      System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType()); 
      x.Serialize(Console.Out, p); 
      Console.WriteLine(); 
      Console.ReadLine(); 
     } 
    } 
} 

我現在的註解類:

using System; 

namespace class1 
{ 
    internal class StandardValueAttribute : Attribute 
    { 
     public readonly object DefaultValue; 

     public StandardValueAttribute(Object defaultValue) 
     { 
      this.DefaultValue = defaultValue; 
     } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace class1 
{ 
    internal class DescriptionAttribute : Attribute 
    { 
     private string v; 

     public DescriptionAttribute(string v) 
     { 
      this.v = v; 
     } 
    } 
} 

如何將我的自定義屬性(如Description和StandardValue)添加到XMLSerializer?

回答

1

使用XML的LINQ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication14 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 
      string name = "P:class1.clsPerson.isAlive"; 

      XElement person = doc.Descendants("member").Where(x => (string)x.Attribute("name") == name).FirstOrDefault(); 
      person.Add(new object[] { 
       new XElement("Description", "Whether the object is alive or dead"), 
       new XElement("StandardValue", false) 
      }); 
     } 

    } 

} 
2

它看起來像你想重新發明輪子。如果你想導出代碼文檔,我建議你使用內置的功能:

https://msdn.microsoft.com/en-us/library/b2s063f7.aspx

的XML文檔文件,然後生成,你甚至可以在智能感知

XmlSerializer的只會儲存使用它們一個實例的內容。

+0

我真的很想去,但是我有其他限制不容許我用/// featues。 –