通过datcontract序列化到XML Writer
本文关键字:XML Writer 序列化 datcontract 通过 | 更新日期: 2023-09-27 18:07:28
我是一个。net新手,但是我已经在这个项目上工作了一段时间了,进展甚微,而且类的数量越来越多,它变得有点势不挡。
目的:
-
从实体框架表生成数据(应该使用LINQ)<- LINQ似乎正在工作。
-
将数据转换成XML <-根本不起作用
-
电子邮件如果不工作<-这是正常工作-奇怪的是,哈哈)
谁能给我一个例子的代码,你连接到一个实体和序列化(可能使用泛型,如果这是最好的方式)通过DataContract到XML作家?根据评论,这里有一个我想要的例子。——那么让我们也说,在这个模型中,我们想要加入"DIRTYMIKE"表,其中包括"the Boys"作为一个对象,其名称将通过xml提取,并通过id连接PRIUS中的"CARS"表。显然,这是一个理论实体集,但希望它能让某人发笑:)
这是我刚刚整理的一些理论课——希望这能解释更多的目标:
public class TheOtherGuys
{
private static ILog log;
private string theBoysWrapper;
private int rowsRead = 0;
private int outputRecords = 0;
private bool warnings = false;
private bool fatal = false;
private bool fatalMsg = false;
/// <summary>
/// Next wrap the xml with a Document Wrapper and Element Wrapper
/// </summary>
public TheOtherGuys(ILog log)
{
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
doc.AppendChild(dec);//creates root
XmlElement root = doc.CreateElement("DIRTYMIKE");
doc.AppendChild(root);
XmlElement nextElem = doc.CreateElement("THEBOYS");
log = LogManager.GetLogger(this.GetType());
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".Constructor(): enter");
}
//creates new xml Document and set up declaration and root
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".Constructor(): exit");
}
}
//Read data from DIRTY_MIKE_AND_THE_BOYS and CAR Tables
//Translate the results into xml
private void process(DateTime process) {
XmlDocument doc = new XmlDocument();
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
doc.AppendChild(dec);//creates root
XmlElement root = doc.CreateElement("OTHERGUYS");//maybe a conditional statement to change the root to 'OTHERGUYS'
doc.AppendChild(root);
XmlElement nextElem = doc.CreateElement("CAR");
doc.AppendChild(nextElem);
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".process(): enter - prius=" + process);
}
StringBuilder sb = new StringBuilder();
sb.Append(" select ");
sb.Append(" 'PRIUS' CAR, "); // 1
sb.Append(" 'PJM' MKT_CD, "); // 2
sb.Append(" decode(to_char(lh.time_id-1/24, 'HH24'), '00', ");
sb.Append(" to_char(lh.time_id-1, 'YYYYMMDD'), to_char(lh.time_id-1/24, 'YYYYMMDD')) START_DT, "); // 3
sb.Append(" decode(to_char(lh.time_id-1/24, 'HH24'), '00', ");
sb.Append(" '240000', to_char(lh.time_id-1/24, 'HH24MISS')) START_TIME, "); //4
sb.Append(" decode(to_char(lh.time_id, 'HH24'), '00', ");
sb.Append(" to_char(lh.time_id-1, 'YYYYMMDD'), to_char(lh.time_id, 'YYYYMMDD')) END_DT, "); // 5
sb.Append(" decode(to_char(lh.time_id, 'HH24'), '00', ");
sb.Append(" '240000', to_char(lh.time_id, 'HH24MISS')) END_TIME, "); // 6
sb.Append(" cars._car_id TX_PT, "); //8
sb.Append(" lh.data_value TARGET_FD "); // 12
sb.Append("from DATABASE.MYTABLE lh, ");
sb.Append(" DATABASE.CAR car_id ");
sb.Append("where lh.car_id = unit.car_id ");
sb.Append("AND lh.time_id > to_date(?, 'MM/DD/YYYY') ");
sb.Append("AND lh.time_id <= to_date(?, 'MM/DD/YYYY' ) + 1 ");
sb.Append("AND lh.atb_data_category = 69 AND lh.data_value <> 0 ");
sb.Append(" order by ");
sb.Append(" lh.time_id, lh.car_id ");
sb.ToString();// or something like that
myDataLayer.theOtherGuysEntitie nme = new myDataLayer.theOtherGuysEntities(myConnection.getEntityFrameworkConnection(typeof(myDataLayer.theOtherGuysEntities)));
if (log.IsDebugEnabled == true)
{
log.Debug(GetType().Name + ".process(): odb" + odb);
try
{
DateTime dt = DateTime.ParseExact(processingDate.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
string s = dt.ToString("dd/M/yyyy");
}catch(Exception e) {
fatal=true;
fatalMsg = true;
if(log.IsFatalEnabled==true) {
log.Fatal(GetType().Name + ".process(): exception", e);
}
Console.Error.WriteLine("The OtherGuys Failed Dirty Mike is in the Prius with name{}, name{1}, name{2}, name {3}.");
//Really I am supposed to use LINQ for the querying
// and then conditionalstatementsthrough my business logic to handle the decoding
再次感谢! !
public static string ToXmlUsingDataContract<T>(T obj)
{
var dcs = new DataContractSerializer(typeof(T));
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb))
{
dcs.WriteObject(writer, obj);
}
return (sb.ToString());
}
只要创建某种类型的数据传输对象,或者简单地将实体对象直接传递给这个函数,您就会得到有效的、可反序列化的XML。