답변:
당신은 사용할 수 JavaScriptSerializer 클래스를 확인, 이 기사를 유용한 확장 방법을 구축 할 수 있습니다.
기사의 코드 :
namespace ExtensionMethods
{
public static class JSONHelper
{
public static string ToJSON(this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public static string ToJSON(this object obj, int recursionDepth)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RecursionLimit = recursionDepth;
return serializer.Serialize(obj);
}
}
}
용법:
using ExtensionMethods;
...
List<Person> people = new List<Person>{
new Person{ID = 1, FirstName = "Scott", LastName = "Gurthie"},
new Person{ID = 2, FirstName = "Bill", LastName = "Gates"}
};
string jsonString = people.ToJSON();
Newtonsoft.Json 을 사용하면 훨씬 쉬워집니다.
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string json = JsonConvert.SerializeObject(product);
설명서 : JSON 직렬화 및 역 직렬화
string json = JsonConvert.SerializeObject(new { "PropertyA" = obj.PropertyA });
.
"PropertyA"
수 PropertyA
?
string json = JsonConvert.SerializeObject(new { PropertyA = obj.PropertyA });
큰 따옴표없이PropertyA.
이 라이브러리는 C #의 JSON에 매우 적합합니다.
Newtonsoft.Json 및 Newtonsoft.Json.Linq 라이브러리 사용을 단순화 합니다.
//Create my object
var my_jsondata = new
{
Host = @"sftp.myhost.gr",
UserName = "my_username",
Password = "my_password",
SourceDir = "/export/zip/mypath/",
FileName = "my_file.zip"
};
//Tranform it to Json object
string json_data = JsonConvert.SerializeObject(my_jsondata);
//Print the Json object
Console.WriteLine(json_data);
//Parse the json object
JObject json_object = JObject.Parse(json_data);
//Print the parsed Json object
Console.WriteLine((string)json_object["Host"]);
Console.WriteLine((string)json_object["UserName"]);
Console.WriteLine((string)json_object["Password"]);
Console.WriteLine((string)json_object["SourceDir"]);
Console.WriteLine((string)json_object["FileName"]);
이 코드 조각은 .NET 3.5의 System.Runtime.Serialization.Json의 DataContractJsonSerializer를 사용합니다.
public static string ToJson<T>(/* this */ T value, Encoding encoding)
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var stream = new MemoryStream())
{
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, encoding))
{
serializer.WriteObject(writer, value);
}
return encoding.GetString(stream.ToArray());
}
}
json-net.aspx 프로젝트 는 http://www.codeplex.com/json/ 을 참조하십시오 . 왜 바퀴를 재발 명합니까?
내 ServiceStack JsonSerializer 는 현재 가장 빠른 .NET JSON 직렬 변환기 입니다. DataContracts, 모든 POCO 유형, 인터페이스, 익명 유형을 포함한 후기 바인딩 된 객체 등의 직렬화를 지원합니다.
기본 예
var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
참고 : 다른 JSON 직렬 변환기보다 최대 40x-100x 느리기 때문에 벤치 마크에서 제외해야하므로 성능이 중요하지 않은 경우 Microsoft JavaScriptSerializer 만 사용하십시오 .
복잡한 결과가 필요한 경우 (임베디드) 고유 한 구조를 만듭니다.
class templateRequest
{
public String[] registration_ids;
public Data data;
public class Data
{
public String message;
public String tickerText;
public String contentTitle;
public Data(String message, String tickerText, string contentTitle)
{
this.message = message;
this.tickerText = tickerText;
this.contentTitle = contentTitle;
}
};
}
그런 다음 호출하여 JSON 문자열을 얻을 수 있습니다
List<String> ids = new List<string>() { "id1", "id2" };
templateRequest request = new templeteRequest();
request.registration_ids = ids.ToArray();
request.data = new templateRequest.Data("Your message", "Your ticker", "Your content");
string json = new JavaScriptSerializer().Serialize(request);
결과는 다음과 같습니다.
json = "{\"registration_ids\":[\"id1\",\"id2\"],\"data\":{\"message\":\"Your message\",\"tickerText\":\"Your ticket\",\"contentTitle\":\"Your content\"}}"
그것이 도움이되기를 바랍니다!
두 개의 내장 JSON 시리얼 라이저 ( JavaScriptSerializer 및 DataContractJsonSerializer ) 를 사용할 수 없거나 사용하고 싶지 않은 경우 JsonExSerializer 라이브러리를 사용해 볼 수 있습니다 -여러 프로젝트에서 사용하며 아주 잘 작동합니다.
JSON을 통해 데이터를 웹 페이지에 제공하는 웹 서비스를 작성하려는 경우 ASP.NET Ajax 툴킷 사용을 고려하십시오.
http://www.asp.net/learn/ajax/tutorial-05-cs.aspx
웹 서비스를 통해 제공되는 객체를 자동으로 json으로 변환하고 연결하는 데 사용할 수있는 프록시 클래스를 만듭니다.
DataContractJSONSerializer는 XmlSerializer를 같은 쉬운 당신을 위해 모든 것을 할 것입니다. 웹 앱에서 이것을 사용하는 것은 간단합니다. WCF를 사용하는 경우 속성과 함께 사용을 지정할 수 있습니다. DataContractSerializer 제품군도 매우 빠릅니다.
시리얼 라이저가 전혀 필요하지 않다는 것을 알았습니다. 객체를 List로 반환하는 경우 예를 들어 보겠습니다.
asmx에서 전달한 변수를 사용하여 데이터를 얻습니다.
// return data
[WebMethod(CacheDuration = 180)]
public List<latlon> GetData(int id)
{
var data = from p in db.property
where p.id == id
select new latlon
{
lat = p.lat,
lon = p.lon
};
return data.ToList();
}
public class latlon
{
public string lat { get; set; }
public string lon { get; set; }
}
그런 다음 jquery를 사용하여 해당 변수를 전달하여 서비스에 액세스합니다.
// get latlon
function getlatlon(propertyid) {
var mydata;
$.ajax({
url: "getData.asmx/GetLatLon",
type: "POST",
data: "{'id': '" + propertyid + "'}",
async: false,
contentType: "application/json;",
dataType: "json",
success: function (data, textStatus, jqXHR) { //
mydata = data;
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
console.log(xmlHttpRequest.responseText);
console.log(textStatus);
console.log(errorThrown);
}
});
return mydata;
}
// call the function with your data
latlondata = getlatlon(id);
그리고 우리는 우리의 응답을 얻습니다.
{"d":[{"__type":"MapData+latlon","lat":"40.7031420","lon":"-80.6047970}]}
사용 인코딩
JSON 배열에 대한 간단한 객체 EncodeJsObjectArray ()
public class dummyObject
{
public string fake { get; set; }
public int id { get; set; }
public dummyObject()
{
fake = "dummy";
id = 5;
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append('[');
sb.Append(id);
sb.Append(',');
sb.Append(JSONEncoders.EncodeJsString(fake));
sb.Append(']');
return sb.ToString();
}
}
dummyObject[] dummys = new dummyObject[2];
dummys[0] = new dummyObject();
dummys[1] = new dummyObject();
dummys[0].fake = "mike";
dummys[0].id = 29;
string result = JSONEncoders.EncodeJsObjectArray(dummys);
결과 : [[29, "mike"], [5, "dummy"]]
예쁜 사용법
Pretty Print JSON 배열 PrettyPrintJson () 문자열 확장 방법
string input = "[14,4,[14,\"data\"],[[5,\"10.186.122.15\"],[6,\"10.186.122.16\"]]]";
string result = input.PrettyPrintJson();
결과는 다음과 같습니다
[
14,
4,
[
14,
"data"
],
[
[
5,
"10.186.122.15"
],
[
6,
"10.186.122.16"
]
]
]