コード例 #1
0
        public static DisplayDataCollection Parse(FieldList source)
        {
            DisplayDataCollection res = new DisplayDataCollection();

            if ((source != null) && (source.Count > 0))
            {
                FieldListNavigator nav = new FieldListNavigator(source);

                if (nav.FindFirst(MessageOutFieldID.SlotDisplayDataTypeID))
                {
                    while (nav.CurrentID == (short)MessageOutFieldID.SlotDisplayDataTypeID)
                    {
                        DisplayType dt       = (DisplayType)(nav.Current.AsByte() ?? (byte)DisplayType.Null);
                        object      data     = null;
                        short?      signpost = null;

                        if ((nav.Next != null) && (nav.Next.FieldID == (short)MessageOutFieldID.SlotDisplayData))
                        {
                            switch (dt)
                            {
                            case DisplayType.Null:
                                data = null;
                                break;

                            case DisplayType.String:
                                data = nav.Next.AsString() ?? String.Empty;
                                break;

                            case DisplayType.Integer:
                                data = nav.Next.AsNumber() ?? 0;
                                break;

                            case DisplayType.ContentReference:
                            {
                                FieldList fl = nav.Next as FieldList;

                                if (fl != null)
                                {
                                    data = new ContentReference(fl);
                                }

                                break;
                            }

                            case DisplayType.MediaMetaData:
                            {
                                FieldList fl = nav.Next as FieldList;

                                if (fl != null)
                                {
                                    data = new MediaMetaData(fl);
                                }

                                break;
                            }
                            }
                        }

                        // signpost
                        if ((nav.NextNext != null) && (nav.NextNext.FieldID == (short)NaviAgentFieldID.Signpost))
                        {
                            signpost = nav.NextNext.AsShort() ?? -1;

                            if (signpost < 0)
                            {
                                signpost = null;
                            }
                        }

                        res.Add(new DisplayData(dt, data, signpost));

                        if (!nav.FindNext(MessageOutFieldID.SlotDisplayDataTypeID))
                        {
                            break;
                        }
                    }
                }
            }

            return(res);
        }