C # Xml Сериализуемый тип enum - PullRequest
0 голосов
/ 09 октября 2018

Я хочу загрузить файл XML с сериализацией XML.Тип теперь должен быть типом enum.Итак, XML выглядит так:

<Ressource name="ressource_name"  type= "Integer" >
                ...
</Ressource>

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

[Serializable]
public enum Res_Type
{
    [XmlEnum(Name = "Integer")]
    Integer,
    [XmlEnum(Name = "Decimal")]
    Decimal,
    [XmlEnum(Name = "Text")]
    Text
}

public class Ressource
{
   [XmlAttribute]
   public string name { set; get; }
   [XmlAttribute]
   public Res_Type type { get; set; }
}

Когда я ищу эту тему, я нахожу только разные способы решения.это, тогда мне это нужно.Мне нужно иметь XML, как показано выше, но я понятия не имею, как загрузить информацию в виде как enum.


Обновление: для проверки сериализации и десериализации я использую этот код:

Ressource res = new Ressource();
res.name = "ressource_name";
res.type = Res_Type.Integer;

XmlSerializer serializer = new XmlSerializer(res.GetType());
using (StreamWriter writer = new StreamWriter(@"h:\test.xml"))
{
    serializer.Serialize(writer, res);
}
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Ressource));
StringReader stringReader = new StringReader(@"h:\test.xml");
res = (Ressource)xmlSerializer.Deserialize(stringReader);

И я получаю сообщение об ошибке: InvalidOperationException

1 Ответ

0 голосов
/ 09 октября 2018

Ваша проблема в том, что вы используете StringReader вместо StreamReader:

StringReader stringReader = new StringReader(@"h:\test.xml");

Это означает, что ваш код пытаетсядесериализовать содержимое строкового литерала @"h:\test.xml" самого , а не файла, к которому оно относится.Это, конечно, терпит неудачу, потому что строка h:\test.xml не является даже правильно сформированным XML.

Вместо этого вы должны сделать:

var fileName = @"h:\test.xml";

// Write the file as before

using (var reader = new StreamReader(fileName))
{
    res = (Ressource)xmlSerializer.Deserialize(reader);
}

Рабочая .Net fiddle здесь .

...