Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 将接收到的xml反序列化为C#对象_C# 4.0_Xml Serialization - Fatal编程技术网

C# 4.0 将接收到的xml反序列化为C#对象

C# 4.0 将接收到的xml反序列化为C#对象,c#-4.0,xml-serialization,C# 4.0,Xml Serialization,我正在编写一个接收XML数据包的应用程序。我尝试过用C#创建一个对象来反序列化接收到的XML,效果很好。我注意到,如果类名与XML数据包中的根元素名不同,则对该类的反序列化将不起作用。我在web上到处搜索一个简单的应用程序,甚至不知道它是否可行,但我的问题是:如何根据收到的XML包在C#中自动创建一个类?这可能吗?或者类似于这个场景的东西,如果根元素名不同于类名,我可以解决这个问题。非常感谢您的帮助。您是否尝试使用RootNode属性来更改名称 [XmlRoot("RootNodeName")]

我正在编写一个接收XML数据包的应用程序。我尝试过用C#创建一个对象来反序列化接收到的XML,效果很好。我注意到,如果类名与XML数据包中的根元素名不同,则对该类的反序列化将不起作用。我在web上到处搜索一个简单的应用程序,甚至不知道它是否可行,但我的问题是:如何根据收到的XML包在C#中自动创建一个类?这可能吗?或者类似于这个场景的东西,如果根元素名不同于类名,我可以解决这个问题。非常感谢您的帮助。

您是否尝试使用RootNode属性来更改名称

[XmlRoot("RootNodeName")]
public class MyClass {...}
根据您的评论:

不能在运行时创建强类型类

您是否考虑过使用LINQ to XML而不是XML序列化?这可能更适合您的(动态)需求。您仍然可以保留类,只需通过LINQ to XML表达式而不是直接反序列化来填充它


您应该查看xsd.exe,它将帮助您自动创建类。您不太清楚如何使用它。除了编写使用xsd.exe所需的步骤外,我是否可以在代码中使用xsd.exe而不必手动执行任何操作?不可以在代码中使用。。。很抱歉快速创建对象,因此您不必手动编写它们……我无法使用[XmlRoot(“RootNodeName”)]标记,因为我将无法访问XML数据包。一旦在指定端口接收到,处理就开始。还有别的办法吗?我曾想过这样做,但那是一个漫长而乏味的过程。这会不会影响速度,或者速度在这里不被考虑?@AndrewKemp如果不运行一些测试,我不确定哪一个更快。我使用过这两种方法,但从未见过速度问题(在我的案例中)。除非你说的是大得离谱的文件,否则我不认为这是个大问题。但是您应该始终评估您的需求,不要盲目相信我的评论?如果是这样,我将这样做,并将[XmlRoot(“RootNodeName”)]设置为与找到的结果相等。您不能,只能向其中传递一个常量。但要回答您的问题:xDoc.Root.Name.ToString()