C#でFireStoreを使いたい
FireStoreをC#で使いたい時はをnugetで入れてると思うのですが、クラスのデータをそのままFireStoreにAddしたい時に型のマッピングが上手くいかなくてエラーが出てました。
公式ドキュメントでFirestoreDataAttributeをつければいいと分かったので自分用のメモも兼ねて久々投稿です。
FirestoreDataAttributeとFirestorePropertyをつける
例えばローカルのxmlを読み込んでそのクラスをfirestoreにaddするケースです。
C#
using Google.Cloud.Firestore;
using System;
using System.IO;
using System.Xml.Linq;
namespace FirestoreSample
{
class Program
{
const string ProjectId = "自分のProjectId";
static void Main(string[] args)
{
// API とサービスの認証情報でサービスアカウントを作成し、
// ダウンロードしたアクセスキーファイルのパスを環境変数で指定
Environment.SetEnvironmentVariable(
"GOOGLE_APPLICATION_CREDENTIALS",
Path.Combine(AppContext.BaseDirectory, "jsonファイルのパス"));
XElement readXml = XElement.Load("Test.xml");
var TestXml = new TestXml(readXml);
var db = FirestoreDb.Create(ProjectId);
//ここでfirestoreにデータ追加
db.Collection("testxml").AddAsync(TestXml).Wait();
}
[FirestoreData()]
public class TestXml
{
public TestXml() { }
public TestXml(XElement xmlTecMLXml) => TestXmlXElement = xmlTecMLXml;
//XElementはマッピングでエラーになるので登録しない
public XElement TestXmlXElement { get; private set; }
//登録したい名前をつけれる
//なにもない場合はそのまま
[FirestoreProperty("test_xml_string")]
public string TestXmlString => TestXmlXElement.ToString();
//クラスもできる
[FirestoreProperty]
public Child Child => new Child() { XmlChild = TestXmlXElement.Element("Child") };
}
[FirestoreData()]
public class Child
{
public XElement XmlChild { get; set; }
[FirestoreProperty]
public string Test1 => XmlChild.Element("Test1").Value;
[FirestoreProperty]
public int Test2 => int.Parse(XmlChild.Element("Test2").Value);
}
}
}
Test.xml
<?xml version="1.0" encoding="UTF-8"?>
<Test>
<Child Index="0">
<Test1>test1</Test1>
<Test2>2</Test2>
</Child>
</Test>
データ
生ソースで実行
実際にデバッグ実行などをソースでしたい場合は
ソースコードを取ってきて、Google.Cloud.FirestoreとGoogle.Cloud.Firestore.V1Beta1をプロジェクトに加えて参照してあげればできます
nugetのGoogle.Cloud.Firestoreのversionが1.0.0に!
公式のドキュメントページにもC#の欄が増えました!
やったね~♪