2017-10-02 12 views
-1

I持ってMSSQLデータベースのテーブルを表し、次のクラス:変換文字列JSONのプロパティは、Web API呼び出しにオブジェクトへ

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

「イベント」プロパティは、実際にJSONの配列で格納する前にシリアライズされたオブジェクトされますテーブル。例行:私は似ているようにJSON形式でのWeb 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プロパティがエスケープされますそして、このような1つの文字列として出てくる:

明らか
[{ 
    "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オブジェクトとして保存され、そのオブジェクトが必要な場合は、することができます

0123:

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でデータを作成しているものです。後でデシリアライズすると、各行をループすることになりますが、そうではありませんか? –

+0

ああ、私は参照してください。私は自分の答えを編集して、データをデシリアライズする方法を含めるようにしました。 –

関連する問題