属性名称与silverlight中的原始对象不同

时间:2010-03-18 04:14:38

标签: silverlight properties

以下是服务层的一部分,由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对象的私有变量名。

我有什么问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

除非您使用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; } }
}