developer tip

JSON.NET 라이브러리없이 JSON을 구문 분석하는 방법은 무엇입니까?

copycodes 2020. 11. 4. 08:06
반응형

JSON.NET 라이브러리없이 JSON을 구문 분석하는 방법은 무엇입니까?


Visual Studio 2011에서 Windows 8 용 Metro 응용 프로그램을 빌드하려고합니다. 그렇게하려고하는 동안 라이브러리 JSON없이 구문 분석하는 방법에 대한 몇 가지 문제가 JSON.NET있습니다 (아직 Metro 응용 프로그램을 지원하지 않음). .

어쨌든, 나는 이것을 파싱하고 싶다.

{
   "name":"Prince Charming",
   "artist":"Metallica",
   "genre":"Rock and Metal",
   "album":"Reload",
   "album_image":"http:\/\/up203.siz.co.il\/up2\/u2zzzw4mjayz.png",
   "link":"http:\/\/f2h.co.il\/7779182246886"
}

.NET 4.5에 추가 된 System.Json 네임 스페이스에 있는 클래스를 사용할 수 있습니다 . System.Runtime.Serialization 어셈블리에 대한 참조를 추가해야합니다.

JsonValue.Parse () 메소드는 JSON 텍스트를 구문 분석하고 반환 JsonValue를 :

JsonValue value = JsonValue.Parse(@"{ ""name"":""Prince Charming"", ...");

JSON 객체와 함께 문자열을 전달하면 값을 JsonObject 로 캐스팅 할 수 있어야합니다 .

using System.Json;


JsonObject result = value as JsonObject;

Console.WriteLine("Name .... {0}", (string)result["name"]);
Console.WriteLine("Artist .. {0}", (string)result["artist"]);
Console.WriteLine("Genre ... {0}", (string)result["genre"]);
Console.WriteLine("Album ... {0}", (string)result["album"]);

클래스는 System.Xml.Linq 네임 스페이스 에있는 것과 매우 유사합니다 .


나는 이것을 사용하지만 메트로 앱 개발을 한 적이 없으므로 사용 가능한 라이브러리에 대한 제한 사항을 알지 못합니다. (참고, DataContract 및 DataMember 속성으로 클래스를 표시해야합니다)

public static class JSONSerializer<TType> where TType : class
{
    /// <summary>
    /// Serializes an object to JSON
    /// </summary>
    public static string Serialize(TType instance)
    {
        var serializer = new DataContractJsonSerializer(typeof(TType));
        using (var stream = new MemoryStream())
        {
            serializer.WriteObject(stream, instance);
            return Encoding.Default.GetString(stream.ToArray());
        }
    }

    /// <summary>
    /// DeSerializes an object from JSON
    /// </summary>
    public static TType DeSerialize(string json)
    {
        using (var stream = new MemoryStream(Encoding.Default.GetBytes(json)))
        {
            var serializer = new DataContractJsonSerializer(typeof(TType));
            return serializer.ReadObject(stream) as TType;
        }
    }
}

그래서 이런 수업이 있다면 ...

[DataContract]
public class MusicInfo
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Artist { get; set; }

    [DataMember]
    public string Genre { get; set; }

    [DataMember]
    public string Album { get; set; }

    [DataMember]
    public string AlbumImage { get; set; }

    [DataMember]
    public string Link { get; set; }

}

그러면 이렇게 사용합니다 ...

var musicInfo = new MusicInfo
{
     Name = "Prince Charming",
     Artist = "Metallica",
     Genre = "Rock and Metal",
     Album = "Reload",
     AlbumImage = "http://up203.siz.co.il/up2/u2zzzw4mjayz.png",
     Link = "http://f2h.co.il/7779182246886"
};

// This will produce a JSON String
var serialized = JSONSerializer<MusicInfo>.Serialize(musicInfo);

// This will produce a copy of the instance you created earlier
var deserialized = JSONSerializer<MusicInfo>.DeSerialize(serialized);

4.5가없는 분들을 위해 json을 읽는 라이브러리 기능이 있습니다. 에 대한 프로젝트 참조가 필요합니다 System.Web.Extensions.

using System.Web.Script.Serialization;

public object DeserializeJson<T>(string Json)
{
    JavaScriptSerializer JavaScriptSerializer = new JavaScriptSerializer();
    return JavaScriptSerializer.Deserialize<T>(Json);
}

일반적으로 json은 계약에 따라 작성됩니다. 해당 계약은 일반적으로 클래스 ( T) 로 코드화 될 수 있습니다 . 때로는 json에서 단어를 가져와 객체 브라우저를 검색하여 해당 유형을 찾을 수 있습니다.

사용 예 :

json을 감안할 때

{"logEntries":[],"value":"My Code","text":"My Text","enabled":true,"checkedIndices":[],"checkedItemsTextOverflows":false}

다음 RadComboBoxClientState과 같이 객체 로 구문 분석 할 수 있습니다 .

string ClientStateJson = Page.Request.Form("ReportGrid1_cboReportType_ClientState");
RadComboBoxClientState RadComboBoxClientState = DeserializeJson<RadComboBoxClientState>(ClientStateJson);
return RadComboBoxClientState.Value;

Have you tried using JavaScriptSerializer ? There's also DataContractJsonSerializer


You can use DataContractJsonSerializer. See this link for more details.


I have released a .NET library called Tiferix.Json that allows you to serialize and deserialize Json files to and from ADO.Net DataSet and DataTable objects. This project is a work in progress and in the next 6 months (hopefully) I will expand the functionality to allow serialization of various types of .Net classes and objects, including dynamic classes and anonymous types. As of now, the Tiferix.Json library doesn't have a raw JsonDataReader, but it has a fairly powerful JsonDataWriter class that can write Json files in the same type of manner of a .NET Binary or StreamWriter. The JsonDataWriter of the Tiferix.Json library also has the ability to auto-ident your Json files, which is a very useful feature I have not seen in any other Json library, including Json.Net.

If you are interested you can view the Tiferix.Json project on my Github page and download the libraries and dlls. The Tiferix.Json offers a much simpler, lightweight alternative to the more comprehensive Json.Net library and is also less rigid and easier to use (in my opinion) than the native .Net Json classes.

Tiferix Json Library

참고URL : https://stackoverflow.com/questions/9573119/how-to-parse-json-without-json-net-library

반응형