Я С# и silverlight 5 beginner. Мне нужно устранить одно сомнительное сомнение со старшими разработчиками в silverlight.
У меня есть объект в С#, и мне нужно получить xml, соответствующий этому объекту.
Может ли кто-нибудь объяснить на примере, как это сделать (любой простой пример класса и его объекта, а затем полученный xml)
Я прочитал в google некоторый документ, и они обсуждают некоторый метод serialize()
способный это сделать. Я прав? Но как это сделать, может кто-нибудь объяснить класс С# ct и его объект и xml?
Было бы большой помощью. EDIT: Моя попытка:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Xml.Serialization;
using System.IO;
using System.Text;
namespace SliderLastTry
{
public static class Xml
{
public static string ToXml(this object objectToSerialize)
{
var mem = new MemoryStream();
var ser = new XmlSerializer(objectToSerialize.GetType());
ser.Serialize(mem, objectToSerialize);
var utf8 = new UTF8Encoding();
return utf8.GetString(mem.ToArray());
}
}
}
Следующий класс:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SliderLastTry
{
public class Parameter
{
public string Name {get; set; }
}
}
Основная функция, содержащая класс:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SliderLastTry
{
public static class ControlClass
{
public static void Main()
{
Parameter pram = new Parameter();
pram.ToXml();
}
}
}
И полученная ошибка:
Error 1 'System.Text.Encoding.GetString(byte[])' is inaccessible due to its protection level
КОРРЕСПОНДИЯ НА ЛИНИЮ /
return utf8.GetString(mem.ToArray()); in Xml class. How toma the solution of it ?
var writer = new StringWriter();
var serializer = new XmlSerializer(typeof(YourData));
serializer.Serialize(writer, obj);
string xml = writer.ToString();
Я использую этот класс
public static class Xml
{
public static string ToXml(this object objectToSerialize)
{
var mem = new MemoryStream();
var ser = new XmlSerializer(objectToSerialize.GetType());
ser.Serialize(mem, objectToSerialize);
var utf8 = new UTF8Encoding();
return utf8.GetString(mem.GetBuffer(), 0, (int)mem.Length);
}
}
С помощью этого метода расширения вы можете сделать
var xml = your_object.ToXml();
var xml = your_object.Serialize();
:)
string xml = writer.ToString();
, ну ... вот где мы получаемstring
которую сериализатор написал как xml. По сути, сериализаторы обычно пишут либо вStream
либо в какой-нибудь*Writer
(в данном случаеTextWriter
). Я используюStringWriter
для буферизации данных вStringBuilder
, а затем получить XML с помощью.ToString()