C# 我正在尝试从实体框架返回XML数据
我已经使用web API创建了一个MVC5 web应用程序。 我还使用实体框架6 我有一个存储过程:C# 我正在尝试从实体框架返回XML数据,c#,xml,entity-framework-6,C#,Xml,Entity Framework 6,我已经使用web API创建了一个MVC5 web应用程序。 我还使用实体框架6 我有一个存储过程: SELECT * FROM [Group] WHERE CompanyRef = @CompanyRef OR CompanyRef = '00000000-0000-0000-0000-000000000000' AND Active = 1 FOR XML PATH('Group'), ROOT ('Groups') 它在查询分析器中返回: <Groups> <Gr
SELECT * FROM [Group] WHERE CompanyRef = @CompanyRef OR CompanyRef = '00000000-0000-0000-0000-000000000000' AND Active = 1
FOR XML PATH('Group'), ROOT ('Groups')
它在查询分析器中返回:
<Groups>
<Group>
<GroupId>1</GroupId>
<GroupRef>00000000-0000-0000-0000-000000000000</GroupRef>
<Name>Todays Work</Name>
<Description>System</Description>
<CompanyRef>00000000-0000-0000-0000-000000000000</CompanyRef>
<Active>1</Active>
</Group>
<Group>
<GroupId>2</GroupId>
<GroupRef>00000000-0000-0000-0000-000000000000</GroupRef>
<Name>All</Name>
<Description>System</Description>
<CompanyRef>00000000-0000-0000-0000-000000000000</CompanyRef>
<Active>1</Active>
</Group>
</Groups>
检查“test”的值,我得到:
没有我的XML的迹象?您可以使用:
using (SqlConnection con = new SqlConnection(_dbContext.Database.Connection.ConnectionString))
{
#region Connection Open
SqlCommand cmd = new SqlCommand("mbl_GetCourseMat", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Par1", "par1");
cmd.Parameters.AddWithValue("@Par2", 2);
con.Open();
#endregion
#region Reader XML
using (XmlReader reader = cmd.ExecuteXmlReader())
{
while (reader.Read())
{
string result = reader.ReadOuterXml();
if (!String.IsNullOrEmpty(result))
{
XmlSerializer xs = new XmlSerializer(typeof(MobilCourseMatModel));
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = Encoding.UTF8.GetBytes(result);
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
using (XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8))
{
model = (MobilCourseMatModel)xs.Deserialize(ms);
}
}
}
}
}
#endregion
con.Close();
}
您可以使用:
using (SqlConnection con = new SqlConnection(_dbContext.Database.Connection.ConnectionString))
{
#region Connection Open
SqlCommand cmd = new SqlCommand("mbl_GetCourseMat", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Par1", "par1");
cmd.Parameters.AddWithValue("@Par2", 2);
con.Open();
#endregion
#region Reader XML
using (XmlReader reader = cmd.ExecuteXmlReader())
{
while (reader.Read())
{
string result = reader.ReadOuterXml();
if (!String.IsNullOrEmpty(result))
{
XmlSerializer xs = new XmlSerializer(typeof(MobilCourseMatModel));
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = Encoding.UTF8.GetBytes(result);
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
using (XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8))
{
model = (MobilCourseMatModel)xs.Deserialize(ms);
}
}
}
}
}
#endregion
con.Close();
}
实体如何自动识别字符串是xml。您必须将字符串转换为xml对象。@jdweng您好,谢谢您的评论。是的,我知道,但我希望结果视图以字符串格式显示我的XML?使用XMLLINQ:XDocument doc=XDocument.Parse(字符串);如果调用
test.ToArray()
,会得到什么结果?结果类型应该是string[]
,它应该包含一个项目,即XML?我很犹豫是否将此作为一个答案提交,我不完全清楚这是否会给出您想要的内容。实体如何自动识别字符串是xml。您必须将字符串转换为xml对象。@jdweng您好,谢谢您的评论。是的,我知道,但我希望结果视图以字符串格式显示我的XML?使用XMLLINQ:XDocument doc=XDocument.Parse(字符串);如果调用test.ToArray()
,会得到什么结果?结果类型应该是string[]
,它应该包含一个项目,即XML?我很犹豫是否将此作为一个答案提交,我不完全清楚这是否会给你你想要的。
using (SqlConnection con = new SqlConnection(_dbContext.Database.Connection.ConnectionString))
{
#region Connection Open
SqlCommand cmd = new SqlCommand("mbl_GetCourseMat", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Par1", "par1");
cmd.Parameters.AddWithValue("@Par2", 2);
con.Open();
#endregion
#region Reader XML
using (XmlReader reader = cmd.ExecuteXmlReader())
{
while (reader.Read())
{
string result = reader.ReadOuterXml();
if (!String.IsNullOrEmpty(result))
{
XmlSerializer xs = new XmlSerializer(typeof(MobilCourseMatModel));
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = Encoding.UTF8.GetBytes(result);
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
using (XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8))
{
model = (MobilCourseMatModel)xs.Deserialize(ms);
}
}
}
}
}
#endregion
con.Close();
}