【问题标题】:property names are different from original Object in the silverlight属性名称与 silverlight 中的原始对象不同
【发布时间】:2010-03-18 04:14:38
【问题描述】:

以下是WCF服务提供的服务层的一部分:

[Serializable]
public class WaitInfo
{
    private string roomName;
    private string pName;
    private string tagNo;

    public string RoomName 
          { get { return roomName; } set { this.roomName = value; } }
    public string PName 
          { get { return pName; } set { this.pName = value; } }
    public string TagNo 
          { get { return tagNo; } set { this.tagNo = value; } }
}



public class Service1 : IService1
{
    public List<WaitInfo> GetWaitingList()
    {
        MyDBDataContext db = new MyDBDataContext();

        var query = from w in db.WAIT_INFOs
                    select new WaitInfo 
                    { 
                        TagNo = w.PATIENT_INFO.TAG_NO, 
                        RoomName= w.ROOM_INFO.ROOM_NAME, 
                        PName= w.PATIENT_INFO.P_NAME 
                    };

        List<WaitInfo> result = query.ToList();

        return result;
    }

以下是 Silverlight 提供的 UI 层的代码隐藏部分

        public MainPage()
                {
                    InitializeComponent();

                    Service1Client s = new Service1Client();
                    s.GetWaitingListCompleted += 
    new EventHandler<GetWaitingListByCompletedEventArgs>( s_GetWaitingListCompleted);
                    s.GetWaitingListAsync();

                }

        void s_GetWaitingListCompleted(object sender,
     RadControlsSilverlightApplication1.ServiceReference2.GetWaitingListByCompletedEventArgs e)
                {

                    GridDataGrid.ItemsSource = e.Result;
                }


    And following is xaml code in Silverlight page


<Grid x:Name="LayoutRoot">
        <data:DataGrid x:Name="GridDataGrid"></data:DataGrid>
 </Grid>

这是非常简单的代码,但我觉得奇怪的是页面后面代码中“e.Result”处对象的属性名称。

在服务层,虽然属性名称肯定是“RoomName, PName, TagNo”,但在silverlight属性中,属性名称是“roomName, pName, tagNo”,它们是WaitingList对象的私有变量名。

我有什么问题吗?

提前致谢。

【问题讨论】:

    标签: silverlight properties


    【解决方案1】:

    除非您专门使用 DataContract 属性(您应该使用该属性,而不是 Serializable)来装饰您的类,否则将推断出默认的 DataContract。对于普通的 Serializable 类型,这意味着字段将被序列化,而不是属性。

    您可以通过以下两种方式之一来标记您的课程。后者将在序列化/反序列化您的对象时使用属性访问器,这可能非常有用或很麻烦,具体取决于您的情况。

    [DataContract]
    public class WaitInfo
    {
        [DataMember(Name="RoomName")]
        private string roomName;
        [DataMember(Name="PName")]
        private string pName;
        [DataMember(Name="TagNo")]
        private string tagNo;
    
        public string RoomName 
              { get { return roomName; } set { this.roomName = value; } }
        public string PName 
              { get { return pName; } set { this.pName = value; } }
        public string TagNo 
              { get { return tagNo; } set { this.tagNo = value; } }
    }
    

    我比较喜欢的方法:

    [DataContract]
    public class WaitInfo
    {
    
        private string roomName;
        private string pName;
        private string tagNo;
    
        [DataMember]
        public string RoomName 
              { get { return roomName; } set { this.roomName = value; } }
    
        [DataMember]
        public string PName 
              { get { return pName; } set { this.pName = value; } }
    
        [DataMember]
        public string TagNo 
              { get { return tagNo; } set { this.tagNo = value; } }
    }
    

    【讨论】:

    • 随时。很高兴为您服务。
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2021-02-02
    • 2014-07-12
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多