c# web - C#を使用して.NETでフォーマットされたJSONを取得するにはどうすればよいですか?




4 Answers

JavaScriptSerializerでこれを達成するのは苦労します。

JSON.Net試してみてください。

JSON.Netの例からのわずかな変更

using System;
using Newtonsoft.Json;

namespace JsonPrettyPrint
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Product product = new Product
                {
                    Name = "Apple",
                    Expiry = new DateTime(2008, 12, 28),
                    Price = 3.99M,
                    Sizes = new[] { "Small", "Medium", "Large" }
                };

            string json = JsonConvert.SerializeObject(product, Formatting.Indented);
            Console.WriteLine(json);

            Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);
        }
    }

    internal class Product
    {
        public String[] Sizes { get; set; }
        public decimal Price { get; set; }
        public DateTime Expiry { get; set; }
        public string Name { get; set; }
    }
}

結果

{
  "Sizes": [
    "Small",
    "Medium",
    "Large"
  ],
  "Price": 3.99,
  "Expiry": "\/Date(1230447600000-0700)\/",
  "Name": "Apple"
}

ドキュメント: オブジェクトのシリアル化

documents github

私は.NET JSONパーサーを使用しており、設定ファイルをシリアル化して読み取り可能にしたいと考えています。 だから代わりに:

{"blah":"v", "blah2":"v2"}

私は好きなものが好きです:

{
    "blah":"v", 
    "blah2":"v2"
}

私のコードは次のようなものです:

using System.Web.Script.Serialization; 

var ser = new JavaScriptSerializer();
configSz = ser.Serialize(config);
using (var f = (TextWriter)File.CreateText(configFn))
{
    f.WriteLine(configSz);
    f.Close();
}



あなたがJSON文字列を持っていてそれを "あらかじめ"明示したいが、それを既知のC#型との間で直列化したくないのであれば、JSON.NETを使って次のことができます:

using System;
using System.IO;
using Newtonsoft.Json;

class JsonUtil
{
    public static string JsonPrettify(string json)
    {
        using (var stringReader = new StringReader(json))
        using (var stringWriter = new StringWriter())
        {
            var jsonReader = new JsonTextReader(stringReader);
            var jsonWriter = new JsonTextWriter(stringWriter) { Formatting = Formatting.Indented };
            jsonWriter.WriteToken(jsonReader);
            return stringWriter.ToString();
        }
    }
}



Newtonsoft.Jsonを使用してNewtonsoft.Json

string prettyJson = JToken.Parse(uglyJsonString).ToString(Formatting.Indented);



まずDuncan Smartの投稿にコメントを追加したいと思いましたが、残念ながらまだコメントを残すほどの評判はありません。 だからここで試してみる。

私は副作用について警告したいだけです。

JsonTextReaderはjsonを内部的に解析して型付きのJTokensにし、それを元に戻します。

たとえば、オリジナルのJSONが

 { "double":0.00002, "date":"\/Date(1198908717056)\/"}

あなたが肯定した後に得る

{ 
    "double":2E-05,
    "date": "2007-12-29T06:11:57.056Z"
}

もちろん、両方のjson文字列は等価であり、構造的に等しいオブジェクトに逆直列化されますが、元の文字列値を保持する必要がある場合は、これを概説にする必要があります




Related

c# .net json

Tags

c#   .net   json