10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C#でFireStoreにクラスのデータを入れる

Last updated at Posted at 2018-10-23

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>

データ

いい感じでデータ入ってますね
image.png

生ソースで実行

実際にデバッグ実行などをソースでしたい場合は
ソースコードを取ってきて、Google.Cloud.FirestoreとGoogle.Cloud.Firestore.V1Beta1をプロジェクトに加えて参照してあげればできます

nugetのGoogle.Cloud.Firestoreのversionが1.0.0に!

公式のドキュメントページにもC#の欄が増えました!

やったね~♪

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?