C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

JSON形式での格納方法

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■91104 / inTopicNo.1)  JSON形式での格納方法
  
□投稿者/ れい (1回)-(2019/05/29(Wed) 14:01:56)

分類:[C#] 

C#でDBから値を取得し、下記のJson形式で格納する際はどうすればよいでしょうか。

<テーブル>
cd,name,address
001,名前1,日本
001,名前2,日本
002,名前1,日本
002,名前2,日本

<json形式>
親List:[
{
cd:001,
子リスト:[
{name:'名前1',address:'日本'}
{name:'名前2',address:'日本'}
]
},
{
cd:002,
子リスト:[
{name:'名前1',address:'日本'}
{name:'名前2',address:'日本'}
]
},
]

下記のような配列を使って試みましたが、そもそも合っているのか、格納の仕方もよくわかりません。
Dictionary<string, List<Dictionary<string, string>>>

C#のプログラム上で格納するやり方を教えてください。
よろしくお願いします。
引用返信 編集キー/
■91105 / inTopicNo.2)  Re[1]: JSON形式での格納方法
□投稿者/ WebSurfer (1827回)-(2019/05/29(Wed) 14:39:54)
No91104 (れい さん) に返信

> C#でDBから値を取得し、下記のJson形式で格納する際はどうすればよいでしょうか。

意味が分かりません。何をどこにどのような形式で格納するのですか? 

<json形式> とか書いてありますけど、それは何なのでしょう? JSON 形式としては不正ですけど。

SQL Server などの DB に、質問に書いてあるようなテーブルがあって、それを ADO.NET のライブラリか何かで
読んできて C# のオブジェクトにし、それを JSON 文字列にシリアライズしたいということですか?
引用返信 編集キー/
■91106 / inTopicNo.3)  Re[2]: JSON形式での格納方法
□投稿者/ れい (2回)-(2019/05/29(Wed) 15:14:58)
わかりづらくてすみません。
SQL Serverに上記の値が入っていて、
json形式というわけではなく、ListやDictionaryなどを使って格納したいです。
テーブルの「cd」単位にリストをつくり格納したいです。

親List:[
{
cd:001,
子リスト:[
{name:'名前1',address:'日本'}
{name:'名前2',address:'日本'}
]
},
{
cd:002,
子リスト:[
{name:'名前1',address:'日本'}
{name:'名前2',address:'日本'}
]
},
]
引用返信 編集キー/
■91108 / inTopicNo.4)  Re[3]: JSON形式での格納方法
□投稿者/ WebSurfer (1828回)-(2019/05/29(Wed) 15:35:08)
No91106 (れい さん) に返信

タイトルに「JSON形式での格納方法」とか書いてありますが JSON は全く関係ないのですね。
できればタイトルを書き直していただけませんか?

> ListやDictionaryなどを使って格納したいです。

何の目的でどのように使うかによって形は変わってくるはずで、そのあたりが分からない第三者
が適当に考えて案を出しても、結局質問者さんの姥久手二には使えなくて、お互い時間の無駄に
なる恐れがあります。

例えば(あくまで例えばです・・・これで質問者さんの目的が果たせるかは知る由もありません
ので)、

public class MyClass
{
public string Name { get; set; }
public string Address { get; set; }
}

というようなクラスを定義して、

Dictionary<string, List<MyClass>>

というオブジェクトとして取得するとかいう具体的なことを書いてください。

引用返信 編集キー/
■91110 / inTopicNo.5)  Re[4]: JSON形式での格納方法
□投稿者/ PANG2 (294回)-(2019/05/29(Wed) 15:58:05)
2019/05/29(Wed) 16:21:50 編集(投稿者)

public class データ
{
public 親[] 親リスト;
}
public class 親
{
public string cd;
public 子[] 子リスト;
}
public class 子
{
public string name;
public string address;
}

