2014-09-22 154 views
-1

我有从xsd生成的类,我想用来创建一个xml通过电线发送。我只想在内存中创建文档,将其转换为字符串/字节[]并发送。我的印象是,一旦类被填充,我可以做一个tostring(),它会返回整个文档。这似乎并非如此......我在这里做错了什么?生成xml消息通过tcp发送

@event myEvent = new @event(); 
myEvent.name = "AddProgram"; 
myEvent.version = 8.0M; 

DateTime myDateTime = new DateTime(); 
myDateTime = DateTime.Now; 
myEvent.time = myDateTime; 

detail myDetail = new detail(); 
myDetail.name = "Program1" 

myEvent.detail = myDetail; 


Controller controller = new Controller(); 
controller.actionSpecified = true; 
controller.action = ControllerAction.Create; 

myDetail.Controller = controller; 

String xmlString = myEvent.ToString(); //this is where i would expect a string. 

我得到了的是这样的:“事件”

+1

在网页中搜索(例如)XML序列化,或protobuf的 – CodeCaster 2014-09-22 19:02:34

+1

看看这个[链接](http://stackoverflow.com/a/2434558/3877877) – 2014-09-22 19:03:14

+1

为什么你期待的是的ToString ()将返回XML?因为它是由XSD制作的?这不是黑匣子U可以在你的代码中看到并假定ToString()没有被覆盖。 U可以自己写,但是因为看起来U不太熟悉.net - 使用XmlSerializer来生成XML,所以XSD生成的类必须具有这个属性。 – 2014-09-22 19:03:39

回答

1

我不知道,你有你的信息toString()方法会给你的类的XML表示,但事实并非如此。你应该做的是参考这篇关于XML序列化的文章。

http://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx

如果你有一个类类型的事件,那么你需要做以下将其序列化到XML,另外,作为一个小珍闻我会使用关键词作为类或变量定义,如果远离尽可能,但如果你不能控制那个,那么你的双手就会被束缚住。

@event myEvent = new @event(); 
myEvent.name = "AddProgram"; 
myEvent.version = 8.0M; 

string xmlIWant= ""; 
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(@event); 
using (StringWriter writer = new StringWriter()) 
{ 
    x.Serialize(writer, myEvent); 
    xmlIWant = writer.ToString(); 
} 
+0

这并不是我真正期待它的工作。我有类似的java代码,但它有一个总体的文档类型,实际上会做一个tostring并转换整个文档。我有点使用它作为我的例子,并与.net的东西混合。我刚刚与序列化有根本的脱节。我遇到了一堆例子,不能把它放在一起。 – Jason 2014-09-22 19:24:57

+0

我看到一切都很好,只是很好奇你从那里得到了什么。并不是说你无法创建自己的ToStringXML扩展方法,并在其中插入序列化片段,以返回它将返回的位置和xml字符串。 – Bearcat9425 2014-09-22 19:29:25