c# - serializeobject - vb net json




Comment puis-je transformer un objet C#en une chaîne JSON dans.NET? (10)

Aussi simple que cela, fonctionne aussi bien pour les objets dynamiques (type objet):

string json = new
System.Web.Script.Serialization.JavaScriptSerializer().Serialize(MYOBJECT);

J'ai des cours comme ceux-ci:

class MyDate
{
    int year, month, day;
}

class Lad
{
    string firstName;
    string lastName;
    MyDate dateOfBirth;
}

Et je voudrais transformer un objet Lad en une chaîne JSON comme ceci:

{
    "firstName":"Markoff",
    "lastName":"Chaney",
    "dateOfBirth":
    {
        "year":"1901",
        "month":"4",
        "day":"30"
    }
}

(sans le formatage). J'ai trouvé ce lien , mais il utilise un espace de noms qui n'est pas dans .NET 4. J'ai également entendu parler de JSON.NET , mais leur site semble être en panne pour le moment, et je ne tiens pas à utiliser des fichiers DLL externes. Existe-t-il d'autres options que la création manuelle d'un éditeur de chaîne JSON?



Prenez soin de créer votre classe avec le bon attribut:

Créez cette classe avec l'attribut <Serializable> selon l'exemple Exemple C # suivi de vb.net exmpale

C #

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Script.Serialization;
namespace Samples
{
[Serializable()]
public class Customer
{


    private int _idcustomer;
    public int IDCustomer {
        get { return _idcustomer; }
        set { _idcustomer = value; }
    }


    private System.DateTime _RegistrationDate;
    public System.DateTime RegistrationDate {
        get { return _RegistrationDate; }
        set { _RegistrationDate = value; }
    }


    private string _Name;
    public string Name {
        get { return _Name; }
        set { _Name = value; }
    }


    private string _Surname;
    public string Surname {
        get { return _Surname; }
        set { _Surname = value; }
    }
}


[Serializable()]
public class Product
{


    private int _ProductID;
    public int ProductID {
        get { return _ProductID; }
        set { _ProductID = value; }
    }


    private string _ProductName;
    public string ProductName {
        get { return _ProductName; }
        set { _ProductName = value; }
    }


    private int _Price;
    public int Price {
        get { return _Price; }
        set { _Price = value; }
    }


    private bool _inStock;
    public bool inStock {
        get { return _inStock; }
        set { _inStock = value; }
    }
}


[Serializable()]
public class Order
{


    private int _OrderId;
    public int OrderID {
        get { return _OrderId; }
        set { _OrderId = value; }
    }


    private int _customerID;
    public int CustomerID {
        get { return _customerID; }
        set { _customerID = value; }
    }


    private List<Product> _ProductsList;
    public List<Product> ProductsList {
        get { return _ProductsList; }
        set { _ProductsList = value; }
    }


    private System.DateTime _PurchaseDate;
    public System.DateTime PurchaseDate {
        get { return _PurchaseDate; }
        set { _PurchaseDate = value; }
    }


    private string _PaymentMethod;
    public string PaymentMethod {
        get { return _PaymentMethod; }
        set { _PaymentMethod = value; }
    }

    public string ToJson()
    {
        string json = string.Empty;
        JavaScriptSerializer js = new JavaScriptSerializer();
        json = js.Serialize(this);
        js = null;
        return json;
    }

}

}

EXEMPLE DE VBNET

Imports System
Imports System.Web
Imports System.Web.Script.Serialization
Namespace Samples
<Serializable()>
Public Class Customer

    Private _idcustomer As Integer

    Public Property IDCustomer() As Integer
        Get
            Return _idcustomer
        End Get
        Set(ByVal value As Integer)
            _idcustomer = value
        End Set
    End Property

    Private _RegistrationDate As Date

    Public Property RegistrationDate() As Date
        Get
            Return _RegistrationDate
        End Get
        Set(ByVal value As Date)
            _RegistrationDate = value
        End Set
    End Property

    Private _Name As String

    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Private _Surname As String

    Public Property Surname() As String
        Get
            Return _Surname
        End Get
        Set(ByVal value As String)
            _Surname = value
        End Set
    End Property
End Class


