开发者

JSON.NET writing invalid JSON?

开发者 https://www.devze.com 2023-01-24 16:11 出处:网络
It appears that JSON.NET is writing invalid JSON, although I wouldn\'t be surprised if it was due to my misuse.

It appears that JSON.NET is writing invalid JSON, although I wouldn't be surprised if it was due to my misuse.

It appears that it is repeating the last few characters of JSON:

/* ... */ "Teaser":"\nfoo.\n","Title":"bar","ImageSrc":null,"Nid":44462,"Vid":17}]}4462,"Vid":17}]}

The repeating string is:

4462,"Vid":17}]}

I printed it out to the console, so I don't think this is a bug in Visual Studio's text visualizer.

The serialization code:

       static IDictionary<int, ObservableCollection<Story>> _sectionStories;
       private static void writeToFile()
        {
            IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
            using (IsolatedStorageFileStream stream = storage.OpenFile(STORIES_FILE, FileMode.OpenOrCreate))
            {
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.Write(JsonConvert.SerializeObject(_sectionStories));
                }

            }

#if DEBUG
            Str开发者_StackOverflow中文版eamReader reader = new StreamReader(storage.OpenFile(STORIES_FILE, FileMode.Open));
            string contents = reader.ReadToEnd();

            JObject data = JObject.Parse(contents);
            string result = "";
            foreach (char c in contents.Skip(contents.Length - 20))
            {
                result += c;
            }
            Debug.WriteLine(result);

            // crashes here with ArgumentException
            // perhaps because JSON is invalid?
            var foo = JsonConvert.DeserializeObject<Dictionary<int, List<Story>>>(contents);
#endif
        }

Am I doing something wrong here? Or is this a bug? Are there any known workarounds?

Curiously, JObject.Parse() doesn't throw any errors.

I'm building a Silverlight app for Windows Phone 7.


When writing the file you specify

FileMode.OpenOrCreate

If the file exists and is 16 bytes longer than the data you intend to write to it (from an older version of your data that just happens to end with the exact same data) then that data will still be present when you're done writing your new data.

Solution:

FileMode.Create 

From: http://msdn.microsoft.com/en-us/library/system.io.filemode.aspx

FileMode.Create: Specifies that the operating system should create a new file. If the file already exists, it will be overwritten

0

上一篇:

:下一篇

精彩评论

暂无评论...
验证码 换一张
取 消