您好,我正在将 xml 响应转换为 c# 中的类对象。我已经从 sql 端获取 xml 并调用一个实用程序并获取 xml 并在类对象中进行转换,但使用我的代码不在类中返回 null。任何人都知道我的问题在哪里,请告诉我。
这是我的 xml 数据:
<Users>
<User>
<UserId>1</UserId>
<Email>abc@gmail.com</Email>
<UserName>abc</UserName>
<ProfileImage>20160816105401206.jpeg</ProfileImage>
<Name>abc</Name>
<InterestId>8</InterestId>
<FeedId>4608</FeedId>
<Description>Test</Description>
<Interest>Cricekt</Interest>
<InterestId>12</InterestId>
<FeedId>4609</FeedId>
<Description>Test 2</Description>
<Interest>Read</Interest>
</User>
<User>
<UserId>2</UserId>
<Email>xyz@gmail.com</Email>
<UserName>xyz</UserName>
<ProfileImage>20160816105401207.jpeg</ProfileImage>
<Name>xyz</Name>
<InterestId>8</InterestId>
<FeedId>4610</FeedId>
<Description>Test 3</Description>
<Interest>swim</Interest>
<InterestId>12</InterestId>
<FeedId>4610</FeedId>
<Description>Test 3</Description>
<Interest>drive</Interest>
</User>
</Users>
这是我在 C# 中的类(class):
[XmlRoot]
public class Users
{
[XmlRoot]
public class User
{
[XmlElement]
public int UserId { get; set; }
[XmlElement]
public string Email { get; set; }
[XmlElement]
public string UserName { get; set; }
[XmlElement]
public string ProfileImage { get; set; }
[XmlElement]
public string Name { get; set; }
[XmlElement]
public int FeedId { get; set; }
[XmlElement]
public string Description { get; set; }
[XmlElement]
public string Interest { get; set; }
[XmlElement]
public int InterestId { get; set; }
}
[XmlArray("UserList")]
[XmlArrayItem("User")]
public User[] ListUsers { get; set; }
}
这是我在 C# 中的方法:
public string xmldata()
{
Users obju = new Users();
string xml = "";
DataSet ds = DataAccess.ExecuteDataset(Settings.ConnectionString(), "Getxml",1,10);
if (ds != null && ds.Tables.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
xml += ds.Tables[0].Rows[i]["XML_F52E2B61-18A1-11d1-B105-00805F49916B"].ToString();
}
}
var serializer = new XmlSerializer(typeof(Users));
Users result;
using (TextReader reader = new StringReader(xml))
{
result = (Users)serializer.Deserialize(reader);// here i am not getting xml to in class
}
return null;
}
最佳答案
没有<UserList>
包装它们,所以这不是一个 xml 数组。相反,使用:
[XmlElement("User")]
public User[] ListUsers { get; set; }
或更好:List<User>
而不是 User[]
;我个人会:
[XmlElement("User")]
public List<User> Users {get; } = new List<User>();
(但这还需要您将根类型重命名为其他名称)
关于 User
, 它不是根,所以 [XmlRoot]
是多余的;和 [XmlElement]
是默认值并自动采用,因此您可以删除所有 [XmlElement]
来自 User
也是。
为了证明一切正常:
using System;
using System.IO;
using System.Xml.Serialization;
public class Users
{
public class User
{
public int UserId { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string ProfileImage { get; set; }
public string Name { get; set; }
public int FeedId { get; set; }
public string Description { get; set; }
public string Interest { get; set; }
public int InterestId { get; set; }
}
[XmlElement("User")]
public User[] ListUsers { get; set; }
}
static class Program
{
static void Main()
{
var ser = new XmlSerializer(typeof(Users));
using (var sr = new StringReader(xml))
{
var obj = (Users)ser.Deserialize(sr);
Console.WriteLine(obj.ListUsers.Length); // 2
}
}
const string xml = @"<Users>
<User>
<UserId>1</UserId>
<Email>abc@gmail.com</Email>
<UserName>abc</UserName>
<ProfileImage>20160816105401206.jpeg</ProfileImage>
<Name>abc</Name>
<InterestId>8</InterestId>
<FeedId>4608</FeedId>
<Description>Test</Description>
<Interest>Cricekt</Interest>
<InterestId>12</InterestId>
<FeedId>4609</FeedId>
<Description>Test 2</Description>
<Interest>Read</Interest>
</User>
<User>
<UserId>2</UserId>
<Email>xyz@gmail.com</Email>
<UserName>xyz</UserName>
<ProfileImage>20160816105401207.jpeg</ProfileImage>
<Name>xyz</Name>
<InterestId>8</InterestId>
<FeedId>4610</FeedId>
<Description>Test 3</Description>
<Interest>swim</Interest>
<InterestId>12</InterestId>
<FeedId>4610</FeedId>
<Description>Test 3</Description>
<Interest>drive</Interest>
</User>
</Users>";
}
关于c# - 如何将 xml 响应转换为 C# 中的类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408862/