имена свойств отличаются от оригинального объекта в Silverlight - PullRequest
1 голос
/ 18 марта 2010

Ниже приведена часть уровня обслуживания, предоставляемого службой 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

        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 Ответ

2 голосов
/ 18 марта 2010

Если вы специально не украсите свой класс атрибутом DataContract (который вы должны вместо Serializable), тогда будет выведен вывод DataContract по умолчанию. Для обычных сериализуемых типов это означает, что поля будут сериализованы в отличие от свойств.

Вы можете разметить свой класс одним из следующих двух способов. Последний будет использовать средства доступа к свойству при сериализации / десериализации вашего объекта, что может оказаться очень полезным или затруднительным в зависимости от ваших обстоятельств.

[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; } }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...