数据协定名称为“DataTable:http://schemas.datacontract.org/2004/07/System.Data”的类型“System.Data.DataTable”不是所需的类型。请考虑使用 DataContractResolver(如果你正在使用 DataContractSerializer),或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 属性,或者将未知类型添加到传递给序列化程序的已知类型列表。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Runtime.Serialization.SerializationException: 数据协定名称为“DataTable:http://schemas.datacontract.org/2004/07/System.Data”的类型“System.Data.DataTable”不是所需的类型。请考虑使用 DataContractResolver(如果你正在使用 DataContractSerializer),或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 属性,或者将未知类型添加到传递给序列化程序的已知类型列表。
源错误:
行 43: ser.WriteObject(ms, t);
行 44: string jsonString = Encoding.UTF8.GetString(ms.ToArray());
行 45: ms.Close();
行 46: return jsonString;
行 47: }
源文件: F:\Projects.Spread\Projects.Water.Web\Default.aspx.cs 行: 45
namespace Projects.Water.Web
{
public partial class Default : ExtMemberPage
{
protected void Page_Load(object sender, EventArgs e)
{
RegUserBLL regUserBLL = new RegUserBLL();
aa a = new aa();
a.a = regUserBLL.GetList("*", "status=1");
a.b = 2;
Response.Write(JsonHelpers.JsonSerializer<aa>(a));
}
}
public class aa
{
public object a { get; set; }
public int b { get; set; }
}
public class JsonHelpers
{
#region JsonDeserialize
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
#endregion
}
}