2015-02-26 2 views
0

У меня есть метод для возврата в качестве экземпляра класса в XML. К сожалению, XML не возвращается.Экземпляр Serialized Class, не возвращающий XML

Ниже приведен пример попытки превратить простой Страна класса в XML:

Страна класса

public class Country : XmlMethods<Country> 
{ 
    public readonly int Id; 
    public readonly string Code; 
    public readonly string Name; 

private Country() 
{ 
} 

private Country(int id, string code, string name) 
{ 
    Id = id; 
    Code = code; 
    Name = name; 
} 

public static Country Load(int countryId) 
{ 
    DataRow dr = //Row From Database 

    return new Country(
      (int)dr["ISOCountryID"], 
      (string)dr["ISOCode"], 
      (string)dr["ISOCountry"]); 
} 

Inhertited Класс

public class XmlMethods<T> : BaseClass 
{ 
    public XElement ToXElement() 
    { 
     using (var memoryStream = new MemoryStream()) 
     { 
      using (TextWriter streamWriter = new StreamWriter(memoryStream)) 
      { 
       var xmlSerializer = new XmlSerializer(typeof (T)); 
       xmlSerializer.Serialize(streamWriter, this); 
       return XElement.Parse(Encoding.ASCII.GetString(memoryStream.ToArray())); 
      } 
     } 
    } 
} 

Test Method

public void LoadCountry() 
{ 
    lbl.Text = "***" + Country.Load(1).ToXElement().ToString() + "***"; 
} 

Во время работы нет ошибок. Все, что я получаю с моей метки: «******»

Любая помощь была бы принята с благодарностью. Спасибо.

+0

https://code.msdn.microsoft.com/windowsdesktop/Implementing-Xml-b3223253 – CathalMF

ответ

1

Попробуйте изменить это ... я удалил часть кода, чтобы сделать эту работу для меня так свой шаблон, что делать:

public class Country : XmlMethods<Country> 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
    public string Name { get; set; } 

    private Country() 
    { 
    } 

    private Country(int id, string code, string name) 
    { 
     Id = id; 
     Code = code; 
     Name = name; 
    } 

    public static Country Load(int countryId) 
    { 
     //test implementation 
     return new Country(
       1, 
       "some", 
       "someother"); 
    } 
} 

public class XmlMethods<T> 
{ 
    public XElement ToXElement() 
    { 
     StringBuilder xml = new StringBuilder(); 

     var xmlSerializer = new XmlSerializer(typeof(T)); 
     xmlSerializer.Serialize(new StringWriter(xml), this); 
     return XElement.Parse(xml.ToString()); 
    } 
} 
1

Проблема заключается в том, что ваши свойства readonly , и XmlSerializer не может справиться с этим.

Я бы следил за this answer, чтобы достичь тех же результатов, которые вы ищете.

Я думаю, что метод [DataSerializer], вероятно, поможет вам. Вы просто должны изменить свои свойства на следующее:

[DataSerializer] 
public int Id { get; private set; } 

Таким образом, они по-прежнему «ReadOnly», но вы можете сериализовать их таким образом.

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