Click here to Skip to main content
12,242,718 members (68,663 online)
Click here to Skip to main content

Tagged as

Stats

38.9K views
1.7K downloads
81 bookmarked
Posted

Small LINQ to JSON Library

, 6 Dec 2011 CPOL
A small LinqToJSON library in C#, and how it works
using System;

namespace Ranslant.JSON.Linq
{
    // use only for invalid JSON text (see specs: http://www.json.org/ )
    public class JsonException: Exception
    {
        public JsonException(string s) : base("JSON: " + s)
        { }
    }
    
    public class JsonParserException : Exception
    {
        public JsonParserException(string s) : base(s)
        { }
    }

    internal static class JExtensions
	{
        internal static char[] spaces = { ' ', '\n', '\t', '\r' };
        
        // extension method
        // at first, I had:
        //      public static string ConsumeToken(this string thisString, string token, bool removeSpaceBeforeToken, bool removeSpaceAfterToken)
        // but since removeSpaceBeforeToken and removeSpaceAfterToken were always set to true, I removed them.
        public static string ConsumeToken(this string thisString, string token)
        {
            string result = thisString;

            //if (removeSpaceBeforeToken)
            result = result.TrimStart(spaces);

            if (result.StartsWith(token))
                result = result.Remove(0, token.Length);
            else
            {
                throw new JsonParserException("token '" + token + "' not found");
            }

            //if (removeSpaceAfterToken)
                result = result.TrimStart(spaces);

            return result;
        }

        public static bool StartsWith(this byte[] thisArray, byte[] array)
        {
            int count = array.Length;
            if (count > thisArray.Length)
                return false;

            while (--count >= 0)
            {
                if (thisArray[count] != array[count])
                    return false;
            }
            return true;
        }
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Guillaume Ranslant
Software Developer IPG
Germany Germany
since 2010: C# with WPF
since 2002: C++ (MFC / QT)
since 1995: C, Java, Pascal


"if a drummer can do it, anobody can" - Bruce Dickinson

You may also be interested in...

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160426.1 | Last Updated 6 Dec 2011
Article Copyright 2011 by Guillaume Ranslant
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid