Существует ли какой-нибудь простой способ (вроде мета-атрибута контролирующего сериализацию), который бы автоматически делал первую букву XML атрибутов маленькой, в отличие от XML-узлов. По умолчанию все property начинаются с большой буквы.
Например:
public class Cls
{
public Cls() {}
public string NodeProp
{
get{ return m_nodeProp; }
set{ m_nodeProp = value; }
}
[XmlAttribute]
public string AttrProp
{
get{ return m_attrProp; }
set{ m_attrProp = value; }
}
private string m_attrProp;
private string m_nodeProp;
}
Здравствуйте, Ignoramus, Вы писали:
I>Существует ли какой-нибудь простой способ (вроде мета-атрибута контролирующего сериализацию), который бы автоматически делал первую букву XML атрибутов маленькой, в отличие от XML-узлов. По умолчанию все property начинаются с большой буквы.
I>Например:
Здравствуйте, pt4h, Вы писали:
I>> [XmlAttribute(AttributeName = "attrProp")]
Так придется каждый атрибут подписывать. К тому же, если я его переименую, имя в кавычках останется, а хотелось бы чтобы все апдейтилось автоматически.
Re[3]: Имена XML-атрибутов с маленькой буквы при сериализаци
Здравствуйте, Ignoramus, Вы писали:
I>Так придется каждый атрибут подписывать. К тому же, если я его переименую, имя в кавычках останется, а хотелось бы чтобы все апдейтилось автоматически.
Переименовать свойство, чтобы оно начиналось с маленькой буквы? Насколько я знаю, сериализатор по дефолту использует имена свойств...
Здравствуйте, koandrew, Вы писали:
K>Переименовать свойство, чтобы оно начиналось с маленькой буквы? Насколько я знаю, сериализатор по дефолту использует имена свойств...
Да, но в С# принято называть свойства с большой буквы, а в XML атрибуты с маленькой. Хотя конечно, у каждого своя конвенция...
Re[3]: Имена XML-атрибутов с маленькой буквы при сериализаци
Здравствуйте, Ignoramus, Вы писали:
I>Так придется каждый атрибут подписывать. К тому же, если я его переименую, имя в кавычках останется, а хотелось бы чтобы все апдейтилось автоматически.
using System;
using System.Xml.Serialization;
namespace XmlAttrs
{
class Program
{
static void Main(string[] args)
{
var overrides = new XmlAttributeOverrides();
var type = typeof(TestClass);
foreach (var prop in type.GetProperties())
{
var attrs = new XmlAttributes();
var name = prop.Name;
name = char.ToLower(name[0]) + name.Substring(1);
attrs.XmlAttribute = new XmlAttributeAttribute(name);
overrides.Add(type, prop.Name, attrs);
}
var tc = new TestClass();
tc.Attr = "O La La";
new XmlSerializer(type, overrides).Serialize(Console.Out, tc);
Console.Read();
}
}
public class TestClass
{
public string Attr { get; set; }
}
}
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
Здравствуйте, Ignoramus, Вы писали:
K>>Переименовать свойство, чтобы оно начиналось с маленькой буквы? Насколько я знаю, сериализатор по дефолту использует имена свойств... I>Да, но в С# принято называть свойства с большой буквы, а в XML атрибуты с маленькой. Хотя конечно, у каждого своя конвенция...
Чем-то придется поступиться. Можно написать свой XmlReader/Writer, можно использовать XmlNameAttribute, можно сказать, что классы используеме для Xml сериализации это DTO и используются они только в процессе сериализации
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Имена XML-атрибутов с маленькой буквы при сериализаци
В общем, понятно. Совсем просто не получится, но например так все же можно.
Всем спасибо!
Вау, 3-й C#
AVK>
AVK>using System;
AVK>using System.Xml.Serialization;
AVK>namespace XmlAttrs
AVK>{
AVK> class Program
AVK> {
AVK> static void Main(string[] args)
AVK> {
AVK> var overrides = new XmlAttributeOverrides();
AVK> var type = typeof(TestClass);
AVK> foreach (var prop in type.GetProperties())
AVK> {
AVK> var attrs = new XmlAttributes();
AVK> var name = prop.Name;
AVK> name = char.ToLower(name[0]) + name.Substring(1);
AVK> attrs.XmlAttribute = new XmlAttributeAttribute(name);
AVK> overrides.Add(type, prop.Name, attrs);
AVK> }
AVK> var tc = new TestClass();
AVK> tc.Attr = "O La La";
AVK> new XmlSerializer(type, overrides).Serialize(Console.Out, tc);
AVK> Console.Read();
AVK> }
AVK> }
AVK> public class TestClass
AVK> {
AVK> public string Attr { get; set; }
AVK> }
AVK>}
AVK>
Re[4]: Имена XML-атрибутов с маленькой буквы при сериализаци
От:
Аноним
Дата:
11.07.09 14:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Ignoramus, Вы писали:
I>>Так придется каждый атрибут подписывать. К тому же, если я его переименую, имя в кавычках останется, а хотелось бы чтобы все апдейтилось автоматически.
AVK>
AVK>using System;
AVK>using System.Xml.Serialization;
AVK>namespace XmlAttrs
AVK>{
AVK> class Program
AVK> {
AVK> static void Main(string[] args)
AVK> {
AVK> var overrides = new XmlAttributeOverrides();
AVK> var type = typeof(TestClass);
AVK> foreach (var prop in type.GetProperties())
AVK> {
AVK> var attrs = new XmlAttributes();
AVK> var name = prop.Name;
AVK> name = char.ToLower(name[0]) + name.Substring(1);
AVK> attrs.XmlAttribute = new XmlAttributeAttribute(name);
AVK> overrides.Add(type, prop.Name, attrs);
AVK> }
AVK> var tc = new TestClass();
AVK> tc.Attr = "O La La";
AVK> new XmlSerializer(type, overrides).Serialize(Console.Out, tc);
AVK> Console.Read();
AVK> }
AVK> }
AVK> public class TestClass
AVK> {
AVK> public string Attr { get; set; }
AVK> }
AVK>}
AVK>
А как быть в случае если надо изменить имя класса и он не root?
Т.е.
[XmlRootAttribute("mmmm", Namespace = "", IsNullable = false)]
позволяет задать имя для root елемента.
А в свою очередь у него члены.
При этом используется generic и как понимаете напрямую задать имя нельзя :
[XmlRootAttribute("items", Namespace = "", IsNullable = false)]
public class ItemCollection<TItem> : ItemCollectionBase<string, TItem>
{
IList<TItem> items;//к примеру
}
public class Some
{
}
ItemCollection<Some> xxx = new ItemCollection<Some>();
Соответсвенно получим при сериализации
<Some ......>