2012-04-06 4 views
0

Я пытаюсь добавить тег в группу, поэтому, когда я хочу добавить группу, я могу добавить к ней связанный тег. То, что я пытаюсь сделать, - это вернуть список групп, отфильтрованных по тэгам.Ссылки на класс wcf

List<Group> Groups = new List<Group>(); 
    List<Tag> tags = new List<Tag>(); 
    public void AddTagtoGroup(Group group, Tag tag) 
    { 
     group.GroupName(tag.Add); 
     return Groups with tags or tags with groups 
    } 

Это контракт данных для групп и тегов:

[DataContract(Name = "Group")] 
public class Group 
{ 

    public Group() // not sure if this has to have a datamember 
    { 
     Tags = new List<Tag>(); 
    } 
    [DataMember(Name = "GroupName")] 
    public string GroupName { get; set; } 
    public List<Tag> Tags { get; set; } // datamember or not? 

} 
[DataContract(Name = "Tag")] 
public class Tag 
{ 
    [DataMember(Name = "TagName")] 
    public string TagName { get; set; } 
} 
+0

Если вы хотите, чтобы свойство 'Tags' включалось в ваше сообщение WCF, которое отправляется по проводу, тогда ** да **, оно должно быть помечено символом' [ DataMember] '. Если вы украшаете свои классы атрибутами' [DataMember] ', тогда ** только то, что помечено' 'DataMember '**, будет сериализовано в сообщении WCF. –

+0

Как получилось group.GroupName (tag.Add) может добавить тег. o_O – wonde

ответ

2

Я просто немного запутался по коду: group.GroupName(tag.Add). Вы пытаетесь сбросить имя группы в вашей группе? И что делает метод tag.Add? Я бы подумал, что вы могли бы метод Add в вашей группе, чтобы добавить метку к текущему List<Tag> Tags списка, например:

group.Add(tag) 

вместо этого. Или, если вам нужно найти подходящую группу первого в вашем списке Groups вы можете предпочесть просто пройти в ИмяГруппах и сделать поиск для него, так что вы получите:

public void AddTagtoGroup(string groupName, Tag tag) 
{ 
    Group group = FindGroupByName(groupName); 
    if (group != null) { 
     group.Add(tag); 
    } 
} 

В FindGroupByName поедете через свой список Groups и проверить имя каждого из них. Или вы можете использовать HashSet групп или словарь, чтобы ускорить эту часть. Тогда просто сделайте геттер для вашего Groups.

В ответ на вопросы:

  • Вам нужно только отметить Group() конструктор как DataMember, если он должен быть вызван на стороне клиента
  • Да, список тегов необходимо будет помечается как DataMember, как, я думаю, из вашего кода будет необходим на стороне клиента

Вам может понадобиться, чтобы быть немного более точным, это добавление Tag к Group клиент-ы язь? Чтобы сделать это более ясным, вы должны использовать GroupProxy и TagProxy, где это необходимо. Используйте их в своем коде, и они являются теми, кто разговаривает с Сервисом WCF. Тогда должно быть очевидно, какие участники/методы им нужно вызывать и отмечать каждый из них в Контракте/Сервисе (вы также можете рассмотреть возможность разделения вашего Контракта на интерфейс, а затем сохранить фактическую реализацию в классе (который будет станьте Сервисом), который реализует этот интерфейс.

Смежные вопросы