Избавьтесь от xsi:type и вместо этого используйте имена тегов.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Избавьтесь от xsi:type и вместо этого используйте имена тегов.

Сообщение Anonymous »

У меня есть несколько производных классов для сериализации в XML:

Код: Выделить всё

    public void Main()
{
LevelCollection collection = new LevelCollection();
collection.Add(new SubLevel1("aaa"));
collection.Add(new SubLevel2("bbb"));

XmlSerializer serializer = new XmlSerializer(typeof(LevelCollection));

StringWriter sw = new StringWriter();
XmlWriter writer = XmlWriter.Create(sw);
serializer.Serialize(writer, collection);
string xml = sw.ToString();
TestContext.WriteLine(xml);
}

[XmlInclude(typeof(SubLevel1))]
[XmlInclude(typeof(SubLevel2))]
[XmlRoot("LevelCollection")]
public class LevelCollection : ICollection
{
protected List m_Levels;

public List Levels
{
get { return m_Levels; }
set { m_Levels = value; }
}

public LevelCollection()
{
m_Levels = new List();
}

[XmlIgnore]
public int Count
{
get { return m_Levels.Count; }
}

public bool IsReadOnly { get; set; }

public void Add(Level level)
{
m_Levels.Add(level);
}

public void Clear()
{
m_Levels.Clear();
}

public bool Contains(Level item)
{
return m_Levels.Contains(item);
}

public void CopyTo(Level[] array, int arrayIndex)
{
m_Levels.CopyTo(array, arrayIndex);
}

public IEnumerator GetEnumerator()
{
return m_Levels.GetEnumerator();
}

public bool Remove(Level item)
{
return m_Levels.Remove(item);
}

IEnumerator IEnumerable.GetEnumerator()
{
return m_Levels.GetEnumerator();
}

}

public abstract class Level
{

}

[XmlRoot("SubLevel1")]
public class SubLevel1 : Level
{
public string prop1 { get; set; }

public SubLevel1()
{

}

public SubLevel1(string prop)
{
this.prop1 = prop;
}
}

[XmlRoot("SubLevel2")]
public class SubLevel2 : Level
{
[XmlText]
public string prop2 { get; set; }

public SubLevel2()
{

}

public SubLevel2(string prop)
{
this.prop2 = prop;
}
}
После сериализации XML выглядит следующим образом (содержит атрибут xsi:type):

Код: Выделить всё



aaa

bbb

Можно ли и как достичь цели изменить целевой XML на:

Код: Выделить всё



aaa

bbb

Я не могу найти ответ, кроме как написать собственный модуль записи. Интересно, можно ли удалить атрибут типа, используя стандартные атрибуты.


Подробнее здесь: https://stackoverflow.com/questions/791 ... es-instead
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»