2017-02-03 11 views
1

Heyo, я делаю плагин для игры единства (ошибка ниже), поэтому я, вероятно, делаю это для своего основного плагина и читаю ряды. Я не знаю, что такое ошибка, и я не вижу никаких сообщений об этом. Это моя ошибка:Недопустимое исключение операции, ошибка C# XML

[XmlArrayItem(ElementName = "Rank")] 
public List<Rank> Ranks; 
public void LoadDefaults() 
{ 
    Ranks = new List<Rank>() { 
    new Rank() { RankNumber = 0, GroupID = "Default" ,Messages = new List<Message>() { new Message("yo") , new Message("yo")}} 
    }; 
} 
public class Rank 
{ 
    public Rank() { } 

    public int RankNumber; 
    public string GroupID; 
    public List<Message> Messages; 
} 
public class Message 
{ 
    public Message(string Rankmessage) { Rankmessage = RankMessage; } 
    [XmlAttribute("RankMessage")] 
    public string RankMessage; 
} 

Ошибка:

[2/3/2017 7:47:23 PM] [Error] InvalidOperationException: RanksUnlocker.RanksUnlockerConfig+Message cannot be serialized because it does not have a default public constructor - System.Xml.Serialization.ReflectionHelper.CheckSerializableType (System.Type type, Boolean allowPrivateConstructors) 
System.Xml.Serialization.XmlReflectionImporter.ImportClassMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
Rethrow as InvalidOperationException: There was an error reflecting type 'RanksUnlocker.RanksUnlockerConfig+Message'. 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Type type, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportListMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace, System.Xml.Serialization.XmlAttributes atts, Int32 nestingLevel) 
System.Xml.Serialization.XmlReflectionImporter.ImportListMapping (System.Type type, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace, System.Xml.Serialization.XmlAttributes atts, Int32 nestingLevel) 
System.Xml.Serialization.XmlReflectionImporter.CreateMapMember (System.Type declaringType, System.Xml.Serialization.XmlReflectionMember rmember, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportClassMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
Rethrow as InvalidOperationException: There was an error reflecting field 'Messages'. 
System.Xml.Serialization.XmlReflectionImporter.ImportClassMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
Rethrow as InvalidOperationException: There was an error reflecting type 'RanksUnlocker.RanksUnlockerConfig+Rank'. 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Type type, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportListMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace, System.Xml.Serialization.XmlAttributes atts, Int32 nestingLevel) 
System.Xml.Serialization.XmlReflectionImporter.ImportListMapping (System.Type type, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace, System.Xml.Serialization.XmlAttributes atts, Int32 nestingLevel) 
System.Xml.Serialization.XmlReflectionImporter.CreateMapMember (System.Type declaringType, System.Xml.Serialization.XmlReflectionMember rmember, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportClassMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
Rethrow as InvalidOperationException: There was an error reflecting field 'Ranks'. 
System.Xml.Serialization.XmlReflectionImporter.ImportClassMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
Rethrow as InvalidOperationException: There was an error reflecting type 'RanksUnlocker.RanksUnlockerConfig'. 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Type type, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Xml.Serialization.XmlAttributeOverrides overrides, System.Type[] extraTypes, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 
System.Xml.Serialization.XmlSerializer..ctor (System.Type type, System.Type[] extraTypes) 
Rocket.Core.Assets.XMLFileAsset`1[RanksUnlocker.RanksUnlockerConfig]..ctor (System.String file, System.Type[] extraTypes, RanksUnlocker.RanksUnlockerConfig defaultInstance) 
Rocket.Core.Plugins.RocketPlugin`1[RocketPluginConfiguration]..ctor() 
RanksUnlocker.RanksUnlocker..ctor() 
UnityEngine.GameObject:.ctor(String, Type[]) 
Rocket.Core.Plugins.RocketPluginManager:loadPlugins() 
Rocket.Core.Plugins.RocketPluginManager:Start() 
+0

Ошибка объяснения. Ваш вложенный тип 'RanksUnlocker.RanksUnlockerConfig + Message' должен иметь открытый ** без параметров ** конструктор. См. Например [здесь] (http://stackoverflow.com/a/2498243/3744182). – dbc

ответ

1

Вам нужно добавить конструктор к Message класса. Он должен быть public, и ему необходимо принять нулевые параметры.

Существующий конструктор, который у вас уже есть, не будет работать для этого, потому что процесс сериализации XML не знает, как обращаться с конструктором, который принимает параметр. Вы также можете сохранить свой существующий конструктор, просто добавьте новый, который не принимает параметр.

+0

Спасибо! Я добавил публичное сообщение() {} – Plugin4U