문제

LINQ를 사용하여 AJAX 호출에서 JSON으로 반환 할 데이터 목록을 특정 모양으로 구성하려고합니다.

이 데이터가 주어진다 :

var data = new List<string>();
data.Add("One");
data.Add("Two");
data.Add("Three");

그리고이 코드 : **는 정확하지 않으며 수정해야 할 것입니다 !! **

var shaped = data.Select(c =>
    new { c = c }
).ToList();

serializer.Serialize(shaped,sb);
string desiredResult = sb.ToString();

나는 원한다 desiredResult 되려고:

{
    "One": "One",
    "Two": "Two",
    "Three": "Three"
}

그러나 현재는 다음과 같습니다.

{ "c" : "One" },{ "c" : "Two" }, 등.

한 가지 문제는 객체 이니셜 라이저의 왼쪽에서 값을 원한다는 것입니다. c, 아니다 c 그 자체...

도움이 되었습니까?

해결책

성능이 아닌 정확성을 위해 제공되는 솔루션.

        List<string> data = new List<string>()
        {
            "One",
            "Two",
            "Three"
        };

        string result =
            "{ "
            +
            string.Join(", ", data
              .Select(c => @"""" + c + @""": """ + c + @"""")
              .ToArray()
            ) + " }";

다른 팁

JSON에서 "C"의 "C"는 "ONE"은 속성 이름입니다. 그리고 C# World에서는 즉시 속성 이름을 만들 수 없습니다 (System.componentModel 무시).

기본적으로, 나는 당신이 원하는 것을 할 수 있다고 생각하지 않습니다.

사용은 어떻습니까 json.net ?

다른 모든 응답이 기본적으로 잘못되었거나 불완전하기 때문에이 오래된 질문에 답장하고 있습니다.

JSON은 정말 간단하므로 기본적으로 원하는 JSON을 얻으려면 JSON 어레이의 차이점을 파악해야합니다.

["one", "two", "three"]

JSON 객체/사전 (객체 및 사전은 실제로 동일합니다) :

{"a": "one", "b": "two", "c": 3}

"C"요소는 다른 유형이지만 JavaScript에는 문제가되지 않습니다.

이것을 감안할 때, 내가 .net에서 사용하는 거의 모든 직렬 라이저 (거의 항상 위대합니다. json.net 라이브러리) .NET 객체 또는 .NET 사전을 JSON 개체로 변환합니다.

따라서 필요한 것은 목록을 사전으로 변환 한 다음 사전이나 객체로 시리얼 라이저를 공급하는 것입니다. 또 다른 질문은 왜 당신이 키와 동일한 값을 가진 사전을 갖고 싶은지이지만, 내가 모호한 경우에도 그 지점을 받아 들일 것입니다.

주어진 예 :

        List<string> source = new List<string>() { "a", "b", "c" };

        Dictionary<string, string> dict = source.ToDictionary(el => el, el => el);

        var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(dict);
        // jsonString should be "{'a':'a', 'b':'b', 'c':'c'}", with more or less whitespace depending on formatting
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top