2017-11-21 10 views
0

좋아, 나는 여기에 조금 붙어있다. 내 쿼리를 가져 와서 내 데이터를 XML로 반환 할 수 있습니다. 그건 문제가 아니야.SQL Server XML 결과, C# 및 JavaScriptSerializer()를 사용하여 JSON으로 변환 하시겠습니까?

XDocument를 만들 수 있습니다. 그건 문제가 아니야. JSON 속으로

<DATA> 
<row> 
    <PersonName>Hank Scorpio</PersonName> 
</row> 
<row> 
    <PersonName>Sgt. Pepper</PersonName> 
</row> 
<row> 
    <PersonName>Dr. Sheldon Cooper</PersonName> 
</row> 
</DATA> 

: 내가 할 수 있도록하고 싶습니다 무엇

내 XML을 켭니다. 사전을 사용하여 다음과 같이 시도했습니다.

var d = xdoc.Descendants("row") 
.ToDictionary(val => val.Element("PersonName").Name.LocalName, val => val.Element("PersonName").Value); 

하지만 계속해서 중복 값 오류가 발생했습니다.

그런 다음 사전 대신 문자열 목록을 사용하는 방법을 고려했습니다. 그래도 나는 그렇게하기를 꺼려합니다.

나는 1189 개의 레코드만을 가지고 있지만 목록의 주어진 용량으로도 너무 커지면 내 두려움에 빠질 수 있습니다.

그래서 기본적으로 나는 이런 식으로 위의 XML을 설정하려면 :

{ 
    "DATA": { 
    "row": [ 
     { "PersonName": "Hank Scorpio" }, 
     { "PersonName": "Sgt. Pepper" }, 
     { "PersonName": "Dr. Sheldon Cooper" } 
    ] 
    } 
} 

또는, 나는 그냥 가서 목록을해야 자신에게 약간의 투쟁을 저장? 이것을 위해 애플리케이션을 구축 할 때 API에 값을 전송하지만 현재 레코드의 ID도 원하는지 결정하고 있습니다. 그래서 나는 나중에 마음이 바뀌면 커다란 다시 쓸 필요가없는 해결책을 찾아 내려고 노력 중입니다.

우리는 VS2015를 사용하고 있으므로 새로운 C# 기능이 있다고 생각하지 않습니다.

어떤 생각이나 아이디어가 있습니까?

+1

당신은 여러 personname 필드가 있고 사전의 모든 키는 고유해야합니다. 그 때문에 키 오류가 중복됩니다. XML serializer를 사용하여 XML을 객체로 직렬화 한 다음 js serializer를 사용하여 json으로 직렬화하십시오. – Steve

답변

0

코드에서 모든 개별 행의 내용을 단일 사전으로 변환하려고합니다. 모든 xml 행 내용이 동일한 키인 "PersonName"을 가지므로 사전 키는 고유해야하므로 작동하지 않습니다.

당신이 정말로하고 싶은 것은 각 xml 행을 자체 사전으로 변환 한 다음 해당 사전을 목록에 넣는 것입니다. 이것이 본질적으로 원하는 JSON이 나타내는 래퍼 객체의 두 가지입니다.

var xdoc = XDocument.Parse(queryResult, LoadOptions.PreserveWhitespace); 

      var elementList = xdoc.Descendants("row").Select(r => new 
      { 
       PersonID = r.Element("PersonID").Value, 
       PersonName = r.Element("PersonName").Value 
      }).Distinct().ToList(); 

      jsonResult = new JavaScriptSerializer().Serialize(elementList); 

그리고 내 직렬화 :

var xdoc = XDocument.Parse(xml); 

var obj = new 
{ 
    DATA = new 
    { 
     row = xdoc.Root 
        .Elements("row") 
        .Select(r => r.Elements() 
           .ToDictionary(el => el.Name.LocalName, 
               el => el.Value)) 
        .ToList() 
    } 
}; 

JavaScriptSerializer jss = new JavaScriptSerializer(); 
string json = jss.Serialize(obj); 
0

이 내 직렬화 된 JSON을 얻기 위해 사용하는 것입니다 : 염두에두고

, 여기 당신이 원하는 JSON에 XML로 변환 할 방법입니다 이처럼 보였다 :

dynamic deserializedJson = new JavaScriptSerializer().Deserialize<dynamic>(result); 

그리고 이렇게 위에 반복 :

foreach (Dictionary<string, object> d in deserializedJson) 
      { 
       Console.WriteLine(d["PersonName"]); 
      }