Question

In: Computer Science

C# Create a console application named that creates a list of shapes, uses serialization to save...

C#

Create a console application named that creates a list of shapes, uses serialization to save it to the filesystem using XML, and then deserializes it back:

// create a list of Shapes to serialize
var listOfShapes = new List<Shape>
{
new Circle { Colour = "Red", Radius = 2.5 },
new Rectangle { Colour = "Blue", Height = 20.0, Width = 10.0 },
new Circle { Colour = "Green", Radius = 8 },
new Circle { Colour = "Purple", Radius = 12.3 },
new Rectangle { Colour = "Blue", Height = 45.0, Width = 18.0 }
};

Shapes should have a read-only property named Area so that when you deserialize, you can output a list of shapes, including their areas, as shown here:

List<Shape> loadedShapesXml = serializerXml.Deserialize(fileXml)
as List<Shape>;
foreach (Shape item in loadedShapesXml) {
WriteLine($"{item.GetType().Name} is {item.Colour} and has an
area of {item.Area}");
}

This is what your output should look like when you run the application:

Loading shapes from XML:
Circle is Red and has an area of 19.6349540849362
Rectangle is Blue and has an area of 200
Circle is Green and has an area of 201.061929829747
Circle is Purple and has an area of 475.2915525616
Rectangle is Blue and has an area of 810

Solutions

Expert Solution

Short Summary:

  • First, Implement Shape abstract class. Then extend it to Rectangle and Circle.
  • Use serialize attribute as required

Source Code:

Shape.cs File:

using System;

using System.Xml.Serialization;

namespace SerializeDemo

{

    [XmlInclude(typeof(Circle))]

    [XmlInclude(typeof(Rectangle))]

    [Serializable]

    public abstract class Shape

    {

        public string Colour { get; set; }

        public abstract double Area { get; }

    }

}

***************************************************

Circle.cs File:

using System;

namespace SerializeDemo

{

    [Serializable]

    public class Circle:Shape

    {

        public double Radius { get; set; }

        // circle Area = pi * radius^2

        public override double Area { get { return 3.14 * Radius * Radius; } }

    }

}

***************************************************

Rectangle.cs File:

using System;

namespace SerializeDemo

{

    [Serializable]

    public class Rectangle:Shape

    {

        public double Height { get; set; }

        public double Width { get; set; }

        // Rectangle Area = Height * Width

        public override double Area { get { return Height * Width; } }

    }

}

***************************************************

DemoProgram

using System;

using System.Collections.Generic;

using System.Xml.Serialization;

using System.IO;

namespace SerializeDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            string filePath = "Shapes.xml";

           

            // create a list of Shapes to serialize

            var listOfShapes = new List<Shape>

                {

                new Circle { Colour = "Red", Radius = 2.5 },

                new Rectangle { Colour = "Blue", Height = 20.0, Width = 10.0 },

                new Circle { Colour = "Green", Radius = 8 },

                new Circle { Colour = "Purple", Radius = 12.3 },

                new Rectangle { Colour = "Blue", Height = 45.0, Width = 18.0 }

                };

         

            // Serialize the object

            XmlSerializer serializerXml = new XmlSerializer(typeof(List<Shape>));

            System.IO.FileStream fileXmlSerialize = System.IO.File.Create(filePath);

            serializerXml.Serialize(fileXmlSerialize, listOfShapes);

            fileXmlSerialize.Close();

            //Deserialize the object

            using (StreamReader fileXml = new StreamReader(filePath))

            {

                List<Shape> loadedShapesXml = serializerXml.Deserialize(fileXml) as List<Shape>;

                foreach (Shape item in loadedShapesXml)

                {

                    Console.WriteLine($"{item.GetType().Name} is {item.Colour} and has an area of { item.Area}");

                }

            }

            Console.ReadLine();

        }

    }

}

Sample Run:

**************************************************************************************

Feel free to rate the answer and comment your questions, if you have any.

Please upvote the answer and appreciate our time.

Happy Studying!!!

**************************************************************************************


Related Solutions