<Serializable()>
Public Class Product

    Private _ProductID As Integer

    Public Property ProductID() As Integer
        Get
            Return _ProductID
        End Get
        Set(ByVal value As Integer)
            _ProductID = value
        End Set
    End Property

    Private _ProductName As String

    Public Property ProductName() As String
        Get
            Return _ProductName
        End Get
        Set(ByVal value As String)
            _ProductName = value
        End Set
    End Property

    Private _Price As Integer

    Public Property Price() As Integer
        Get
            Return _Price
        End Get
        Set(ByVal value As Integer)
            _Price = value
        End Set
    End Property

    Private _inStock As Boolean

    Public Property inStock() As Boolean
        Get
            Return _inStock
        End Get
        Set(ByVal value As Boolean)
            _inStock = value
        End Set
    End Property
End Class


<Serializable>
Public Class Order

    Private _OrderId As Integer

    Public Property OrderID() As Integer
        Get
            Return _OrderId
        End Get
        Set(ByVal value As Integer)
            _OrderId = value
        End Set
    End Property

    Private _customerID As Integer

    Public Property CustomerID() As Integer
        Get
            Return _customerID
        End Get
        Set(ByVal value As Integer)
            _customerID = value
        End Set
    End Property

    Private _ProductsList As List(Of Product)

    Public Property ProductsList() As List(Of Product)
        Get
            Return _ProductsList
        End Get
        Set(ByVal value As List(Of Product))
            _ProductsList = value
        End Set
    End Property

    Private _PurchaseDate As Date

    Public Property PurchaseDate() As Date
        Get
            Return _PurchaseDate
        End Get
        Set(ByVal value As Date)
            _PurchaseDate = value
        End Set
    End Property

    Private _PaymentMethod As String

    Public Property PaymentMethod() As String
        Get
            Return _PaymentMethod
        End Get
        Set(ByVal value As String)
            _PaymentMethod = value
        End Set
    End Property

    Public Function ToJson() As String
        Dim json As String = String.Empty
        Dim js As New JavaScriptSerializer
        json = js.Serialize(Me)
        js = Nothing
        Return json
    End Function

End Class

End Namespace

La deuxième étape consiste à créer une donnée de test simple comme ceci:

C #

  void Main() {
    List<Samples.Product> ListProducts = new List<Samples.Product>();
    ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10, .ProductID=1,.ProductName=BookOne);
    ListProducts.Add(new Samples.Product(), With, {.inStock=False,. Price=10, .ProductID=2, .ProductName=Hotels California);
    ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10,.ProductID=3,.ProductName=Cbr);
    ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10,.ProductID=4,.ProductName=Mustang);
    ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10, .ProductID=15,.ProductName=Anything);
    ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10,.ProductID=38,.ProductName=Monster Truck);
    Samples.Customer Customer = new Samples.Customer();
    // With...
    Customer.IDCustomer = 1;
    Customer.Name = "Customer1";
    Customer.RegistrationDate = Now;
    Customer.Surname = "SurnameCustomer";
    Samples.Order Order = new Samples.Order();
    // With...
    Order.CustomerID = Customer.IDCustomer;
    Order.OrderID = 1;
    Order.PaymentMethod = "PayPal";
    Order.ProductsList = ListProducts;
    Order.PurchaseDate = Now;
    Console.WriteLine(Order.ToJson);
    Console.ReadLine();
}

VB.NET

Sub Main()
    Dim ListProducts As New List(Of Samples.Product)

    ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10,
                     .ProductID = 1, .ProductName = "BookOne"})
    ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10,
                     .ProductID = 2, .ProductName = "Hotels California"})
    ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10,
                     .ProductID = 3, .ProductName = "Cbr"})
    ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10,
                     .ProductID = 4, .ProductName = "Mustang"})
    ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10,
                     .ProductID = 15, .ProductName = "Anything"})
    ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10,
                     .ProductID = 38, .ProductName = "Monster Truck"})

    Dim Customer As New Samples.Customer
    With {.IDCustomer = 1, .Name = "Customer1",.RegistrationDate = Now, .Surname  ="SurnameCustomer"}

    Dim Order As New Samples.Order With {
        .CustomerID = Customer.IDCustomer,
        .OrderID =       1,
        .PaymentMethod = "PayPal",
        .ProductsList = ListProducts,
        .PurchaseDate = Now
    }
    Console.WriteLine(Order.ToJson)
    Console.ReadLine()
