在一个Xamarin.Forms项目中,我在反序列化WebService响应时遇到了奇怪的效果。
在服务器端我有
namespace MyTestWebservice
{
[WebService(Namespace = "https://example.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[WebMethod(EnableSession = true)]
public class AppInterface : System.Web.Services.WebService
{
public GeneralClass TestMethod(int param)
{
return /* Resulting instance */
}
}
}
数据如下:
namespace MyTestWebservice
{
[XmlInclude(typeof(TestClass1))]
[XmlInclude(typeof(TestClass2))]
public abstract class TestBase
{
public int Prop1 { get; set; }
public string Prop2 { get; set; }
}
public class TestClass1 : TestBase
{
public int Prop3 { get; set; }
public string Prop4 { get; set; }
}
public class TestClass2 : TestBase
{
public int Prop5 { get; set; }
public string Prop6 { get; set; }
}
public class Other
{
public string Prop7 { get; set; }
}
public class GeneralClass
{
public int Prop0 { get; set; }
public TestBase[] Values { get; set; }
}
}
在VisualStudio 2022中,我生成了向Web Service发送/接收请求的代码。代码看起来不错(据我所见),在MyApp.UWP(Windows上的服务器,Windows上的客户端)中,一切都运行良好,即所有数据都正确地从服务器传输到应用程序。
然而,在MyApp.Android(Windows上的服务器,Android Emulator上的客户端)中,只有基类TestBase
和引用类Other
的数据被设置,而TestClass1
和TestClass2
中的数据保持未设置,即0
或null
。
这是Xamarin.Forms中的一个已知错误吗?我该如何解决?或者在一些属性/类定义上需要更多的属性?
1条答案
按热度按时间wz3gfoph1#
我找到了答案here:
问题是,在客户端,带有参数
Order
的XmlElementAttribute被附加到生成的代码中的属性:然而,对于派生类
TestClass1
和TestClass2
中的属性,Order
从0
开始计数,而不是2
。因此,在Visual Studio中生成客户端代码后,我必须手动更改顺序。然后在Android上运行良好。是否有更新的版本修复了此错误?