在我的 json 檔案的步驟中,我想構建一個移動到下一個或上一個 id 的 linq,具體取決于您是點擊后退按鈕(上一個 id)還是下一個按鈕(下一個 contentid)。如果發生這種情況,則必須修改標簽的文本。我不確定如何在 Linq 中實作這一點。
這是我的 JSON,我需要在步驟中基于 contentid 的下一個或上一個文本
{
"protocols": [
{
"id": "1",
"name": "Pols meten",
"steps": [
{
"chapterTitle": "Voorzorg",
"contents": [
{
"contentid": "1",
"text": "voor blabla"
}
]
},
{
"contents": [
{
"contentid": "2",
"text": "voor blabla2"
}
]
},
{
"chapterTitle": "Handeling",
"contents": [
{
"contentid": "3",
"text": "handeling blabla"
}
]
},
{
"contens": [
{
"contentid": "4",
"text": "handeling blabla2"
}
]
},
{
"chapterTitle": "Nazorg",
"contents": [
{
"contentid": "5",
"text": "nazorg blabla"
}
]
},
{
"contents": [
{
"contentid": "6",
"text": "nazorg blabla2"
}
]
}
],
"versie": "1"
}
]
}
我的json類
public class RootObject
{
[JsonProperty("protocols")]
public List<Protocol> Protocols { get; set; }
}
public class Protocol
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("steps")]
public List<Step> Steps { get; set; }
[JsonProperty("versie")]
public string Versie { get; set; }
}
public class Step
{
[JsonProperty("chapterTitle")]
public string ChapterTitle { get; set; }
[JsonProperty("contents")]
public List<Content> Contents { get; set; }
}
public class Content
{
[JsonProperty("contentid")]
public string Contentid { get; set; }
[JsonProperty("text")]
public string Text { get; set; }
}
}
坐下是我的 2 個按鈕,當我點擊它時我會轉到下一個或上一個 ID(如果它們存在)
readonly Step _step;
private Protocol protocol;
public StepView(Step step, string nextTitle)
{
_step = step;
InitializeComponent();
Title = nextTitle;
// krijg label text
lblText.Text = step.Contents.FirstOrDefault(x => x.Text != null).Text;
}
public void BtnNext_Clicked(object sender, EventArgs e)
{
if (_step == null)
{
lblText.Text = _step.Contents.FirstOrDefault(x => x.Text != null).Text;
}
else
{
var index = protocol.Steps.IndexOf(_step) 1;
_step = protocol.Steps.Count >= index ? protocol.Steps.LastOrDefault() : protocol.Steps[index];
}
lblText.Text = _step?.Contents.FirstOrDefault(x => x.Text != null).Text;
}
public void BtnBack_Clicked(object sender, EventArgs e)
{
//voor als het de allerlaatste stap is en je geen stap meer terug kan
if (_step == null)
{
_step = protocol.Steps.LastOrDefault();
}
//als je nog wel een stap terug kunt
else
{
var index = protocol.Steps.IndexOf(_step) - 1;
_step = index >= 0 ? protocol.Steps[index] : protocol.Steps.FirstOrDefault();
}
lblText.Text = _step?.Contents.FirstOrDefault(x => x.Text != null).Text;
}
如果有的話,我怎樣才能讓按鈕跟隨上一個文本或下一個文本?
uj5u.com熱心網友回復:
介紹領域 private Content content;
處理程式:
public void BtnNext_Clicked(object sender, EventArgs e)
{
var index = content == null ? 0 : _step.Contents.IndexOf(content) 1;
content = _step.Contents.ElementAtOrDefault(index);
lblText.Text = content?.Text;
}
public void BtnBack_Clicked(object sender, EventArgs e)
{
var index = content == null ? _step.Contents.Count - 1 : _step.Contents.IndexOf(content) - 1;
content = _step.Contents.ElementAtOrDefault(index);
lblText.Text = content?.Text;
}
uj5u.com熱心網友回復:
按照你的要求。我做了一個例子。您傳遞所選專案的索引和方向以選擇下一個專案,例如上一個或下一個(您可以洗掉 where 條件 - 我正在查看本示例中包含標題的記錄)
void Main()
{
string json = "{\"protocols\":[{\"id\":\"1\",\"name\":\"Pols meten\",\"steps\":[{\"chapterTitle\":\"Voorzorg\",\"contents\":[{\"contentid\":\"1\",\"text\":\"voor blabla\"}]},{\"contents\":[{\"contentid\":\"2\",\"text\":\"voor blabla2\"}]},{\"chapterTitle\":\"Handeling\",\"contents\":[{\"contentid\":\"3\",\"text\":\"handeling blabla\"}]},{\"contens\":[{\"contentid\":\"4\",\"text\":\"handeling blabla2\"}]},{\"chapterTitle\":\"Nazorg\",\"contents\":[{\"contentid\":\"5\",\"text\":\"nazorg blabla\"}]},{\"contents\":[{\"contentid\":\"6\",\"text\":\"nazorg blabla2\"}]}],\"versie\":\"1\"}]}";
rootObject = JsonConvert.DeserializeObject<RootObject>(json);
rootObject.Dump();
GetPrevNextItem(1,Direction.Up).Dump("Previous record");
GetPrevNextItem(1,Direction.Down).Dump("Next Record");
}
public Step GetPrevNextItem(int startingIndex, Direction dir)
{
if (dir == Direction.Up)
return rootObject.Protocols.FirstOrDefault().Steps
.Where(ss=> !string.IsNullOrEmpty(ss.ChapterTitle))
.ElementAtOrDefault(startingIndex -1);
else
return rootObject.Protocols.FirstOrDefault().Steps
.Where(ss=> !string.IsNullOrEmpty(ss.ChapterTitle))
.ElementAtOrDefault(startingIndex 1);
}
public enum Direction
{
Up,
Down
}
public RootObject rootObject {get;set;}
public class RootObject
{
[JsonProperty("protocols")]
public List<Protocol> Protocols { get; set; }
}
public class Protocol
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("steps")]
public List<Step> Steps { get; set; }
[JsonProperty("versie")]
public string Versie { get; set; }
}
public class Step
{
[JsonProperty("chapterTitle")]
public string ChapterTitle { get; set; }
[JsonProperty("contents")]
public List<Content> Contents { get; set; }
}
public class Content
{
[JsonProperty("contentid")]
public string Contentid { get; set; }
[JsonProperty("text")]
public string Text { get; set; }
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360057.html
