如何使用带有XDocument的构造函数将XML反序列化为对象?我有一个类:publicclassMyClass{publicMyClass(){}}我希望能够使用XMLSeralizer直接在构造函数中反序列化XDocument:publicclassMyClass{privateXmlSerializer_s=newXmlSerializer(typeof(MyClass));publicMyClass(){}publicMyClass(XDocumentxd){this=(MyClass)_s.Deserialize(xd.CreateReader());}}除了不允许在构造函数中指定“this”。是否可以?不,这是不可能的。序列化程序在反序列化时创建对象。您已经创建了一个对象。相反,提供一个从XDocument构造的静态方法。publicstaticMyClassFromXml(XDocumentxd){XmlSerializers=newXmlSerializer(typeof(MyClass));返回(MyClass)s.Deserialize(xd.CreateReader());}使用静态加载方法更标准。公共类MyClass{publicstaticMyClassLoad(XDocumentxDoc){XmlSerializer_s=newXmlSerializer(typeof(MyClass));返回(MyClass)_s.Deserialize(xDoc.CreateReader());}}最好使用某种工厂,例如:publicstaticMyClassCreate(XDocumentxd){XmlSerializer_s=newXmlSerializer(typeof(MyClass));返回(MyClass)_s.Deserialize(xd.CreateReader());我想做同样的事情并决定做以下事情:publicclassMyClass{publicMyClass(){}publicMyClass(XDocumentxd){vart=typeof(MyClass);varo=(MyClass)newXmlSerializer(t).Deserialize(xd.CreateReader());foreach(varpropertyint.GetProperties())property.SetValue(this,property.GetValue(o));对你的问题的简单回答是否定的,你不能。所以原因是你在反序列化的时候创建了一个对象。但是如果你真的坚持对象实例化自身的可能性,你可以使用一个私有的静态实例变量,你可以用反序列化后得到的对象加载它。然后其他公共成员应该在实例上工作(当它不为空时)一个例子(从我的头顶,所以它不太正确的可能性很小):publicclassMyClass{privateXmlSerializer_s=newXmlSerializer(typeof(MyClass));私有静态MyClassmInstance=null;publicMyClass(){/*初始化逻辑*/}publicMyClass(XDocumentxd){mInstance=(MyClass)_s.反序列化(xd.CreateReader());}publicvoidDoSomething(){if(mInstance!=null)mInstance.DoSomething();else{//DoSomething的逻辑}}}我希望这有点清楚,但我不喜欢这种设计。我认为这使它过于复杂并且对错误敏感。以上是C#学习教程:如何使用带有XDocument的构造函数将XML反序列化为对象?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
