2017-10-02 12 views
-1

나는이 MSSQL 데이터베이스에서 테이블을 나타내는 다음과 같은 클래스 :변환 문자열을 JSON 속성은 웹 API 호출에 개체에

public string firstname { get; set; } 
public string lastname { get; set; } 
public string events { get; set; } 

'이벤트'속성이 실제로 JSON의 배열에 저장하기 전에 직렬화 된 오브젝트한다 탁자. 예 행 : 나는 닮은 JSON 형식의 웹 API 호출에서이 테이블의 내용을 반환해야

FirstName: Test 
LastName: User 
Events: [{"eventname":"event1","eventtype":"1"},{"eventname":"event2","eventtype":"2"}] 

:이 작업을 수행 할 때

[{ 
    "firstname":"Test", 
    "lastname":"User", 
    "Events":[{"eventname":"event1","eventtype":"1"},{"eventname":"event2","eventtype":"2"}] 
}, 
{...}] 

문제이며, 이벤트가 JSON 속성 이스케이프됩니다 이 같은 하나의 문자열로 나온다 :

분명히
[{ 
    "firstname":"Test", 
    "lastname":"User", 
    "Events":"[{\"eventname\":\"event1\",\"eventtype\":\"1\"},{\"eventname\":\"event2\",\"eventtype\":\"2\"}] 
}, 
{...}]" 

이벤트 속성의 클래스가 변수지만 루프 THR하지 않고 그것에 대해 무엇을 할 수 있는지 확실하지 문자열입니다 때문입니다 각 행을 다시 포맷해야합니까?

답변

-1

C#에서 개체를 처리 할 때, 나는 이벤트 객체의 목록을 만들기 위해 이벤트 클래스를 만드는 것이 좋습니다 :

public class Event 
{ 
    public string EventName { get; set; } 
    public string EventType { get; set; } 
} 

public class YourClass 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
    public List<Event> events { get; set; } 
} 

당신이 당신의 MSSQL 데이터베이스에 JSON 객체로 저장된 객체가 필요한 경우, 당신이 할 수있는

:

List<Event> yourEvents = new List<Event>(); 

Newtonsoft.Json.JsonConvert.SerializeObject(yourEvents).ToString(); 

당신의 MSSQL 데이터베이스에서 검색, 당신은 다음 C 번호 목록을 만들 수 Serialize 기능의 역을 사용할 수 있습니다 : 당신이 당신의 데이터베이스에 저장 갈 때 변환

Newtonsoft.Json.JsonConvert.DeserializeObject(yourRetrievedEvents); 

Deserialize에 당신의 검색 데이터를 모두 당신이 Linq에 사용할 수 있습니다 :

public class RetrievedClass 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
    public string events { get; set; } 
} 

List<RetrievedClass> dbData = mssql() 

List<YourClass> result = dbData.Select(x => new YourClass 
    { 
     firstname = x.firstname, 
     lastname = x.lastname, 
     events = Newtonsoft.Json.JsonConvert.DeserializeObject(x.events) 
    }); 

불행하게도 내가 Linq에 또는 루프를 사용하지 않고하는 방법을 볼 수 없습니다.

+0

이 방법을 사용하면 모델을 동기화 할 수 있으므로 이벤트 컬렉션을 직렬화하는 getter가있는 문자열 속성 이벤트를 가질 수 있습니다. 이것은 당신에게 쉽게 모델 바인딩과 db 동기화를 줄 것입니다. – Saravanan

+0

그것은 효과적으로 이미 MSSQL에서 데이터를 생성 한 것입니다. 이후 deserialize하려면 각 행을 통해 루핑을 의미할까요? –

+0

아하나. 나는 데이터를 deserializing하는 방법을 포함하도록 내 대답을 편집했다. –