代码改变世界

TJU_SCS_C#学习笔记(8)

2015-05-11 19:59  blueContra  阅读(255)  评论(0编辑  收藏  举报

一.课堂内容

  接着上次的第22章stream讲到了23章Programming .NET and COM(什么鬼,表示完全不懂呀!),然后PPT上的内容就讲完了,然后章老师放了两个Binding有关的WP开发视频。

  我表示我当前的实验也正在研究这个binding,DataTemplate,还有Json序列化反序列化的问题,那些视频一个个看的云里雾里,不太明白怎么用啊!!!于是这么几天我都快疯了然而实验内容还卡这关键部分还没有写出来!

 

二.学习内容

  

  1.Stream

  先写一点stream的东西,关于stream这一章我尚未比较完整的去过一遍知识点,只做了一下一点练习(由于大作业我动手的比较晚,而且比较菜,所以有点焦头烂额),以下是代码片段截图:

  stream是文件和数据传输的载体,在这里stream主要在文件夹中对文件进行一些基本的复制移动重命名或者删除的操作,stream的这个用法也是我以前并没有用过的。

  以下是练习文件dir.CreateSubdirectory(newDirectory);创建出来的子目录的,并且把父目录中的文件考入子目录中的操作结果,也就是上面代码中被注释的部分代码,

  然后下面一段foreach中的代码执行了一下结果,就是把原本test目录下的1.txt重命名了一下,当然这里只是简单的示范,这段代码应该对不同类型的许多文件都起作用,

  最后在用stream把删除掉我们做过练习的文件:

  这里只是stream的一个比较另类的用法。

 

  2.关于Json文件的序列化与反序列化

  先贴一段代码:

        private async Task writeJsonAsync()
        {
            var myCars = buildObjectGraph();

            var serializer = new DataContractJsonSerializer(typeof(List<Car>));
            using (var stream = await ApplicationData.Current.LocalCacheFolder.OpenStreamForWriteAsync(
                                JSONFILENAME,
                                CreationCollisionOption.ReplaceExisting))
            {
                serializer.WriteObject(stream, myCars);
            }

            resultTextBlock.Text = "Write Succeeded";
        }

        private async Task readJsonAsync()
        {
            string content = String.Empty;

            var myStream = await ApplicationData.Current.LocalCacheFolder.OpenStreamForReadAsync(JSONFILENAME);
            using (StreamReader reader = new StreamReader(myStream))
            {
                content = await reader.ReadToEndAsync();
            }

            resultTextBlock.Text = content;
        }

        private async Task deserializeJsonAsync()
        {
            string content = String.Empty;

            List<Car> myCars;
            var jsonSerializer = new DataContractJsonSerializer(typeof(List<Car>));

            var myStream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(JSONFILENAME);

            myCars = (List<Car>)jsonSerializer.ReadObject(myStream);

            foreach (var car in myCars)
            {
                content += String.Format("ID: {0}, Make: {1}, Model: {2} ...", car.Id, car.Make, car.Model);
            }

            resultTextBlock.Text = content;
        }

  以上代码中的三个函数分别对应了对Json文件的读写和反序列化。

  代码中的buildObjectGraph()返回一个List<Car>,然后将其内容写入名为JSONFILENAME的Json文件中去,这边的DataContractJsonSerializer(typeof(List<Car>))创建以了一个可以通过流往Json文件里写内容的实例,这个流的声明也是怪复杂的

var stream = await ApplicationData.Current.LocalCacheFolder.OpenStreamForWriteAsync(
                                JSONFILENAME,
                                CreationCollisionOption.ReplaceExisting)

后面关于Json的读和这里的写大同小异,反序列化的话就是把Json文件的内容读到List中去。

  总感觉这跟我写的课程表很有关联,但我还是不太会用,可能主要是我的DataTemplate不会写。

 

三.课后感想

  最近的重心都放在写大作业上,所以博客内容比较段而且水。

  大作业表示还有很多难关需要克服,显示远比想象来的复杂得多,不到最后不能放弃,加油!

  Go ahead! C#!