Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# 将字符串从xml强制转换为类对象_C#_Xmlserializer - Fatal编程技术网

C# 将字符串从xml强制转换为类对象

C# 将字符串从xml强制转换为类对象,c#,xmlserializer,C#,Xmlserializer,我想将xml文件中的字符串转换为ContactPersonType 有关需要浇铸字符串的位置,请参阅for循环 public class ContactPersonType { private String _id; public String ID { get { return _id; } set { _id = value; } } private String _name; public String Na

我想将xml文件中的字符串转换为ContactPersonType

有关需要浇铸字符串的位置,请参阅for循环

public class ContactPersonType
{
    private String _id;
    public String ID
    {
        get { return _id; }
        set { _id = value; }
    }

    private String _name;
    public String Name
    {
        get { return _name; }
        set { _name = value; }
    }
}
//联系人类

private ContactPersonType _jobRole;
        public ContactPersonType JobRole
        {
            get { return _jobRole; }
            set { _jobRole = value; }
        }


public static ObservableCollection<ContactPerson> getContactPerson()
        {
            ObservableCollection<ContactPerson> ContactPersons = new ObservableCollection<ContactPerson>();
            XmlDocument doc = new XmlDocument();
            doc.Load("contactpersoon.xml");

            XmlNodeList elemList = doc.GetElementsByTagName("contact");
            for (int i = 0; i < elemList.Count; i++)
            {
                 //this needs to be casted to ContactPersonType
                contactPerson.JobRole = elemList[i]["jobrole"].InnerText;
            }
            return ContactPersons;
        }
private ContactPersonType\u作业角色;
公共联系人类型JobRole
{
获取{return\u jobRole;}
设置{u jobRole=value;}
}
公共静态ObservableCollection getContactPerson()
{
ObservableCollection ContactPersons=新的ObservableCollection();
XmlDocument doc=新的XmlDocument();
doc.Load(“contactpersoon.xml”);
XmlNodeList elemList=doc.GetElementsByTagName(“联系人”);
for(int i=0;i
您不能使用如下所示的帮助器将XML反序列化到.NET类吗

public T Deserialize<T>(string fileName)
        {
            try
            {           
                XmlSerializer sx = new XmlSerializer(typeof(T)); //or T.GetType?
                StreamReader sr = new StreamReader(fileName);
                var data = sx.Deserialize(sr);
                sr.Close();

                return (T)data;
            }
            catch (Exception ex)
            {

                throw;
            }
        }
public T反序列化(字符串文件名)
{
尝试
{           
XmlSerializer sx=新的XmlSerializer(typeof(T));//还是T.GetType?
StreamReader sr=新的StreamReader(文件名);
var data=sx.反序列化(sr);
高级关闭();
返回(T)数据;
}
捕获(例外情况除外)
{
投
}
}
我讨厌XmlDocument,所以总是尽可能地反序列化(尽管我确实喜欢的一个潜在替代方案是)

编辑-用法类似于:

var item = Deserialize<ContactPersonType>(fileName);
var item=反序列化(文件名);

我不太熟悉您读取XML元素的方式,因此此代码可能需要进行一些调整,但这应该符合您的要求(还可以自由地使您的属性自动实现,以提高代码可读性)

使用系统;
使用System.Collections.Generic;
使用System.Collections.ObjectModel;
使用System.Linq;
使用System.Xml;
使用System.Xml.Linq;
名称空间程序
{
公共类ContactPersonType
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
}
公共类联系人
{
public ContactPersonType JobRole{get;set;}
公共静态ObservableCollection GetContactPerson()
{
var contactPersons=新的ObservableCollection();
XElement doc=XElement.Load(“contactpersoon.xml”);
var联系人=单据要素(“联系人”);
对于(int i=0;i

根据设置ID属性的方式,可能会将循环重写为foreach。有关XElement及其成员的更多信息,请查看,您无法“铸造”该元素。查找xml序列化,在.NET Framework中有很好的类。新ContactPersonType的ID和名称应该是什么?它可能有助于显示相关源XML文件的片段。在toString方法中放置JobRole.Name时,它不起作用。我仍然得到了收藏品太棒了!如果此答案解决了您的问题,请将其标记为已接受。如果有任何问题,请随时发布任何必要的更正,以使答案有效。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml;
using System.Xml.Linq;

namespace Program
{
    public class ContactPersonType
    {
        public string ID { get; set; }
        public string Name { get; set; }
    }

    public class ContactPerson
    {
        public ContactPersonType JobRole { get; set; }

        public static ObservableCollection<ContactPerson> GetContactPerson()
        {
            var contactPersons = new ObservableCollection<ContactPerson>();
            XElement doc = XElement.Load("contactpersoon.xml");
            var contacts = doc.Elements("contact");

            for (int i = 0; i < contacts.Count(); i++)
            {
                contactPersons.Add(new ContactPerson
                {
                    JobRole = new ContactPersonType
                    {
                        ID = i.ToString(),
                        Name = contacts.ElementAt(i).Element("jobrole").Value
                    }
                });
            }

            return contactPersons;
        }
    }
}