Mam następujące definicje enum ...Jak rozwiązać problem "Obie nazwy X używają typu XML, użyj atrybutów XML, aby określić unikalną nazwę XML i/lub przestrzeń nazw dla typu"?
namespace ItemTable
{
public enum DisplayMode
{
Tiles,
Default
}
}
namespace EffectiveItemPermissionTable
{
public enum DisplayMode
{
Tree,
FullPaths
}
}
... a potem mam następujące klasy ...
public class Table<TDisplayMode>
where TDisplayMode: struct
{
// public
public TDisplayMode DisplayMode
{
get { return mDisplayMode; }
set { mDisplayMode = value; }
}
// private
private TDisplayMode mDisplayMode;
}
public class ItemTable : Table<ItemTable.DisplayMode>
{}
public class EffectiveItemPermissionTable : Table<EffectiveItemPermissionTable.DisplayMode>
{}
public class UISettings
{
public UISettings()
{
ItemTable = new ItemTable();
EffectiveItemPermissionTable = new EffectiveItemPermissionTable();
}
public ItemTable ItemTable { get; set; }
public EffectiveItemPermissionTable EffectiveItemPermissionTable { get; set; }
}
... a gdy próbuję serializować wystąpienie UISettings z ...
System.Xml.Serialization.XmlSerializer lSerializer =
new System.Xml.Serialization.XmlSerializer(typeof(UISettings));
... pojawia się następujący błąd:
Types 'UISettings.Table`1[EffectiveItemPermissionTable.DisplayMode]' and
'UISettings.Table`1[ItemTable.DisplayMode]' both use the XML type name,
'TableOfDisplayMode', from namespace ''.
Use XML attributes to specify a unique XML name and/or namespace for the type.
Próbowałem użyć attribubtes XmlType i wszelkiego rodzaju rozwiązań opublikowanych w Internecie, ale nic nie działa. Nazwa typu XML jest zawsze TableOfDisplayMode
, jak wspomniano w błędzie.
Jedynym rozwiązaniem w tej chwili jest zmiana nazwy jednego z wyliczeń, np. do DisplayMode_
, ale uważam, że raczej brzydki.
Oh my ... działa! Dzięki. Ale dlaczego muszę określić przestrzeń nazw? Dlaczego serializator po prostu nie używa nazwy właściwości jako przestrzeni nazw? – ViRuSTriNiTy
Serializator domyślnie nie używa przestrzeni nazw i generowanie ich w razie potrzeby prawdopodobnie spowodowałoby więcej scenariuszy. Przestrzenie nazw są w tym sensie podobne do przestrzeni nazw w języku C#. ma znaczenie, czy 'Label' pochodzi z przestrzeni nazw System.Windows.Forms lub System.Web.WebControls. – rene
OK, ale dlaczego konieczne jest dodanie atrybutu 'xmlns' do węzłów DisplayMode? Jakiś konkretny powód? – ViRuSTriNiTy