パブリック プロパティを公開しないクラス (AttributeBag) を作成しています。内部には、Get メソッドと Set メソッドを介して管理するオブジェクト (属性) のリストがあります。AttributeBag クラスで JsonSerializer.Serialize() を実行し、以下のような JSON 構造を取得できるようにしたいと考えています。
[
{
"Name": "x",
"Value": "y"
},
{
"Name": "x1",
"Value": "y1"
},
{
"Name": "x2",
"Value": "y2"
}
]
私の Attribute および AttributeBag クラスは次のようになります。
public class Attribute
{
public string Name { get; set; }
public object Value { get; set; }
}
public class AttributeBag
{
private readonly List<Attribute> attributes;
public AttributeBag()
{
this.attributes = new List<Attribute>();
}
public AttributeBag Set(string name, object value)
{
var searchAttribute = this.attributes.Find(x => x.Name.Equals(name));
if (searchAttribute != null)
{
searchAttribute.Value = value;
}
else
{
this.attributes.Add(new Attribute { Name = name, Value = value });
}
return this;
}
public Attribute Get(string name)
{
var searchAttribute = this.attributes.Find(x => x.Name.Equals(name));
if (searchAttribute != null)
{
return searchAttribute;
}
else
{
throw new AttributeNameNotFoundException(name);
}
}
public object GetValue(string name)
{
var searchAttribute = this.attributes.Find(x => x.Name.Equals(name));
if (searchAttribute != null)
{
return searchAttribute.Value;
}
else
{
throw new AttributeNameNotFoundException(name);
}
}
}
私は次のような簡単なことをしたいと思っています:
var ab = new AttributeBag();
ab.Set("x", "y");
ab.Set("x1", "y1");
ab.Set("x2", "y2");
string jsonData = JsonSerializer.Serialize(ab);
ドキュメントを見てみましたが、上記の手順を進める方法がわかりません。これには Utf8JsonWriter を使用する必要がありますか? Utf8JsonWriter を使用する場合、JSON 書き込みを実装し、たとえば ab.Serialize() で呼び出す関数が必要であり、JsonSerializer を直接使用する必要はないようです。それは行く方法ですか、それとも JsonSerializer.Serialize を使用する方法はありますか?
どんなポインタでも大歓迎です!