我正在使用一些数据实例的XML表示。我正在使用.NET序列化对对象进行反序列化,但我灵魂中的某些东西却因为必须编写类来表示XML...下面是我很想做的事情,但我不知道它的语法是否可行:
请考虑以下几点:
dim xmlObject = SomeXMLFunction() 'where some function returns an object/string representation of xml...
xmlObject.SomePropertyDefinedInTheXML = SomeFunction()对此有什么建议吗?
发布于 2010-02-16 01:29:05
VB.NET允许您以一种非常直观的方式使用XML:
Sub Serialize()
Dim xml = <myData>
<someValue><%= someFunction() %></someValue>
</myData>
xml.Save("somefile.xml")
End Sub
Sub Serialize2() ' if you get the XML skeleton as a string
Dim xml = XDocument.Parse("<myData><someValue></someValue></myData>")
xml.<myData>.<someValue>.Value = "test"
xml.Save("somefile.xml")
End Sub
Sub Deserialize()
Dim xml = XDocument.Load("somefile.xml")
Dim value = xml.<myData>.<someValue>.Value
...
End Sub缺点:这里没有强类型;Value属性总是返回一个字符串。
发布于 2010-02-13 01:55:33
去把xsd.exe叫来。它将根据您的模式定义创建适当的XML序列化类。自动!
发布于 2010-02-13 02:08:12
如果您控制了XML的定义(即XSD),那么实际编写表示XML的类是一个好主意(这些类称为DTO)。它为您提供了一个强类型的类来进行编码,并且您可以免费地进行反序列化,而不必自己手动进行容易出错的xml解析。如果是这种情况,请先编写类,例如
[DataContract]
public class Book
{
[DataMember]
public string Name {get;set;}
[DataMember]
public string Author {get;set;}
}
//Then you can use this code to serialize
var xml = DataContractSerializer.Instance.SerializeToString(
new Book {Name="A", Artist="B"});
//which will give you something like:A B
//You can then [Deserialize][2] it back again with:
var book = DataContractDeserializer.Instance.Parse<Book>(xml);下面是指向Serializer和Deserializer类的链接。
如果您有WSDL或XSD,您可以使用wsdl.exe (或在VS.NET中添加服务引用)或xsd.exe为您生成dto类,如@DavidSchmitt所建议的那样。
或者,如果没有可用的XSD,我建议您研究一下XLinq,寻找另一种解析XML的简单方法。
https://stackoverflow.com/questions/2253900
复制相似问题