2013-08-15 7 views
0

Я пытаюсь десериализовать относительно простую строку в C# ниже. Ответ XML получен от вызова REST API. Ответ от API хранится в строке, потому что встроенный конвертер для Spring.Rest не выполняет преобразование в объект XMLDocument, поэтому я пытаюсь создать работу.XMLSerialization без корневого элемента

Вот основной сценарий.

//Response from API 
string emaildata="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" 
+"<email-address>[email protected]</email-address>"; 


//Code calling the conversion of the string 
    Console.WriteLine(xmlConversion.XmlDeserializeFromString(emaildata,typeof(email)).ToString()); 


//Object being Deserialized into 
    public class email 
    { 
     [System.Xml.Serialization.XmlElement("email-address")] 
     public string emailAddress { get; set; } 

    }  



//Conversion Class 

public static class xmlConversion 
{ 

public static string XmlSerializeToString(this object objectInstance) 
{ 
var serializer = new XmlSerializer(objectInstance.GetType()); 
var sb = new StringBuilder(); 

using (TextWriter writer = new StringWriter(sb)) 
{ 
    serializer.Serialize(writer, objectInstance); 
} 

return sb.ToString(); 
} 

public static T XmlDeserializeFromString<T>(string objectData) 
{ 
return (T)XmlDeserializeFromString(objectData, typeof(T)); 
} 

public static object XmlDeserializeFromString(string objectData, Type type) 
{ 
var serializer = new XmlSerializer(type); 
object result; 

using (TextReader reader = new StringReader(objectData)) 
{ 
    result = serializer.Deserialize(reader); 
} 

return result; 
} 
} 

ответ

2

Попробуйте изменить определение класса:

[System.Xml.Serialization.XmlRoot("email-address")] 
public class email 
{ 
    [System.Xml.Serialization.XmlText()] 
    public string emailAddress { get; set; } 

} 
+0

Отлично, это работает. Я нашел ошибку в моей инструкции Console.WriteLine. Я исправил это следующим образом ... email myemail = (email) xmlConversion.XmlDeserializeFromString (emaildata, typeof (email)); Console.WriteLine (myemail.emailAddress); –

Смежные вопросы