首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型和.NET中的Duck-Typing XML?

泛型和.NET中的Duck-Typing XML?
EN

Stack Overflow用户
提问于 2010-02-13 01:52:07
回答 4查看 609关注 0票数 7

我正在使用一些数据实例的XML表示。我正在使用.NET序列化对对象进行反序列化,但我灵魂中的某些东西却因为必须编写类来表示XML...下面是我很想做的事情,但我不知道它的语法是否可行:

请考虑以下几点:

代码语言:javascript
复制
dim xmlObject = SomeXMLFunction() 'where some function returns an object/string representation of xml...

xmlObject.SomePropertyDefinedInTheXML = SomeFunction()

对此有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-16 01:29:05

VB.NET允许您以一种非常直观的方式使用XML:

代码语言:javascript
复制
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属性总是返回一个字符串。

票数 3
EN

Stack Overflow用户

发布于 2010-02-13 01:55:33

去把xsd.exe叫来。它将根据您的模式定义创建适当的XML序列化类。自动!

票数 4
EN

Stack Overflow用户

发布于 2010-02-13 02:08:12

如果您控制了XML的定义(即XSD),那么实际编写表示XML的类是一个好主意(这些类称为DTO)。它为您提供了一个强类型的类来进行编码,并且您可以免费地进行反序列化,而不必自己手动进行容易出错的xml解析。如果是这种情况,请先编写类,例如

代码语言:javascript
复制
[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

代码语言:javascript
复制
//You can then [Deserialize][2] it back again with:
var book = DataContractDeserializer.Instance.Parse<Book>(xml);

下面是指向SerializerDeserializer类的链接。

如果您有WSDL或XSD,您可以使用wsdl.exe (或在VS.NET中添加服务引用)或xsd.exe为您生成dto类,如@DavidSchmitt所建议的那样。

或者,如果没有可用的XSD,我建议您研究一下XLinq,寻找另一种解析XML的简单方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2253900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档