我正在开发一个Xamarin.iOS应用程序,它将通过RESTful API连接到Web服务。我目前正在为API客户端层编写响应和业务对象,但我遇到了一个问题。
考虑以下两个示例API结果:
成功
{
"data":{
"id":"gwaMR",
"animated":false,
"size":11762,
"link":"http:\/\/i.imgur.com\/gwaMR.jpg"
},
"success":true,
"status":200
}
误
{
"data":{
"error":"Unable to find an image with the id, vycVV",
"request":"\/3\/image\/vycVV",
"method":"GET"
},
"success":false,
"status":404
}
由于成功的数据信息和错误详细信息都在各自的场景中共享“数据”键,因此我在C#中编写了以下对象:
public class BaseBusinessObject<D> where D:BaseBusinessObjectData
{
public D Data { get; set; }
public int Status { get; set; }
public bool Success { get; set; }
}
public class BaseBusinessObjectData
{
public string Error { get; set; }
public string Method { get; set; }
public string Request { get; set; }
}
public class ImageObject : BaseBusinessObject<ImageObjectData>
{
}
public class ImageObjectData : BaseBusinessObjectData
{
public string ID { get; set; }
public bool Animated { get; set; }
public int Size { get; set; }
public string Link { get; set; }
}
在进行API调用时(使用RestSharp自动对象反序列化),我提供了对象类型ImageObject
作为预期的结果类型。但是,我实际上还没有那么远。尝试编译这些响应对象类型时,出现以下错误:
/Users/willseph/GitHub/Repos/AppName/API/API.cs(46,255+):错误 CS0305:使用泛型类型`AppName.BaseBusinessObject' 需要'1'类型参数(CS0305)
然而,当我使用相同的代码并将其带入标准的C#库(仍然在Xamarin Studio中)时,它编译得很好。
作为一种解决方法,我可以使用隐藏和新的Data
成员从代码中删除泛型:
public class BaseBusinessObject
{
public BaseBusinessObjectData Data { get; set; }
public int Status { get; set; }
public bool Success { get; set; }
}
public class BaseBusinessObjectData
{
public string Error { get; set; }
public string Method { get; set; }
public string Request { get; set; }
}
public class ImageObject : BaseBusinessObject
{
public new ImageObjectData Data { get; set; }
}
public class ImageObjectData : BaseBusinessObjectData
{
public string ID { get; set; }
public string Link { get; set; }
public int Size { get; set; }
public bool Animated { get; set; }
}
这可以很好地编译并导致预期的行为。有没有人对可能导致此问题的原因有任何见解?
答案 0 :(得分:0)
我尝试在我的解决方法中添加一个单独的临时文件,其中包含原始的错误类(虽然重命名为不会导致冲突),但它似乎正在编译。
我不确定问题是什么,但我想这是由我的电脑造成的一些奇怪的侥幸或异常。