首页 文章

如何在.NET中将C#对象转换为JSON字符串?

提问于
浏览
683

我有这样的课程:

class MyDate
{
    int year, month, day;
}

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

我想将一个 Lad 对象变成一个JSON字符串,如下所示:

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

(没有格式化) . 我找到了this link,但它使用的是一个不在.NET 4中的命名空间 . 我也听说过JSON.NET,但他们的网站目前似乎已经关闭了,我并不热衷于使用外部DLL文件 . 除了手动创建JSON字符串编写器之外还有其他选项吗?

14 回答

  • 740

    使用Json.Net库,您可以从Nuget Packet Manager下载它 .

    Serializing to 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);
    

    Deserializing to Object:

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

    使用this tools生成C#类,然后使用此代码序列化您的对象

    var json = new JavaScriptSerializer().Serialize(obj);
    
  • 0

    这里真的很有用:http://csharp2json.io/

  • 21

    使用 DataContractJsonSerializer 类:MSDN1MSDN2 .

    我的例子:HERE .

    JavaScriptSerializer 不同,它还可以安全地从JSON字符串反序列化对象 . 但我个人仍然更喜欢Json.NET .

  • 52

    Since we all love one liners

    ...这个依赖于Newtonsoft NuGet包,它比普通的串行器更受欢迎 .

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

    文件: Serializing and Deserializing JSON

  • 1

    注意使用正确的属性创建您的类:

    根据示例C#示例后跟vb.net exmpale,使用<Serializable>属性创建此类

    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;
        }
    
    }
    
    }
    

    VBNET EXAMPLE

    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
    

    结束命名空间

    第二步是创建一个简单的测试数据,如下所示:

    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
    

    这是最终的结果:

    {"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"}
    

    请记住添加对system.web.extension.dll的引用,以实现您的目标 .

  • -7

    我会投票支持ServiceStack的JSON Serializer:

    using ServiceStack.Text
    
    string jsonString = new { FirstName = "James" }.ToJson();
    

    它也是.NET最快的JSON序列化程序:http://www.servicestack.net/benchmarks/

  • 733

    Wooou!使用JSON框架真的更好:)

    这是我使用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
            }
        }
    }
    

    考试:

    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();
            }
        }
    }
    

    结果:

    {
      "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
        }
      ]
    }
    

    现在我将实现构造方法,该方法将接收JSON字符串并填充类的字段 .

  • 44

    如果它们不是很大,那么你的情况可能就是将它作为Json输出 . 这也使得所有平台都具有便携性

    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);
        }
    
  • 2

    如果您在ASP.NET MVC Web控制器中,它就像下面这样简单:

    string ladAsJson = Json(Lad);
    

    不敢相信没有人提到过这一点 .

  • 2

    这很简单,也适用于动态对象(类型对象):

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

    您可以使用JavaScriptSerializer类(添加对 System.Web.Extensions 的引用):

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

    一个完整的例子:

    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);
        }
    }
    
  • 3

    使用以下代码将XML转换为JSON .

    var json = new JavaScriptSerializer().Serialize(obj);
    
  • 2

    Serializer

    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);
            }
    }
    

    Object

    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;
        }
    }
    

    Implementation

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

    Output

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

相关问题