简体   繁体   English

C#XmlSerializer向字段添加属性

[英]C# XmlSerializer Add an Attribute to a Field

I want to add a custom Attribute belonging to a field 我想添加属于字段的自定义属性

Goal is to get the following XML: 目标是获取以下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>

What I currently have: 我目前拥有的:

 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();
         }
     }
 }

My current Annotation classes: 我目前的注释类:

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;
        }
    }
}

How can I add my custom Attributes like Description and StandardValue to the XMLSerializer? 如何将自定义属性(如Description和StandardValue)添加到XMLSerializer?

It looks like you want to reinvent the wheel. 看起来你想重新发明轮子。 if you trying to export a code documentation I suggest you using the built in functionality: 如果您尝试导出代码文档,我建议您使用内置功能:

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

The XML documentation files are then generated and you can even use them in intellisense 然后生成XML文档文件,您甚至可以在intellisense中使用它们

The XMLSerializer will just store the content of an instance. XMLSerializer将只存储实例的内容。

Using xml Linq 使用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)
            });
        }

    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM