我现在有个需求, 客户端有个comboBox,里面的数据从服务端返回。 我在服务端写个接口:[webInvoke(method ="Get",ResponseFormat= webMessageFormat.Json)]
public stream ReturnContent()
{
datatable dt = ...;
return Serialize(dt);
} private stream Serialize(object content)
{
var ScriptSerializer = new JavaScriptSerializer();
var serializeObject = Encoding.UTF8.GetBytes(javaScriptSerializer.Serialize(content));
var Stream = new MemoryStream(serializeObject);
WebOperationContext.Current.OutgoingResponse.ContentType
= "application/json; charset=utf-8";
return Stream;
}Serialize这个方法是别人写好的,我想知道我能把里面的参数object类型传个dataTable进去,这个dataTable里肯定有数据,而且不止一行、一列。传个dataTable进去,用这个方法Serialize序列化之后,客户端解析会不会有问题?如果不行,我该怎么把这个table传给客户端?
public stream ReturnContent()
{
datatable dt = ...;
return Serialize(dt);
} private stream Serialize(object content)
{
var ScriptSerializer = new JavaScriptSerializer();
var serializeObject = Encoding.UTF8.GetBytes(javaScriptSerializer.Serialize(content));
var Stream = new MemoryStream(serializeObject);
WebOperationContext.Current.OutgoingResponse.ContentType
= "application/json; charset=utf-8";
return Stream;
}Serialize这个方法是别人写好的,我想知道我能把里面的参数object类型传个dataTable进去,这个dataTable里肯定有数据,而且不止一行、一列。传个dataTable进去,用这个方法Serialize序列化之后,客户端解析会不会有问题?如果不行,我该怎么把这个table传给客户端?
我这边用的是MemoryStream.
客户端再转换一次就可以了。
至于Method用get还是post,都是可以的,只不过没有数据发送的情况下,get效率好点。
客户端是mobile,ipad之类的,我刚才试过了放dataTable进去不行,在执行到var serializeObject = Encoding.UTF8.GetBytes(javaScriptSerializer.Serialize(content));抛异常:序列化类型为“System.Reflection.RuntimeModule”的对象时检测到循环引用,是不是只能序列化一行数据啊?
能直接返回dataTable么?我要返回的数据是这样的:
id name
1 tst1
2 tst2
...
大侠啊,这个dataTable要怎么返回到客户端?
DataTable内部存在循环引用,自然序列化和反序列化会出错,因此对于非.NET客户端(你这里就不是),不要用该类型存储数据,使用List<T>,自己构造实体类对象,如果实体类懒得构造,用List<Dictionary<string,object>>作为返回值也可以,替代DataTable