private void Form1_Click(object sender, EventArgs e)
{
データ d
= new データ
{
親リスト
= new 親[] {
new 親 { cd = "001", 子リスト = new 子[] { new 子 { name = "名前1", address = "日本" }, new 子 { name = "名前2", address = "日本" } } },
new 親 { cd = "002", 子リスト = new 子[] { new 子 { name = "名前1", address = "日本" }, new 子 { name = "名前2", address = "日本" } } }
}
};

MemoryStream ms = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(データ));
ser.WriteObject(ms, d);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
Debug.WriteLine(sr.ReadToEnd());
}

--
JSON文字列

{"親リスト":[{"cd":"001","子リスト":[{"address":"日本","name":"名前1"},{"address":"日本","name":"名前2"}]},
{"cd":"002","子リスト":[{"address":"日本","name":"名前1"},{"address":"日本","name":"名前2"}]}]}

https://docs.microsoft.com/ja-jp/dotnet/framework/wcf/feature-details/how-to-serialize-and-deserialize-json-data

引用返信 編集キー/
■91111 / inTopicNo.6)  Re[5]: JSON形式での格納方法
□投稿者/ れい (3回)-(2019/05/29(Wed) 15:59:59)
現在このようなものがあります。↓

result = 省略

var resultList = result.ToList();
if (resultList.Count() == 0)
{
return NotFound();
}
List<Dictionary<string, string>> ListA = new List<Dictionary<string, string>>();

foreach (var list in resultList)
{
Dictionary<string, string> diclist = new Dictionary<string, string>();
diclist.Add("cd", list.cd);
diclist.Add("name", list.nm);
ListA.Add(diclist);
}
上記の格納イメージは下記になると思います。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ListA:[
{cd: '001', name: '名前'}
]

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー



下記を実現したい場合はどうロジックを組めばよいでしょうか?
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
CorprankList:[
{
cd:001,
LisAt:[
{cd: '001', name: '名前'}
]
},
{
Cd:002,
ListA:[
{cd: '002', name: '名前'}
]
},
]
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
引用返信 編集キー/
■91112 / inTopicNo.7)  Re[6]: JSON形式での格納方法
□投稿者/ れい (4回)-(2019/05/29(Wed) 16:04:04)
No91111 (れい さん) に返信
> 現在このようなものがあります。↓
>
> result = 省略
>
> var resultList = result.ToList();
> if (resultList.Count() == 0)
> {
> return NotFound();
> }
> List<Dictionary<string, string>> ListA = new List<Dictionary<string, string>>();
>
> foreach (var list in resultList)
> {
> Dictionary<string, string> diclist = new Dictionary<string, string>();
> diclist.Add("cd", list.cd);
> diclist.Add("name", list.nm);
> ListA.Add(diclist);
> }
> 上記の格納イメージは下記になると思います。
> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
> ListA:[
> {cd: '001', name: '名前'}
> ]
>
> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
>
>
>
> 下記を実現したい場合はどうロジックを組めばよいでしょうか?
> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
> CorprankList:[
> {
> cd:001,
> LisAt:[
> {cd: '001', name: '名前'}
> ]
> },
> {
> Cd:002,
> ListA:[
> {cd: '002', name: '名前'}
> ]
> },
> ]
> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
引用返信 編集キー/
■91115 / inTopicNo.8)  Re[6]: JSON形式での格納方法
□投稿者/ WebSurfer (1829回)-(2019/05/29(Wed) 18:44:07)
No91111 (れい さん) に返信

せっかく説明していただいたのに何ですが、理解できません。
ギブアップです。

お役に立てずすみませんが、他の方の回答をお待ちください。
引用返信 編集キー/
■91117 / inTopicNo.9)  Re[1]: JSON形式での格納方法
□投稿者/ PANG2 (295回)-(2019/05/29(Wed) 22:31:09)
2019/05/29(Wed) 22:32:57 編集(投稿者)

No91104 (れい さん) に返信
> 下記のような配列を使って試みましたが、そもそも合っているのか、格納の仕方もよくわかりません。
> Dictionary<string, List<Dictionary<string, string>>>

格納する器については、

No91110
> public class データ

を参照。

格納方法については、接続型(DataReader)でも非接続型(DataAdapter/DataSet)でも可能と思いますが情報少なくで回答できない。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