У меня проблема с десериализацией документа в объект с использованием XmlSerializer
класса.
Код моей функции для десериализации:
static public TYPE xmlToObject<TYPE>( string xmlDoc ) {
MemoryStream stream = new MemoryStream();
byte[] xmlObject = ASCIIEncoding.ASCII.GetBytes( xmlDoc );
stream.Write( xmlObject, 0, xmlObject.Length );
stream.Position = 0;
TYPE message;
XmlSerializer xmlSerializer = new XmlSerializer( typeof( TYPE ) );
try {
message = (TYPE)xmlSerializer.Deserialize( stream );
} catch ( Exception e ) {
message = default( TYPE );
} finally {
stream.Close();
}
return message;
}
И у меня есть класс:
public class Test {
public int a;
public int b;
}
И десериализовать:
string text = File.ReadAllText( "blue1.xml" );
Test a = XmlInterpreter.xmlToObject<Test>( text );
Хорошо, когда я читаю файл так:
<?xml version="1.0" encoding="UTF-8"?>
<Test>
<a>2</a>
<b>5</b>
</Test>
все в порядке.Но вот так:
<?xml version="1.0" encoding="UTF-8"?>
<Test>
<a>2</a>
<b></b>
</Test>
неверно, потому что
<b></b>
пусто и преобразование в int невозможно.
Как я могу решить это?Например, я хочу в этом контексте, чтобы b
не было объявлено.
Что, когда мой класс:
public class Test {
public enum Pro {
VALUE1,
VALUE2
}
public Pro p1;
}
И я хочу принять xmlDocument
, где поле p1
пусто.