End Sub

Et voici le résultat final:

{"OrderID":1,"CustomerID":1,"ProductsList":[{"ProductID":1,"ProductName":"BookOn
 e","Price":10,"inStock":false},{"ProductID":2,"ProductName":"Hotels California",
 "Price":10,"inStock":false},{"ProductID":3,"ProductName":"Cbr","Price":10,"inSto
 ck":false},{"ProductID":4,"ProductName":"Mustang","Price":10,"inStock":false},{"
 ProductID":15,"ProductName":"Anything","Price":10,"inStock":false},{"ProductID":
 38,"ProductName":"Monster Truck","Price":10,"inStock":false}],"PurchaseDate":"\/
 Date(1396642206155)\/","PaymentMethod":"PayPal"}

N'oubliez pas d'ajouter une référence à system.web.extension.dll afin de réaliser votre objectif.


S'ils ne sont pas très gros, ce qui est probablement votre cas l'exporter comme Json. Aussi cela rend portable parmi toutes les plateformes

 using Newtonsoft.Json;
     [TestMethod]
        public void ExportJson()
        {
        double[,] b = new double[,] {
            { 110, 120, 130, 140, 150 },
            { 1110, 1120, 1130, 1140, 1150 },
            { 1000, 1, 5 ,9, 1000},
            {1110, 2, 6 ,10,1110},
            {1220, 3, 7 ,11,1220},
            {1330, 4, 8 ,12,1330} };


        string jsonStr = JsonConvert.SerializeObject(b);

        Console.WriteLine(jsonStr);

        string path = "X:\\Programming\\workspaceEclipse\\PyTutorials\\src\\tensorflow_tutorials\\export.txt";

        File.WriteAllText(path, jsonStr);
    }

Utilisez la bibliothèque Json.Net , vous pouvez la télécharger depuis Nuget Packet Manager.

Sérialisation à Json String:

 var obj = new Lad
        {
            firstName = "Markoff",
            lastName = "Chaney",
            dateOfBirth = new MyDate
            {
                year = 1901,
                month = 4,
                day = 30
            }
        };

var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);

Désérialisation d'un objet:

var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Lad>(jsonString );

Utilisez la classe DataContractJsonSerializer : MSDN1 , MSDN2 .

Mon exemple: HERE

Il peut également désérialiser en toute sécurité les objets d'une chaîne JSON, contrairement à JavaScriptSerializer . Mais personnellement, je préfère toujours Json.NET .


Vous pouvez utiliser la classe msdn.microsoft.com/en-us/library/… (ajouter une référence à System.Web.Extensions ):

using System.Web.Script.Serialization;
var json = new JavaScriptSerializer().Serialize(obj);

Un exemple complet:

using System;
using System.Web.Script.Serialization;

public class MyDate
{
    public int year;
    public int month;
    public int day;
}

public class Lad
{
    public string firstName;
    public string lastName;
    public MyDate dateOfBirth;
}

class Program
{
    static void Main()
    {
        var obj = new Lad
        {
            firstName = "Markoff",
            lastName = "Chaney",
            dateOfBirth = new MyDate
            {
                year = 1901,
                month = 4,
                day = 30
            }
        };
        var json = new JavaScriptSerializer().Serialize(obj);
        Console.WriteLine(json);
    }
}

Wooou! Vraiment mieux en utilisant un framework JSON :)