~~~USING C# ONLY~~~ Create a console application Design a class named Person with properties for holding...
~~~USING C# ONLY~~~ Create a console application Design a class named Person with properties for holding a person’s name, address, and telephone number. Design a class named Customer, which is derived from the Person class. The Customer class should have the variables and properties for the customer number, customer email, a spentAmount of the customer’s purchases, and a Boolean variable indicating whether the customer wishes to be on a mailing list. It also includes a function named calcAmount that calculates...
C# Create a console application that prompts the user to enter a regular expression, and then...
C# Create a console application that prompts the user to enter a regular expression, and then prompts the user to enter some input and compare the two for a match until the user presses Esc: The default regular expression checks for at least one digit. Enter a regular expression (or press ENTER to use the default): ^[a- z]+$ Enter some input: apples apples matches ^[a-z]+$? True Press ESC to end or any key to try again. Enter a regular expression...
with C# create a console application project that outputs the number of bytes in memory that...
with C# create a console application project that outputs the number of bytes in memory that each of the following number types use, and the minimum and maximum values they can have: sbyte, byte, short, ushort, int, uint, long, ulong, float, double, and decimal. Try formatting the values into a nice-looking table! More Information: You can always read the documentation, available at https://docs.microsoft.com/en-us/dotnet/standard/base-types/composite-formatting for Composite Formatting to learn how to align text in a console application. Your output should look...
Create a C# console application (do not create a .NET CORE project) and name the project....
Create a C# console application (do not create a .NET CORE project) and name the project. Generate two random integers, each between 1 and 50, that you will be adding together to test the user's ability to perform the addition operator. Display the numbers in the console, such as:             7 + 22 = ? Once the user provides their answer, check to see if it is correct and if not, tell them sorry, please try again. If their answer...
Create a C# console application (do not create a .NET CORE project) and name the project...
Create a C# console application (do not create a .NET CORE project) and name the project TuitionIncrease. The college charges a full-time student $12,000 in tuition per semester. It has been announced that there will be a tuition increase by 5% each year for the next 7 years. Your application should display the projected semester tuition amount for the next 7 years in the console window in the following format:             The tuition after year 1 will be $12,600. Note:...
Create a C# console application (do not create a .NET CORE project) and name the project...
Create a C# console application (do not create a .NET CORE project) and name the project TimeToBurn. Running on a particular treadmill, you burn 3.9 calories per minute. Ask the user how many calories they wish to burn in this workout session (this is their goal). Once they tell you, output on the console after each minute, how many calories they have burned (e.g. After 1 minute, you have burned 3.9 calories). Keep outputting the total amount of calories they...
Language: C# Create a new Console Application. Your Application should ask the user to enter their...
Language: C# Create a new Console Application. Your Application should ask the user to enter their name and their salary. Your application should calculate how much they have to pay in taxes each year and output each amount as well as their net salary (the amount they bring home after taxes are paid!). The only taxes that we will consider for this Application are Federal and FICA. Your Application needs to validate all numeric input that is entered to make...
C# & ASP.NET Create a console application that prompts the user to enter a regular expression,...
C# & ASP.NET Create a console application that prompts the user to enter a regular expression, and then prompts the user to enter some input and compare the two for a match until the user presses Esc: The default regular expression checks for at least one digit. Enter a regular expression (or press ENTER to use the default): ^[a- z]+$ Enter some input: apples apples matches ^[a-z]+$? True Press ESC to end or any key to try again. Enter a...
c# Create a console application that protects an XML file, such as the following example. Note...
c# Create a console application that protects an XML file, such as the following example. Note that the customer's credit card number and password are currently stored in clear text. The credit card must be encrypted so that it can be decrypted and used later, and the password must be salted and hashed: <?xml version="1.0" encoding="utf-8" ?> <customers> <customer> <name>Bob Smith</name> <creditcard>1234-5678-9012-3456</creditcard> <password>Pa$$w0rd</password> </customer> </customers>
C# Create a console application project that outputs the number of bytes in memory that each...
C# Create a console application project that outputs the number of bytes in memory that each of the following number types use, and the minimum and maximum values they can have: sbyte, byte, short, ushort, int, uint, long, ulong, float, double, and decimal. Try formatting the values into a nice-looking table! Your output should look something like this: | Type | Bytes of Memory | Min | Max |
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT