【发布时间】:2016-05-09 19:26:28
【问题描述】:
我需要创建一个DLL 类库,它从HTTP 站点获取JSON 格式化属性并将它们显示在List 中。当我制作了一个Test 应用程序(可执行,而不是DLL)时,它可以工作并且可以执行我想要的操作,但是在制作.DLL 并尝试从可执行应用程序中调用它时遇到问题(这些项目应该显示在WPF 列表框)。在我的DLL 我有以下课程:
public class Definitions
{
public double id { get; set; }
public double uid { get; set; }
public string user { get; set; }
public string start { get; set; }
public string end { get; set; }
public double dur { get; set; }
public string project { get; set; }
public override string ToString()
{
dur = dur / 100000;
return string.Format(
"TimeID: {0}, UserID: {1}, Name: {2}, Project: {3}, Start: {4}, End: {5}, Duration: {6} min",
this.id,
this.uid,
this.user,
this.project,
Convert.ToDateTime(this.start),
Convert.ToDateTime(this.end),
this.dur);
}
}
public class MainList
{
public List<Definitions> data { get; set; }
}
我想我写的方法不对:
public static ??returntype?? GetData()
{
//...
var f = Newtonsoft.Json.JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);
var allDefinitions = JsonConvert.DeserializeObject<MainList>(f);
if (allDefinitions.data.Count == 0)
{
break;
}
return allDefinitions.data;//??
}
我不知道返回类型应该是什么。当我创建Test 应用程序时,我将我的代码放入一个循环中并且它可以工作:
for (var i = 0; i < allDefinitions.data.Count; i++)
{
Console.WriteLine(allDefinitions.data[i]);
}
但在这种情况下,它是一个EXE 应用程序,并且代码在Main 方法中。现在它应该是DLL 并且应该在WPF ListBox 中显示所有这些ListItems。感谢您的帮助。
编辑:
我认为我的方法本身和Main 方法中的对象实例有问题。该方法必须遍历 WEB 页面,因为 API 每个请求只允许 50 个项目,如果超过 50 个,则我必须转到第二页,依此类推。我遇到了 2 个问题,第一个是我收到一个错误,not all paths return a value 是无法访问的 page++,第二个是如果我在我的 Main 方法中说 List<Definitions> myList = GetData(); 然后我得到 Cannot implicitly convert type void into System.Collections.GenericList<Definitions> 我' m 发布整个方法:
public static List<Definitions> GetData()
{
string result = "";
for (int page = 1; result != null; page++)
{
string fpage = "&page=" + page;
string ApiToken = "something";
string url = " https://someWebSite" + fpage;
string userpass = ApiToken + ":api_token";
string userpassB64 = Convert.ToBase64String(Encoding.Default.GetBytes(userpass.Trim()));
string authHeader = "Basic " + userpassB64;
HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(url);
authRequest.Headers.Add("Authorization", authHeader);
authRequest.Method = "GET";
authRequest.ContentType = "application/json";
var response = (HttpWebResponse)authRequest.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream);
result = sr.ReadToEnd();
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
var f = Newtonsoft.Json.JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);
var allDefinitions = JsonConvert.DeserializeObject<MainList>(f);
if (allDefinitions.data.Count == 0)
{
break;
}
return allDefinitions.data;
}
【问题讨论】:
-
你有没有把
__declspecs 和类似的? -
看起来
GetData应该返回一个List<Definitions>(allDefinitions.data是什么) -
@crashmstr 是的,我试过了,然后
return allDefinitions.data;但后来我收到错误not all code paths return a value。 -
@user3613744 - 该错误与返回类型无关。它告诉您代码中存在不会返回任何内容的潜在路径。
-
@user3613744 那么您没有显示所有代码。如果出现问题,您只需要确保返回一些东西(
null或new List<Definitions>())。