我有一个.NET JSON Web服务
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
[GenerateScriptType(typeof(Item))]
[GenerateScriptType(typeof(Info))]
[GenerateScriptType(typeof(Details))]
public class API : System.Web.Services.WebService
{
[WebMethod]
public Item[] GetItems()
{
...
}
[WebMethod]
public bool SaveItem(Item item)
{
...
}
}
类的定义位于消息的底部。
More
类中有Info
类型的媒体资源Item
。
在客户端(HTML5)我正在呼叫GetItems()
,并将其存储在本地存储中,并定期拨打SaveItem
。
我在客户端上获得的JSON数据类似于:
[{"__type":"MyApp.API.Item","More":{"__type":"MyApp.API.Info","ID":1}}]
到目前为止一切都很好。
当我将属性More
从类型Info
更改为Details
类中的Item
类型时,会出现问题,例如:
[Serializable]
public class Item
{
public Details More { get; set; } // <----- type changed from Info to Details
}
由于我的客户端已缓存数据,因此当我尝试调用SaveItem
时,ASP.NET会抛出错误:
Cannot convert object of type 'MyApp.API.Info' to 'MyApp.API.Details'
问题:如果有解决方案(理想情况下保留ASMX Web服务,而不是更改客户端上的JSON数据)?
以下是这些课程的内容:
[Serializable]
public class Item
{
public Info More { get; set; }
}
[Serializable]
public class Details: Info, IDetails
{
public string Notes { get; set; }
}
[Serializable]
public class Info: IInfo
{
public int ID { get; set; }
}
public interface IDetails: IInfo
{
string Notes { get; }
}
public interface IInfo
{
int ID { get; }
}
答案 0 :(得分:0)
如果您不想看到“类型”:“对象”,则可以将方法设为object
类型。
所有这些文本都应该消失。