Voici mon exemple utilisant Json.NET ( http://james.newtonking.com/json ):

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using System.IO;

namespace com.blogspot.jeanjmichel.jsontest.model
{
    public class Contact
    {
        private Int64 id;
        private String name;
        List<Address> addresses;

        public Int64 Id
        {
            set { this.id = value; }
            get { return this.id; }
        }

        public String Name
        {
            set { this.name = value; }
            get { return this.name; }
        }

        public List<Address> Addresses
        {
            set { this.addresses = value; }
            get { return this.addresses; }
        }

        public String ToJSONRepresentation()
        {
            StringBuilder sb = new StringBuilder();
            JsonWriter jw = new JsonTextWriter(new StringWriter(sb));

            jw.Formatting = Formatting.Indented;
            jw.WriteStartObject();
            jw.WritePropertyName("id");
            jw.WriteValue(this.Id);
            jw.WritePropertyName("name");
            jw.WriteValue(this.Name);

            jw.WritePropertyName("addresses");
            jw.WriteStartArray();

            int i;
            i = 0;

            for (i = 0; i < addresses.Count; i++)
            {
                jw.WriteStartObject();
                jw.WritePropertyName("id");
                jw.WriteValue(addresses[i].Id);
                jw.WritePropertyName("streetAddress");
                jw.WriteValue(addresses[i].StreetAddress);
                jw.WritePropertyName("complement");
                jw.WriteValue(addresses[i].Complement);
                jw.WritePropertyName("city");
                jw.WriteValue(addresses[i].City);
                jw.WritePropertyName("province");
                jw.WriteValue(addresses[i].Province);
                jw.WritePropertyName("country");
                jw.WriteValue(addresses[i].Country);
                jw.WritePropertyName("postalCode");
                jw.WriteValue(addresses[i].PostalCode);
                jw.WriteEndObject();
            }

            jw.WriteEndArray();

            jw.WriteEndObject();

            return sb.ToString();
        }

        public Contact()
        {
        }

        public Contact(Int64 id, String personName, List<Address> addresses)
        {
            this.id = id;
            this.name = personName;
            this.addresses = addresses;
        }

        public Contact(String JSONRepresentation)
        {
            //To do
        }
    }
}

Le test:

using System;
using System.Collections.Generic;
using com.blogspot.jeanjmichel.jsontest.model;

namespace com.blogspot.jeanjmichel.jsontest.main
{
    public class Program
    {
        static void Main(string[] args)
        {
            List<Address> addresses = new List<Address>();
            addresses.Add(new Address(1, "Rua Dr. Fernandes Coelho, 85", "15º andar", "São Paulo", "São Paulo", "Brazil", "05423040"));
            addresses.Add(new Address(2, "Avenida Senador Teotônio Vilela, 241", null, "São Paulo", "São Paulo", "Brazil", null));

            Contact contact = new Contact(1, "Ayrton Senna", addresses);

            Console.WriteLine(contact.ToJSONRepresentation());
            Console.ReadKey();
        }
    }
}

Le résultat:

{
  "id": 1,
  "name": "Ayrton Senna",
  "addresses": [
    {
      "id": 1,
      "streetAddress": "Rua Dr. Fernandes Coelho, 85",
      "complement": "15º andar",
      "city": "São Paulo",
      "province": "São Paulo",
      "country": "Brazil",
      "postalCode": "05423040"
    },
    {
      "id": 2,
      "streetAddress": "Avenida Senador Teotônio Vilela, 241",
      "complement": null,
      "city": "São Paulo",
      "province": "São Paulo",
      "country": "Brazil",
      "postalCode": null
    }
  ]
}

Maintenant, je vais implémenter la méthode constructeur qui va recevoir une chaîne JSON et remplit les champs de la classe.


Puisque nous aimons tous les doublures

... celui-ci dépend du paquet Newtonsoft NuGet, qui est populaire et meilleur que le sérialiseur par défaut.

Newtonsoft.Json.JsonConvert.SerializeObject(new {foo = "bar"})

Documentation: Sérialisation et désérialisation de JSON


Sérialiseur

 public static void WriteToJsonFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
        var contentsToWriteToFile = JsonConvert.SerializeObject(objectToWrite, new JsonSerializerSettings
        {
            Formatting = Formatting.Indented,
        });
        using (var writer = new StreamWriter(filePath, append))
        {
            writer.Write(contentsToWriteToFile);
        }
}

Objet

namespace MyConfig
{
    public class AppConfigurationSettings
    {
        public AppConfigurationSettings()
        {
            /* initialize the object if you want to output a new document
             * for use as a template or default settings possibly when 
             * an app is started.
             */
            if (AppSettings == null) { AppSettings=new AppSettings();}
        }

        public AppSettings AppSettings { get; set; }
    }

    public class AppSettings
    {
        public bool DebugMode { get; set; } = false;
    }
}

la mise en oeuvre

var jsonObject = new AppConfigurationSettings();
WriteToJsonFile<AppConfigurationSettings>(file.FullName, jsonObject);

Sortie

{
  "AppSettings": {
    "DebugMode": false
  }
}






serialization