Varun
Varun

Reputation: 597

Converting FHIR Json to Google proto generated model

We have the FHIR JSON model which needs to be serialized using protobuf but we are not able to serialize it as the JSON is not getting parsed to the generated google fhir models. https://github.com/google/fhir

FHIR JSON:

{
  "resourceType" : "Bundle",
  "id" : "bundle-transaction",
  "meta" : {
    "lastUpdated" : "2014-08-18T01:43:30Z"
  },
  "type" : "transaction",
  "entry" : [{
    "fullUrl" : "urn:uuid:61ebe359-bfdc-4613-8bf2-c5e300945f0a",
    "resource" : {
      "resourceType" : "Patient",
      "text" : {
        "status" : "generated",
        "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
      },
      "active" : true,
      "name" : [{
        "use" : "official",
        "family" : "Chalmers",
        "given" : ["Peter",
        "James"]
      }],
      "gender" : "male",
      "birthDate" : "1974-12-25"
    },
    "request" : {
      "method" : "POST",
      "url" : "Patient"
    }
  },
  {
    "fullUrl" : "urn:uuid:88f151c0-a954-468a-88bd-5ae15c08e059",
    "resource" : {
      "resourceType" : "Patient",
      "text" : {
        "status" : "generated",
        "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
      },
      "identifier" : [{
        "system" : "http:/example.org/fhir/ids",
        "value" : "234234"
      }],
      "active" : true,
      "name" : [{
        "use" : "official",
        "family" : "Chalmers",
        "given" : ["Peter",
        "James"]
      }],
      "gender" : "male",
      "birthDate" : "1974-12-25"
    },
    "request" : {
      "method" : "POST",
      "url" : "Patient",
      "ifNoneExist" : "identifier=http:/example.org/fhir/ids|234234"
    }
  },
  {
    "fullUrl" : "http://example.org/fhir/Patient/123",
    "resource" : {
      "resourceType" : "Patient",
      "id" : "123",
      "text" : {
        "status" : "generated",
        "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
      },
      "active" : true,
      "name" : [{
        "use" : "official",
        "family" : "Chalmers",
        "given" : ["Peter",
        "James"]
      }],
      "gender" : "male",
      "birthDate" : "1974-12-25"
    },
    "request" : {
      "method" : "PUT",
      "url" : "Patient/123"
    }
  },
  {
    "fullUrl" : "urn:uuid:74891afc-ed52-42a2-bcd7-f13d9b60f096",
    "resource" : {
      "resourceType" : "Patient",
      "text" : {
        "status" : "generated",
        "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
      },
      "identifier" : [{
        "system" : "http:/example.org/fhir/ids",
        "value" : "456456"
      }],
      "active" : true,
      "name" : [{
        "use" : "official",
        "family" : "Chalmers",
        "given" : ["Peter",
        "James"]
      }],
      "gender" : "male",
      "birthDate" : "1974-12-25"
    },
    "request" : {
      "method" : "PUT",
      "url" : "Patient?identifier=http:/example.org/fhir/ids|456456"
    }
  },
  {
    "fullUrl" : "http://example.org/fhir/Patient/123a",
    "resource" : {
      "resourceType" : "Patient",
      "id" : "123a",
      "text" : {
        "status" : "generated",
        "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
      },
      "active" : true,
      "name" : [{
        "use" : "official",
        "family" : "Chalmers",
        "given" : ["Peter",
        "James"]
      }],
      "gender" : "male",
      "birthDate" : "1974-12-25"
    },
    "request" : {
      "method" : "PUT",
      "url" : "Patient/123a",
      "ifMatch" : "W/\"2\""
    }
  },
  {
    "request" : {
      "method" : "DELETE",
      "url" : "Patient/234"
    }
  },
  {
    "request" : {
      "method" : "DELETE",
      "url" : "Patient?identifier=123456"
    }
  },
  {
    "fullUrl" : "urn:uuid:79378cb8-8f58-48e8-a5e8-60ac2755b674",
    "resource" : {
      "resourceType" : "Parameters",
      "parameter" : [{
        "name" : "coding",
        "valueCoding" : {
          "system" : "http://loinc.org",
          "code" : "1963-8"
        }
      }]
    },
    "request" : {
      "method" : "POST",
      "url" : "http://hl7.org/fhir/ValueSet/$lookup"
    }
  },
  {
    "request" : {
      "method" : "GET",
      "url" : "Patient?name=peter"
    }
  },
  {
    "request" : {
      "method" : "GET",
      "url" : "Patient/12334",
      "ifNoneMatch" : "W/\"4\"",
      "ifModifiedSince" : "2015-08-31T08:14:33+10:00"
    }
  }]
}

And the code that we have used to serialize it is as shown below:

 static void Main(string[] args)
    {
        // Load the FHIR JSON bundle
        //FHIR JSON from the above 
        string fhirJson = File.ReadAllText("REFER THE ABOVE FHIR JSON");
 
        // Parse the FHIR JSON bundle
        var jsonParser = new JsonParser(JsonParser.Settings.Default.WithIgnoreUnknownFields(true));
        var bundle = jsonParser.Parse<Bundle>(fhirJson);
 
        // Serialize the bundle to Protobuf
        byte[] protobufData;
        using (var memoryStream = new MemoryStream())
        {
            bundle.WriteTo(memoryStream);
            protobufData = memoryStream.ToArray();
        }
 
        // Save the Protobuf data to a file
        File.WriteAllBytes("fhir_bundle.protobuf", protobufData);
 
        Console.WriteLine("FHIR bundle converted to Protobuf and saved to fhir_bundle.protobuf");
    }

We are using the R4 version.

This is resulting in an exception Google.Protobuf.InvalidProtocolBufferException.

Upvotes: 0

Views: 50

Answers (0)

Related Questions