Я работаю с системой больницы и мне хотелось бы знать, как он мог бы экспортировать информацию о моих объектах в файлы с читабельным форматом как JSON
или XML
, чтобы использовать их как ввод другой программы, которая обрабатывает их.
Это мои классы:
public class Patient
{
public string PatienName { get; set; }
public int Age { get; set; }
public char Sex { get; set; }
public string Address { get; set; }
public Illness Illness { get; set; }
public Bed Bed { get; set; }
}
public class Bed
{
public int BedNumber { get; set; }
public string Aisle { get; set; }
}
public class Illness
{
public IllnessType Type { get; set; }
public string IllnessName { get; set; }
}
public class IllnessType
{
public string IllnessTypeName { get; set; }
public string Severity { get; set; }
}
AquГ - я помещаю тебе ответ как конвертировать cГіdigo классов с XML.
using System.Xml.Serialization;
using System.IO;
class Program
{
static void Main(string[] args)
{
Patient NewPatient = new Patient()
{
Age = 35,
Address = "Apple red #159",
Bed = new Bed()
{
Aisle = "54A",
BedNumber = 145,
},
Illness = new Illness()
{
IllnessName = "Stomach ache",
Type = new IllnessType()
{
IllnessTypeName= "Stomach ache type",
Severity = "Chronic",
},
},
PatienName = "Marisela Smith",
Sex = 'F',
};
StreamWriter MyFile = new StreamWriter(@"D:\XML.txt");
XmlSerializer Serializer = new XmlSerializer(typeof(Patient));
Serializer.Serialize(MyFile,NewPatient);
}
}
Если ты хочешь Xml, пробует использовать System.Xml.Serialization
public static void Guardar(Patient paciente, String ruta) {
try
{
XmlSerializer serializer = new XmlSerializer(typeof(Patient));
FileStream fStream = File.Open(ruta , FileMode.Create);
serializer.Serialize(fStream, paciente);
fStream.Close();
}
catch (Exception e)
{
}
}
Или характерный один для всех твоих классов, использованный T (характерные Методы)
public static void Guadar<T>(T data, String url) {
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
FileStream fStream = File.Open(url , FileMode.Create);
serializer.Serialize(fStream, data);
fStream.Close();
}
catch (Exception e)
{
}
}
Если ты используешь JSON.NET (который ты вероятно был бы должен, потому что он очень полезный, и легкий для того, чтобы быть использованным, когда используется JSON), ты мог бы создавать характерные списки Ваших классов и потом последовательно преобразовывать их в файлы JSON; например:
List<Patient> patientList = new List<Patient>();
Patient p = new Patient();
p.PatienName = "Helen Keller";
p.Age = 136;
p.Sex = 'F';
. . .
patientList.Add(p);
. . .
// Entonces, después añadir los pacientes a la lista, los guardas así:
var jsonPatientList = JsonConvert.SerializeObject(patientList);
System.IO.File.WriteAllText(@"C:\Cualquiera\patients.json", patientList);
Сходным способом ты можешь делать это с оставшейся частью классов.
Если хочешь конвертировать ты objeto
в xml
со следующей функцией он очень легкий и понятный:
public static string GetXMLFromObject(object o) {
try {
XmlSerializer serializer = new XmlSerializer(o.GetType());
StringWriter sw = new StringWriter();
XmlTextWriter tw = new XmlTextWriter(sw);
serializer.Serialize(tw, o);
return sw.ToString();
} catch (Exception ex) {
//Handle Exception Code
} finally {
sw.close();
tw.close();
}
}
В метод одинокий mandalé ты objeto
и тебя возвратит string в формате xml
. Только помни что добавь их следующий using
в класс, где ты будешь добавлять метод.
using System.Web.Script.Serialization;
using System.Xml.Serialization;
Я надеюсь, что он ты полезный.
Я размещаю тебя соединение, откуда я это достал, там сам ты найдешь как parsear xml
в objeto
.
Добавляя в ответ @B.ClayShannon, здесь способ обращать объекты в XML используя.Net, не frameworks добавочные, но да ты нуждаешься в том, чтобы добавить зависимость в System.XML
:
public static string Serialize(object item, bool removeNamespace = true)
{
if (item == null)
return null;
var stringBuilder = new StringBuilder();
var itemType = item.GetType();
//remueve "lo.que.sea.el.namespace.de.tu" del nombre completo de la clase: lo.que.sea.el.namespace.de.tu.ClaseConDatos
if (removeNamespace)
{
var xns = new XmlSerializerNamespaces();
xns.Add(String.Empty, String.Empty);
new XmlSerializer(itemType).Serialize(new StringWriter(stringBuilder), item, xns);
}
else
{
new XmlSerializer(itemType).Serialize(new StringWriter(stringBuilder), item);
}
return stringBuilder.ToString();
}
Однажды полученный как цепь, ты это можешь сохранять в файл путь
System.IO.File.WriteAllLines(ruta, cadenaXml);
И, если ты нуждаешься deserializarlo:
public static T getObjectOfXml<T>(string xmlInput, Type[] extraTypes)
{
//Parser xml request to object
StringReader stream = null;
XmlTextReader reader = null;
T returnedXmlClass = default(T);
try
{
// serialise to object
XmlSerializer serializer = new XmlSerializer(typeof(T), extraTypes);
stream = new StringReader(xmlInput); // read xml data
reader = new XmlTextReader(stream); // create reader
// covert reader to object
returnedXmlClass = (T)serializer.Deserialize(reader);
}
catch
{
returnedXmlClass = default(T);
}
finally
{
if (stream != null) stream.Close();
if (reader != null) reader.Close();
}
//Return object
return returnedXmlClass;
}