JSON을 사용하지 않고 JSON을 해석하는 방법NET 라이브러리?
Visual Studio 2011에서 Windows 8용 메트로 응용 프로그램을 구축하려고 하는데, 이 작업을 수행하는 동안 해석 방법에 문제가 있습니다.JSON
없이.JSON.NET
라이브러리(아직 메트로 애플리케이션을 지원하지 않습니다).
어쨌든, 이것을 해석하고 싶다.
{
"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"
}
시스템에 있는 클래스를 사용할 수 있습니다.에 추가된 Json 네임스페이스.NET 4.5시스템에 대한 참조를 추가해야 합니다.런타임시리얼라이제이션어셈블리
Json Value.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"]);
클래스는 시스템에서 발견된 클래스와 매우 유사합니다.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;
서드파티제의 의존관계나 nuget이 없는 JSON 시리얼라이저와 디시리얼라이저가 필요했기 때문에 오래된 시스템을 지원할 수 있으므로 Newtonsoft를 선택할 필요가 없습니다.Json, 시스템.타겟 플랫폼에 따라 Text.Json, DataContractSerializer, JavaScriptSerializer 등
여기서 오픈소스(MIT) 프로젝트를 시작했습니다.
https://github.com/smourier/ZeroDepJson
C# 파일 1개뿐입니다.ZeroDepJson.cs
와 호환성이 있습니다.NET Framework 4.x에서로의NET Core 및.넷 5
상기 모든 라이브러리(특히 퍼포먼스 영역)에 비해서는 그다지 좋지 않을 수 있지만, 비교적 양호하고 마찰이 없습니다.
사용해보셨습니까?JavaScriptSerializer
또 다른 것도 있습니다.DataContractJsonSerializer
그렇게 오래전에 작은 구문을 썼는데 네임스페이스가 필요해요.사용하다DataContractJsonSerializer
object
JConvert
.
소규모 데이터 집합에서 작동하지만 빅 데이터 소스에서 테스트한 적은 없습니다.
JsonHelper.cs
// Json Serializer without NewtonSoft
public static class JsonHelper
{
public static R JConvert<P,R>(this P t)
{
if(typeof(P) == typeof(string))
{
var return1 = (R)(JsonDeserializer<R>(t as string));
return return1;
}
else
{
var return2 = (JsonSerializer<P>(t));
R result = (R)Convert.ChangeType(return2, typeof(R));
return result;
}
}
private static String JsonSerializer<T>(T t)
{
var stream1 = new MemoryStream();
var ser = new DataContractJsonSerializer(typeof(T));
ser.WriteObject(stream1, t);
stream1.Position = 0;
var sr = new StreamReader(stream1);
return (sr.ReadToEnd());
}
private static T JsonDeserializer<T>(string jsonString)
{
T deserializedUser = default(T);
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
var ser = new DataContractJsonSerializer(typeof(T));
deserializedUser = (T)ser.ReadObject(ms);// as T;
ms.Close();
return deserializedUser;
}
}
구문:
「 」를 JsonHelper
할 가 있다
JConvert<string,object>(str); //to Parse string to non anonymous <object>
JConvert<object,string>(obj); //to convert <obj> to string
예:
를 들어, 가정해 보겠습니다.person
public class person
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
var obj = new person();//"vinod","srivastav");
obj.FirstName = "vinod";
obj.LastName = "srivastav";
「」를 person
" " " " " : "
var asText = JsonHelper.JConvert<person,string>(obj); //to convert <obj> to string
var asObject = JsonHelper.JConvert<string,person>(asText); //to convert string to non-anonymous object
하시면 됩니다.DataContractJsonSerializer
자세한 내용은 이 링크를 참조하십시오.
using System;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
namespace OTL
{
/// <summary>
/// Before usage: Define your class, sample:
/// [DataContract]
///public class MusicInfo
///{
/// [DataMember(Name="music_name")]
/// public string Name { get; set; }
/// [DataMember]
/// public string Artist{get; set;}
///}
/// </summary>
/// <typeparam name="T"></typeparam>
public class OTLJSON<T> where T : class
{
/// <summary>
/// Serializes an object to JSON
/// Usage: string serialized = OTLJSON<MusicInfo>.Serialize(musicInfo);
/// </summary>
/// <param name="instance"></param>
/// <returns></returns>
public static string Serialize(T instance)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var stream = new MemoryStream())
{
serializer.WriteObject(stream, instance);
return Encoding.Default.GetString(stream.ToArray());
}
}
/// <summary>
/// DeSerializes an object from JSON
/// Usage: MusicInfo deserialized = OTLJSON<MusicInfo>.Deserialize(json);
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static T Deserialize(string json)
{
if (string.IsNullOrEmpty(json))
throw new Exception("Json can't empty");
else
try
{
using (var stream = new MemoryStream(Encoding.Default.GetBytes(json)))
{
var serializer = new DataContractJsonSerializer(typeof(T));
return serializer.ReadObject(stream) as T;
}
}
catch (Exception e)
{
throw new Exception("Json can't convert to Object because it isn't correct format.");
}
}
}
}
언급URL : https://stackoverflow.com/questions/9573119/how-to-parse-json-without-json-net-library
'programing' 카테고리의 다른 글
외부에서 React 구성 요소 메서드를 호출합니다. (0) | 2023.03.28 |
---|---|
반응 + 환원 - 입력에 상태 값이 있을 때 입력 onChange가 매우 느립니다. (0) | 2023.03.28 |
node_modules를 별도의 브라우저에 포함하는 방법벤더 번들 (0) | 2023.03.28 |
Sublime Text - JSON 포맷터 바로가기 (0) | 2023.03.28 |
React의 HashRouter와 BrowserRouter의 차이점은 무엇입니까? (0) | 2023.03.28 |