将json信息保存在windows store app中的对象中

时间:2015-11-24 14:12:38

标签: c# json windows-runtime windows-store-apps

在一个Windows商店应用程序项目中,我从一个Web服务器中获得了一个Json,其中包含几个看起来像这样的项目 http://paste2.org/dJP85EOJ(这是一项)

然后我有一个方法来读取json信息并使用该信息创建一个对象

public async Task createMeet(IJsonValue item, List<Meeting> listMeetings)
    {

        Meeting meeting = new Meeting();
        List<MeetingInvitee> invitees = new List<MeetingInvitee>();
        List<MeetingPoint> meetingPoints = new List<MeetingPoint>();
        MeetingsDB MeetForDB = new MeetingsDB();
        GappService gappservice = new GappService();



        try
        {

            JsonObject newMeet;
            JsonObject.TryParse(item.Stringify(), out newMeet);

            if (newMeet.ContainsKey("_id"))
                if (newMeet["_id"].ValueType != JsonValueType.Null)
                {
                    meeting.Id = newMeet["_id"].GetString();

                    MeetForDB.Id = newMeet["_id"].GetString();
                }
            if (newMeet.ContainsKey("name"))
                if (newMeet["name"].ValueType != JsonValueType.Null)
                {
                    meeting.Name = newMeet["name"].GetString();
                    MeetForDB.Name = newMeet["name"].GetString();
                }
            if (newMeet.ContainsKey("description"))
                if (newMeet["description"].ValueType != JsonValueType.Null)
                {
                    meeting.Description = newMeet["description"].GetString();
                    MeetForDB.description = newMeet["description"].GetString();
                }
            if (newMeet.ContainsKey("meetingType"))
                if (newMeet["meetingType"].ValueType != JsonValueType.Null)
                {
                    meeting.MeetingType = newMeet["meetingType"].GetString();
                    MeetForDB.meetingType = newMeet["meetingType"].GetString();
                }
            if (newMeet.ContainsKey("meetingStatus"))
                if (newMeet["meetingStatus"].ValueType != JsonValueType.Null)
                {
                    meeting.Status = newMeet["meetingStatus"].GetString();
                    MeetForDB.meetingStatus = newMeet["meetingStatus"].GetString();
                }
            if (newMeet.ContainsKey("organizer"))
                if (newMeet["organizer"].ValueType != JsonValueType.Null)
                {
                    meeting.Organizer = newMeet["organizer"].GetString();
                    MeetForDB.organizer = newMeet["organizer"].GetString();
                }
            if (newMeet.ContainsKey("alternativeOrganizer"))
                if (newMeet["alternativeOrganizer"].ValueType != JsonValueType.Null)
                {
                    meeting.AlternativeOrganizer = newMeet["alternativeOrganizer"].GetString();
                    MeetForDB.alternativeOrganizer = newMeet["alternativeOrganizer"].GetString();
                }
            if (newMeet.ContainsKey("organization"))
                if (newMeet["organization"].ValueType != JsonValueType.Null)
                {
                    meeting.Organization = newMeet["organization"].GetString();
                    MeetForDB.organization = newMeet["organization"].GetString();
                }

            if (newMeet.ContainsKey("startDate"))
                if (newMeet["startDate"].ValueType != JsonValueType.Null)
                {
                    meeting.StartDate = GetDateTime(newMeet["startDate"].GetNumber());
                    MeetForDB.startDate = newMeet["startDate"].GetNumber();
                }

                ....
}

它内部有一些嵌套的foreach,这是一个很长的方法,因此创建最终对象需要几秒钟。

我想知道的是,如果有一种方法可以直接将json信息传递给Object,而无需一次读取1个字段。

1 个答案:

答案 0 :(得分:1)

通常我会指向json.net之类的东西,但是JSON的复杂性超出了它的能力。

相反,我希望服务器返回更少或以更容易使用的方式格式化它。意图是在服务器上的一个地方进行更改可以使所有使用它的人的速度更快 如果您不控制服务器,那么您可以考虑创建自己的服务器,该服务器位于应用程序和提供内容的服务器之间。是的,可能存在与此相关的额外开发/维护/运行成本,并且由您来决定它们是否值得获益(更小,更快的下载;更简单的处理代码;更好的缓存;更快的代码/应用;还有更多......)他们带来了。